@
TOC
如何从MapServer中下载矢量数据
最近看到微信推文上城市里面的社区级行政边界数据
如何获取村界和社区边界矢量数据?(武汉、广州为例)
看起来挺有用的,准备下载,看了下原文介绍的方法,还是觉得自己下载数据比较靠谱。怎么下载?
只要原始的MapServer服务的query功能是开启的,就可以遍历的方式把所有数据下载下来。
我们为武汉天地图为例,下载武汉市的社区边界
http://www.digitalwuhan.com/map/
查找服务地址
页面F12,单击地图上的要素,查看服务请求地址,http://58.49.165.89:8010/ServiceAdapter/MAP/%E7%A4%BE%E5%8C%BA%E7%95%8C%E7%BA%BF/07769b53b5243b7d6aea9df803f471c1/identify?f=json&tolerance=3&returnGeometry=true&imageDisplay=400%2C400%2C96&geometry=%7B%22x%22%3A114.2073901367076%2C%22y%22%3A30.6765856933625%7D&geometryType=esriGeometryPoint&sr=4490&mapExtent=110.804374999652%2C28.9434924314722%2C117.83562500034799%2C32.3465075685278&layers=all%3A0&callback=dojo.io.script.jsonp_dojoIoScript3._jsonpCallback
有过服务发布经验的同学应该会发现了,这就是一个ArcGIS REST Services
很多人会去打开
http://58.49.165.89:8010/ServiceAdapter/MAP/%E7%A4%BE%E5%8C%BA%E7%95%8C%E7%BA%BF/07769b53b5243b7d6aea9df803f471c1/
这个链接查看服务地址,可惜404了,但是!你在这个链接后面加个0,再打开看看。这其实表示的当前服务的第一个图层。
http://58.49.165.89:8010/ServiceAdapter/MAP/%E7%A4%BE%E5%8C%BA%E7%95%8C%E7%BA%BF/07769b53b5243b7d6aea9df803f471c1/0
查看最大的OBJECTID
通过原始服务:MapServer/0/query?f=json&where=1%3D1&returnIdsOnly=true查看有多少个要素。
那么武汉社区图层的服务地址就是
http://58.49.165.89:8010/ServiceAdapter/MAP/%E7%A4%BE%E5%8C%BA%E7%95%8C%E7%BA%BF/07769b53b5243b7d6aea9df803f471c1/0/query?f=json&where=1%3D1&returnIdsOnly=true
看到最大的Objectid是3375
遍历下载数据,并存为EsriJSON格式
直接贴代码
import requests
import json
maxobjectid=3375
step=100
idlist=list(range(1,maxobjectid+1))
esrijson={}
for i in range(0,len(idlist),step):
ids=idlist[i:i+step]
arr = map(str,ids)
oids=','.join(arr)
url='http://58.49.165.89:8010/ServiceAdapter/MAP/%E7%A4%BE%E5%8C%BA%E7%95%8C%E7%BA%BF/07769b53b5243b7d6aea9df803f471c1/0/query?f=json&where=&objectIds={}&returnGeometry=true&outFields=*'.format(oids)
r= requests.get(url)
dat = json.loads(r.text)
print(i)
if len(esrijson)==0:
esrijson=dat
else:
esrijson['features'].extend(dat['features'])
with open('wuhan_2000_esri.json','w',encoding='utf-8') as f:
f.write(json.dumps(esrijson,indent=4,ensure_ascii=True))
EsriJSON格式通过Arcmap直接转为shp
好了,所有的mapserver你应该都可以下载了