Daha çox

OGR və Python'da ST_LINE_INTERPOLATE_POINT istifadə


OGR və Python istifadə edərək linestringdə orta nöqtəni tapmaq mənə maraqlıdır. Bu daha çox seqmentli bir xətt ola bilər. ExecuteSQL () metodundan istifadə edərək Pythonda ST_LINE_INTERPOLATE_POINT istifadə edə bilərəmmi?

Əgər belədirsə, bəlkə kimsə mənə düzgün SQL sorğusunu formalaşdırmağa kömək edə bilərmi? Yoxsa alternativ bir seçim var? Centroid istifadə etməyi düşündüm, amma mərkəz də həndəsənin xaricində ola bilər.

---- YENİLƏN ----
Windows-da QGIS quraşdırmışam və OSGeo4W qabığını istifadə edirəm. Aşağıdakı Python kodunu hazırladım, amma təəssüf ki, işləmir, geom NoneType olaraq görülür.

osgeo idxaldan ogr outdriver = ogr.GetDriverByName ('SQLITE') source = outdriver.CreateDataSource ('temp') tmp = outdriver.Open ('temp') layer = tmp.ExecuteSQL ("" SELECT ST_AsText (ST_Line_STO_St_ (ST_Line_) 'LINESTRING (90 379, 99 278, 189 224, 297 193, 403 189, 459 202)'), 0.5)) "" "geom = layer.GetNextFeature (). GetGeometryRef () print geom.ExportToWkt ()

Https://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html-də təsvir edildiyi kimi funksiya aşağıdakı kimi istifadə olunur

ST_Line_Interpolate_Point (əyri xətti, kəsir İkiqat dəqiqlik): Nöqtə

SQL əmr sətri ilə sınaqdan keçirilə bilən bir nümunə, məsələn spatialite-gui ilə. Kesir = 0.5 orta nöqtəni tapır.

ST_AsText SEÇİN (ST_Line_Interpolate_Point (ST_GeomFromText ('LINESTRING (90 379, 99 278, 189 224, 297 193, 403 189, 459 202)'), 0.5)) POINT (222.434071 214.403183)

Bu sorğunu ExecuteSQL () üçün şablon kimi istifadə edə bilərsiniz. SQLite SQL ləhcəsini istifadə etməlisiniz və GDAL, ST_Line_Interpolate_Point funksiyasına sahib olan belə Spatilite versiyası ilə tərtib olunmalıdır.


PyQGIS həndəsə obyekti (QgsGeometry) interpolat funksiyasına malikdir. İstifadə etdiyim OGR həndəsə obyekti istifadə etmir. Buna görə də bunun əvəzinə QgsGeometry istifadə edəcəyəm.

Baxın: https://woostuff.wordpress.com/2012/08/05/generating-chainage-distance-nodes-in-qgis/