我想将这个JSON响应中的坐标顺序从(lat,lon)反转为(lon,lat):
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'}
我可以把它拆开,用蛮力把它压回去,但我想知道:什么样的方法能在保持结构完整的同时改变顺序呢?
最佳答案
使用numpy
的解决方案应该适用于任何geojson。它将翻转所有“坐标”。
import json
import requests
import numpy as np
def flip_geojson_coordinates(geo):
if isinstance(geo, dict):
for k, v in geo.iteritems():
if k == "coordinates":
z = np.asarray(geo[k])
f = z.flatten()
geo[k] = np.dstack((f[1::2], f[::2])).reshape(z.shape).tolist()
else:
flip_geojson_coordinates(v)
elif isinstance(geo, list):
for k in geo:
flip_geojson_coordinates(k)
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"
resp = requests.get(url)
gj = json.loads(resp.text)
print gj
flip_geojson_coordinates(gj)
print gj
关于python - 用Python方式反转GeoJSON响应中的lon,lat坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23019143/