Daugiau

Kaip padalinti „epsg 4326“ liniją į dalis, susidedančias iš python nurodyto ilgio metrais?

Kaip padalinti „epsg 4326“ liniją į dalis, susidedančias iš python nurodyto ilgio metrais?


Noriu žinoti linerių (epsg: 4326) ilgį metrais, o ne laipsniais. Žinau, kad tam galiu naudoti „proj4“.

Čia yra mano kodas, jei jus domina.

projektas = dalinis (pyproj.transform, pyproj.Proj (init = 'EPSG: 4326'), pyproj.Proj (init = 'EPSG: 3395')) project2 = dalinis (pyproj.transform, pyproj.Proj (init = 'EPSG) : 3395 '), pyproj.Proj (init =' EPSG: 4326 ')) def distance_in_meters (linestring): return transform (project, linestring). Length def interpolate (distance, linestring): current_ratio = 0 taškų = [] žingsnis = distance / distance_in_meters (linestring), o current_ratio <1: point = linestring.interpolate (current_ratio, normalized = True) current_ratio += žingsnio taškai. pridėti (taškas) grąžinimo taškai distance_between_points = 249.67 total_distance_in_meters = distance_between_points * 5 klasės TestInterpolate: TestC test_interpolate (self): su open ("linestring.json", 'r') kaip f: s = forma (json.load (f)) taškai = interpoliuoti (10, s) l = LineString (taškai) self.assertEqual ( distance_in_meters (l), total_distance_in_meters)

Ir čia yra eilutė, kurią naudoju bandymams.

{"type": "LineString", "koordinates": [[37.6232398, 55.7615482], [37.6262633, 55.7606701], [37.6232398, 55.7615482], [37.6262633, 55.7606701], [37.6232398, 55.761606] }

Ką aš padariau, tai paėmiau dviejų taškų koordinates iš „Google“ žemėlapių ir išmatavau atstumą tarp jų, taip pat „Google“ žemėlapiuose. Aš kelis kartus dubliavau, sukurdamas kelią, kuris sukasi pirmyn ir atgal 5 kartus.

O testo rezultatas yra

1864.394777794176 != 1248.35

Tai yra gana toli nuo tikrojo linijinio atstumo. Manau, kad priežastis yra ta, kad aš nenaudoju tinkamo KRS skaitiklių projekcijai.


Ne atsakymas į jūsų klausimą, o pamatinis metodas, kuriuo galite palyginti savo rezultatus su:

  • Perskaitykite šį „PostGIS“ dokumentą http://postgis.net/docs/ST_Length.html
  • Paimkite geografijos pavyzdį „Grąžinti WGS 84 geografijos eilutės ilgį“ ir įveskite linijinę eilutę į užklausą
PASIRINKTI ST_Length (the_geog) Kaip length_spheroid, ST_Length (the_geog, klaidinga) Kaip length_sphere iš (SELECT ST_GeographyFromText ( "SRID = 4326; LINESTRING (37.6232398 55,7615482, 37.6262633 55.7606701, 37,6232398 55.7615482, 37,6262633 55.7606701, 37,6232398 55.7615482, 37,6262633 55,7606701)), kaip the_geog ) Kaip kvailys;

Patikrinkite rezultatus:

length_spheroid 1067.52749423872 length_sphere 1064.36864138641

Aš taip pat konvertavau duomenis į EPSG: 32637 su „OpenJUMP“ ir išmatavau atstumą: 1067.1980.

Išvada: atstumas, kurį matavote nuo „Google“ žemėlapių, nėra gera nuoroda. Ar esate tikras, kad tą atstumą matavote penkis, o ne šešis kartus? Penkis kartus jis sudarytų 1040,291, kuris yra daug arčiau rezultatų naudojant EPSG: 32637 ir geografiją.


Žiūrėti video įrašą: ESRI ArcGIS: Project MODIS - MOD10A2 Tile. Projection EPSG - WGS 84. UTM Zone 43N