Pythonische Methode zum Umkehren von Längen- und Breitengradkoordinaten in einer GeoJSON-Antwort
-
21-12-2019 - |
Frage
Ich möchte die Reihenfolge der Koordinaten in dieser JSON-Antwort von (lat,lon) in (lon,lat) umkehren:
url='https://www.sciencebase.gov/catalogMaps/mapping/ows/5342c5fce4b0aa151574a8ed?\
service=wfs&version=1.1.0&request=GetFeature&typeNames=sb:Conservation_Zone_WGS84&outputFormat=application/json'
response = requests.get(url).json()
print response
{u'crs': {u'properties': {u'code': u'4326'}, u'type': u'EPSG'},
u'features': [{u'geometry': {u'coordinates': [[[[39.81487959537135,
-74.09688169446223],
[39.81488113835475, -74.09587338924456],
[39.8143317590967, -74.09614209870023],
[39.8137616151959, -74.09633047532941],
[39.812950626580545, -74.09670529470912],
[39.8120075697193, -74.09698124228382],
[39.814255381955064, -74.0973277412355],
[39.81487959537135, -74.09688169446223]]]],
u'type': u'MultiPolygon'},
u'geometry_name': u'the_geom',
u'id': u'Conservation_Zone_WGS84.1',
u'properties': {u'ID': 1,
u'NAME': u'Sedge Island Marine Conservation Zone',
u'OBJECTID': 1,
u'SHAPE_AREA': 70259289.0821,
u'SHAPE_LEN': 40592.8006466,
u'WEB_LINK': u'http://www.state.nj.us/dep/fgw/sedge.htm'},
u'type': u'Feature'}],
u'type': u'FeatureCollection'}
Ich könnte es auseinandernehmen, mit brutaler Gewalt zusammenbauen und wieder zusammenfügen, aber ich frage mich:Was wäre eine gute Python-Methode, um die Reihenfolge zu ändern und gleichzeitig die Struktur intakt zu lassen?
Lösung
-Lösung mitgenehmig mit numpy
, die für jeden geojson arbeiten sollte.Es wird alle 'Koordinaten' drehen.
Andere Tipps
Nun ... Das Graben auf Ihre Koordinatenliste dauert Folgendes:
generasacodicetagpre.Um das umzukehren, was Sie tun müssen, müssen Sie dies tun:
generasacodicetagpre.oder ein bisschen sauberer imo:
generasacodicetagpre.Nutzen Sie ein Listenverständnis und ordnen Sie das Ergebnis erneut der Struktur zu.
Da hier mehrere Listen beteiligt sind, sind einige Schleifen erforderlich:
for feature in response['features']:
feature['geometry']['coordinates'] = [[
[[long, lat] for lat, long in coords] for coords in poly]
for poly in feature['geometry']['coordinates']]
Dies setzt voraus, dass die Struktur von 'coordinates'
ist stabil;Ich sehe, dass es eine gibt 'type'
Wenn Sie auch einen Schlüssel verwenden, müssen Sie möglicherweise variieren, wie Sie die Struktur ändern, wenn es sich um andere Typen als handelt u'MultiPolygon
werden verwendet.
Dadurch werden die Daten verschoben von:
>>> pprint.pprint(response)
{u'crs': {u'properties': {u'code': u'4326'}, u'type': u'EPSG'},
u'features': [{u'geometry': {u'coordinates': [[[[39.81487959537135,
-74.09688169446223],
[39.81488113835475,
-74.09587338924456],
[39.8143317590967,
-74.09614209870023],
[39.8137616151959,
-74.09633047532941],
....
[39.814255381955064,
-74.0973277412355],
[39.81487959537135,
-74.09688169446223]]]],
u'type': u'MultiPolygon'},
u'geometry_name': u'the_geom',
u'id': u'Conservation_Zone_WGS84.1',
u'properties': {u'ID': 1,
u'NAME': u'Sedge Island Marine Conservation Zone',
u'OBJECTID': 1,
u'SHAPE_AREA': 70259289.0821,
u'SHAPE_LEN': 40592.8006466,
u'WEB_LINK': u'http://www.state.nj.us/dep/fgw/sedge.htm'},
u'type': u'Feature'}],
u'type': u'FeatureCollection'}
Zu:
>>> pprint.pprint(response)
{u'crs': {u'properties': {u'code': u'4326'}, u'type': u'EPSG'},
u'features': [{u'geometry': {u'coordinates': [[[[-74.09688169446223,
39.81487959537135],
[-74.09587338924456,
39.81488113835475],
[-74.09614209870023,
39.8143317590967],
[-74.09633047532941,
39.8137616151959],
....
[-74.0973277412355,
39.814255381955064],
[-74.09688169446223,
39.81487959537135]]]],
u'type': u'MultiPolygon'},
u'geometry_name': u'the_geom',
u'id': u'Conservation_Zone_WGS84.1',
u'properties': {u'ID': 1,
u'NAME': u'Sedge Island Marine Conservation Zone',
u'OBJECTID': 1,
u'SHAPE_AREA': 70259289.0821,
u'SHAPE_LEN': 40592.8006466,
u'WEB_LINK': u'http://www.state.nj.us/dep/fgw/sedge.htm'},
u'type': u'Feature'}],
u'type': u'FeatureCollection'}
Ihr "pythonischer" Code ist nicht lesbar und funktionieren nicht.Halten Sie es einfach dumm!
generasacodicetagpre.