下载MapServer中的矢量数据,转存为EsriJSON

@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你应该都可以下载了

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值