一、点线面要素制作
1、点要素
(1)Arcmap制作
(3)根据线生成
import xlwtimport pandas as pdimport randomimport requestsimport jsonkey='445ee7843bccc2c188cf62d34a3827ec' #填入自己的keydef getlnglat(address):url='https://restapi.amap.com/v3/geocode/geo'params = {'key':key,'address':address}requests.adapters.DEFAULT_RETRIES = 5res = requests.get(url, params)json_data = json.loads(res.text)return json_databook1 = xlwt.Workbook()sheet1 = book1.add_sheet("0", cell_overwrite_ok=True)new_file1 = '7.xls'sheet1.write(0, 0, 'OBJECTID')sheet1.write(0, 1, 'x')sheet1.write(0, 2, 'y')sheet1.write(0, 3, 'roadName')sheet1.write(0, 4, 'district')def sel(rymd):md = pd.read_excel(rymd)x = md["x"]y = md['y']x1 = md["x1"]y1 = md['y1']dress = md['Name']i = 24999count = 1for x_x in x[25000:]:i = i+1road = getlnglat('长沙市'+dress[i])['geocodes'][0]for r in range(0,random.randint(1,3)):sheet1.write(count, 0, i)if float(x_x) > float(x1[i]):x_r = random.uniform(x1[i],x_x)y_r = (x_r-x_x)/(x1[i]-x_x)*(y1[i]-y[i])+y[i]sheet1.write(count, 1, x_r)sheet1.write(count, 2, y_r)sheet1.write(count,3,dress[i])if len(road['district']) ==0:continueelse:sheet1.write(count,4,road['district'])print(i)else:x_r = random.uniform(x_x,x1[i])y_r = (x_r-x_x)/(x1[i]-x_x)*(y1[i]-y[i])+y[i]sheet1.write(count, 1, x_r)sheet1.write(count, 2, y_r)sheet1.write(count,3,dress[i])if len(road['district']) ==0:continueelse:sheet1.write(count,4,road['district'])print(i)count +=1book1.save(new_file1)sel("line.xls")
(2)高德地图POI映射


import requestsimport pandas as pdimport jsonimport timeimport math#各下级行政区的代码,若是嫌逐个复制麻烦可以通过读取文件的方式实现,此处不进行讲解arr=['500000']#API的URL,在这里进行了结构化处理url1="https://restapi.amap.com/v3/place/text?keywords=医院&city="url2="&output=JSON&offset=20&key=0fb8677da809afaa03b93f31ac9b4e85&extensions=all&page="#用于储存数据x=[]#用于计数num=0#循环各下级行政区进行POI检索for i in range(0,len(arr)):#当前行政区city=arr[i]#因为官方对API检索进行了45页限制,所以只要检索到45页即可for page in range(1,46):#若该下级行政区的POI数量达到了限制,则警告使用者,之后考虑进行POI类型切分if page==45:print("警告!!POI检索可能受到限制!!")#构造URLthisUrl=url1+city+url2+str(page)#获取POI数据data=requests.get(thisUrl)#转为JSON格式s=data.json()#解析JSONaa=s["pois"]#若解析的JSON为空,即当前行政区的数据不够45页(即没有达到限制),返回if len(aa)==0:break#对每条POI进行存储print(page)for k in range(0,len(aa)):s1=aa[k]["name"]s2=aa[k]["type"]s3=aa[k]["address"]s4=aa[k]["adname"]s5=aa[k]["location"].split(",")x.append([s1,s2,s3,s4,float(s5[0]),float(s5[1])])num+=1print("爬取了 "+str(num)+" 条数据")#将数据结构化存储至规定目录的CSV文件中c = pd.DataFrame(x)c.to_csv('./cq_hospital.csv',encoding='utf-8-sig')
1、线要素制作
(1)arcmap制作
(2)路径规划生存
(3)根据图片生成
3、面要素
(1)arcmap手画
(2)深度学习目标检测
4、excel转shp



5、OpenstreetMap获取
步骤一:
进入openstreetmap(osm)官网:https://www.openstreetmap.org/
在搜索框内搜索你想要查询的城市,如:贵阳市
得到一下信息:
步骤二:
进入osm overpass api :http://www.overpass-api.de/
点击上图中红圈
进入以下页面
输入如下代码:
<osm-script><query type="relation"><has-kv k="boundary" v="administrative"/><has-kv k="name:zh" v="海口市"/></query><print/></osm-script>
(此处的k=”name:zh” v=”贵阳市”,说明了步骤一的目的,因为国内和国外的名称写法不一样,如果为k=”name” v=”贵阳市”,运行代码后得不到想要结果,此处应根据步骤一中截图的name写法,还有值来输入)
输完代码后,点击右下角“Query”键,下载文件,得到一个名为“interprept”文件,用记事本打开
找到
即得到贵阳市边界id :2782246
(当然该id在步骤一搜索“贵阳市”时即可看到)
完成以上步骤后,再次中输入一下代码,获取城市的路网数据:
<osm-script timeout="1800" element-limit="100000000"><union><area-query ref="3602784613"/><recurse type="node-relation" into="rels"/><recurse type="node-way"/><recurse type="way-relation"/></union><union><item/><recurse type="way-node"/></union><print mode="body"/></osm-script>
:
为了得到城市的路网数据,需再原边界id的基础上加上“360000000”
360000000
+ 2782246
————————
3602782246
(注意对齐哦!)
得到城市的最终编号: 3602782246
最后点击右下角“Query”,同样得到“interprept”文件
文件中即包含了城市的路网信息
**
文件转换
https://geoconverter.infs.ch/vector 将interpret文件转化文shp文件格式
效果展示
6、阿里云获取
使用阿里云地图选择器工具:http://datav.aliyun.com/tools/atlas
打开后只要在左上角位置输入需要的行政区划范围名称,就可以快速获取到该范围的矢量底图数据。提供的获取方式有JSON API,也可以直接下载geojson或者svg格式。
如果直接下载了geojson格式的数据,可以通过mapshaper工具:https://mapshaper.org/转换成shapefile格式数据,大功告成。
7、软件获取
推荐软件91地图、Bigemap。直接下载(但是没钱)可以淘宝价格便宜














