Daha çox

Pythonda CRS koordinatlarının EPSG: 4269-dan EPSG: 3857-ə çevrilməsində problem

Pythonda CRS koordinatlarının EPSG: 4269-dan EPSG: 3857-ə çevrilməsində problem


source_srs = get_srs (shp_abs_path) source_epsg = source_srs.GetAttrValue ("PROJCS | GEOGCS | AUTHORITY", 1) print source_epsg #prints 4269 target_epsg = 3857 #, çünki bunlar leafletjs target_srs_Srs._srs_srs_srs_srs._srs._srs_srs._srs_srs._srs_srs =) osr_transform = osr.CoordinateTransformation (source_srs, target_srs)

sonra mən formalı sənədləri sadaladığım anda qutuları dərhal dəyişdirirəm

sf = shapefile.Reader (base_path) shapeRecords = sf.shapeRecords () # həndəsəni ayrıca saxlayacaq self.shapefile_records [fn] = shapeRecords for i, form enumerate (sf.shapes ()): bbox = shape.bbox ## OGR / SRS TRANSFORMATION nöqtəsi = ogr.Geometry (ogr.wkbPoint) point.AddPoint (bbox [0], bbox [1]) point.Transform (osr_transform) print point.GetX (), point.GetY () point.AddPoint ( bbox [2], bbox [3]) point.Transform (osr_transform) print point.GetX (), point.GetY ()

koordinatları belə yazdıran ...

-13613708.5846 4623834.1438 -13613668.296 4623869.60132

bunlar məni okeana atdığını düşünürəm, amma Napa mahalında olmaları lazım idi. Hər hansı bir təklif isti qarşılanır. Demək olar ki, hər hansı bir piton libindən istifadə edə bilərəm.

YENİ

Bir problem müəyyən etdim və bunun osgeo ilə və ya təyin etdiyim 4269 ilə 4326 çevrilməsində olub-olmadığına əmin deyiləm. Bu nəticəyə baxın:

>>> osgeo import ogr, osr >>> source_srs = osr.SpatialReference () >>> source_srs.ImportFromEPSG (4269) 0 >>> target_srs = osr.SpatialReference () >>> target_srs.ImportFromEPSG (4326) 0> >> osr_transformation = osr.CoordinateTransformation (source_srs, target_srs) >>> point = ogr.Geometry (ogr.wkbPoint) >>> point.AddPoint (6449750.845, 2001628.41312) >>> point.Transform (osr_transformation) 0 >>> çap point.Transform (osr_transformation) 0 >>> point.GetX (), point.GetY () (6449750.845, 2001628.4131199997)

Heç bir şey dəyişdirilmir. Verilənlərin EPSG: 4269-da olduğunu üç dəfə təsdiqlədim və şərhlərə aşağıda biraz qısaldılmış bir link əlavə etdim.


Çözümündəki problem budurmənbə_srsetibarlı deyilosr.SpatialReference (). Nəticəmənbə_epsg4269 olduqda:

source_srs = osr.SpatialReference () source_srs.ImportFromEPSG (4269)

etibarlı bir osr.SpatialReference () verir

YENİ

Sualınızı düzgün başa düşsəm, Leaflet istifadə etmək istəyirsiniz və Leaflet koordinatların və GeoJSON-un EPSG-də olmasını gözləyir: 4326 (Koordinatların və geoJSON-un broşurada yenidən tərtib edilməsi)

Nəticələrinizi osr ilə proqnozlaşdırsam

osgeo idxal osr wgs84 = osr.SpatialReference () wgs84.ImportFromEPSG (4326) merca = osr.SpatialReference () merca.ImportFromEPSG (3857) transformasiya = osr.CoordinateTransformation (merca, wgs84) print transformation.Transform883.5-84 (83) -122.29402495095313, 38.313684256028715 çevrilmə. TransformPoint (-13613668.296,4623869.60132) -122.29366303230159, 38.313934175663768, 0.0

Nəticədə GeoJSON-u test edə bilərsiniz:

{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {}, "həndəsə": {"type": "Point", "coordinates": [-122.29402495095313 , 38.313684256028715]}}, {"type": "Feature", "properties": {}, "geometry": {"type": "Point", "coordinates": [-122.29366303230159, 38.313934175663768]}}]}}

Geosjon.io və ya GeJSONLint-də

Nəticələr EPSG ilə eynidir: 4269 (Silly Geographic Precision-a baxın):

{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {}, "həndəsə": {"type": "Point", "coordinates": [-122.29402495095315 , 38.313684256946736]}}, {"type": "Feature", "properties": {}, "geometry": {"type": "Point", "coordinates": [-122.29366303230159, 38.313934176581782]}}]}}

Target_epsg = 3857 ilə:


Videoya baxın: Coordinate systems and map projections with FOSS4G 2016 videos