一、点线面要素制作

1、点要素

(1)Arcmap制作

image.pngimage.pngimage.png
image.png

(3)根据线生成

  1. import xlwt
  2. import pandas as pd
  3. import random
  4. import requests
  5. import json
  6. key='445ee7843bccc2c188cf62d34a3827ec' #填入自己的key
  7. def getlnglat(address):
  8. url='https://restapi.amap.com/v3/geocode/geo'
  9. params = {'key':key,
  10. 'address':address}
  11. requests.adapters.DEFAULT_RETRIES = 5
  12. res = requests.get(url, params)
  13. json_data = json.loads(res.text)
  14. return json_data
  15. book1 = xlwt.Workbook()
  16. sheet1 = book1.add_sheet("0", cell_overwrite_ok=True)
  17. new_file1 = '7.xls'
  18. sheet1.write(0, 0, 'OBJECTID')
  19. sheet1.write(0, 1, 'x')
  20. sheet1.write(0, 2, 'y')
  21. sheet1.write(0, 3, 'roadName')
  22. sheet1.write(0, 4, 'district')
  23. def sel(rymd):
  24. md = pd.read_excel(rymd)
  25. x = md["x"]
  26. y = md['y']
  27. x1 = md["x1"]
  28. y1 = md['y1']
  29. dress = md['Name']
  30. i = 24999
  31. count = 1
  32. for x_x in x[25000:]:
  33. i = i+1
  34. road = getlnglat('长沙市'+dress[i])['geocodes'][0]
  35. for r in range(0,random.randint(1,3)):
  36. sheet1.write(count, 0, i)
  37. if float(x_x) > float(x1[i]):
  38. x_r = random.uniform(x1[i],x_x)
  39. y_r = (x_r-x_x)/(x1[i]-x_x)*(y1[i]-y[i])+y[i]
  40. sheet1.write(count, 1, x_r)
  41. sheet1.write(count, 2, y_r)
  42. sheet1.write(count,3,dress[i])
  43. if len(road['district']) ==0:
  44. continue
  45. else:
  46. sheet1.write(count,4,road['district'])
  47. print(i)
  48. else:
  49. x_r = random.uniform(x_x,x1[i])
  50. y_r = (x_r-x_x)/(x1[i]-x_x)*(y1[i]-y[i])+y[i]
  51. sheet1.write(count, 1, x_r)
  52. sheet1.write(count, 2, y_r)
  53. sheet1.write(count,3,dress[i])
  54. if len(road['district']) ==0:
  55. continue
  56. else:
  57. sheet1.write(count,4,road['district'])
  58. print(i)
  59. count +=1
  60. book1.save(new_file1)
  61. sel("line.xls")

(2)高德地图POI映射

image.pngimage.png

  1. import requests
  2. import pandas as pd
  3. import json
  4. import time
  5. import math
  6. #各下级行政区的代码,若是嫌逐个复制麻烦可以通过读取文件的方式实现,此处不进行讲解
  7. arr=['500000']
  8. #API的URL,在这里进行了结构化处理
  9. url1="https://restapi.amap.com/v3/place/text?keywords=医院&city="
  10. url2="&output=JSON&offset=20&key=0fb8677da809afaa03b93f31ac9b4e85&extensions=all&page="
  11. #用于储存数据
  12. x=[]
  13. #用于计数
  14. num=0
  15. #循环各下级行政区进行POI检索
  16. for i in range(0,len(arr)):
  17. #当前行政区
  18. city=arr[i]
  19. #因为官方对API检索进行了45页限制,所以只要检索到45页即可
  20. for page in range(1,46):
  21. #若该下级行政区的POI数量达到了限制,则警告使用者,之后考虑进行POI类型切分
  22. if page==45:
  23. print("警告!!POI检索可能受到限制!!")
  24. #构造URL
  25. thisUrl=url1+city+url2+str(page)
  26. #获取POI数据
  27. data=requests.get(thisUrl)
  28. #转为JSON格式
  29. s=data.json()
  30. #解析JSON
  31. aa=s["pois"]
  32. #若解析的JSON为空,即当前行政区的数据不够45页(即没有达到限制),返回
  33. if len(aa)==0:
  34. break
  35. #对每条POI进行存储
  36. print(page)
  37. for k in range(0,len(aa)):
  38. s1=aa[k]["name"]
  39. s2=aa[k]["type"]
  40. s3=aa[k]["address"]
  41. s4=aa[k]["adname"]
  42. s5=aa[k]["location"].split(",")
  43. x.append([s1,s2,s3,s4,float(s5[0]),float(s5[1])])
  44. num+=1
  45. print("爬取了 "+str(num)+" 条数据")
  46. #将数据结构化存储至规定目录的CSV文件中
  47. c = pd.DataFrame(x)
  48. c.to_csv('./cq_hospital.csv',encoding='utf-8-sig')

image.png

1、线要素制作

(1)arcmap制作

image.png

(2)路径规划生存

如果想生成的先是路径。
image.png
image.png

(3)根据图片生成

image.pngimage.pngimage.png
image.pngimage.png

3、面要素

(1)arcmap手画

image.png

(2)深度学习目标检测

image.png
image.png
image.png
image.png
image.pngimage.png
image.png

4、excel转shp

image.png
image.png
image.png

5、OpenstreetMap获取

步骤一:
进入openstreetmap(osm)官网:https://www.openstreetmap.org/
在搜索框内搜索你想要查询的城市,如:贵阳市
得到一下信息:
GIS操作 - 图27
步骤二:
进入osm overpass api :http://www.overpass-api.de/
GIS操作 - 图28
点击上图中红圈
进入以下页面
GIS操作 - 图29
输入如下代码:


  1. <osm-script>
  2. <query type="relation">
  3. <has-kv k="boundary" v="administrative"/>
  4. <has-kv k="name:zh" v="海口市"/>
  5. </query>
  6. <print/>
  7. </osm-script>

(此处的k=”name:zh” v=”贵阳市”,说明了步骤一的目的,因为国内和国外的名称写法不一样,如果为k=”name” v=”贵阳市”,运行代码后得不到想要结果,此处应根据步骤一中截图的name写法,还有值来输入)
输完代码后,点击右下角“Query”键,下载文件,得到一个名为“interprept”文件,用记事本打开
找到
即得到贵阳市边界id :2782246
(当然该id在步骤一搜索“贵阳市”时即可看到)


完成以上步骤后,再次中输入一下代码,获取城市的路网数据:
GIS操作 - 图30


  1. <osm-script timeout="1800" element-limit="100000000">
  2. <union>
  3. <area-query ref="3602784613"/>
  4. <recurse type="node-relation" into="rels"/>
  5. <recurse type="node-way"/>
  6. <recurse type="way-relation"/>
  7. </union>
  8. <union>
  9. <item/>
  10. <recurse type="way-node"/>
  11. </union>
  12. <print mode="body"/>
  13. </osm-script>


为了得到城市的路网数据,需再原边界id的基础上加上“360000000”
360000000
+ 2782246
————————
3602782246
(注意对齐哦!)
得到城市的最终编号: 3602782246
最后点击右下角“Query”,同样得到“interprept”文件
文件中即包含了城市的路网信息
**

文件转换

https://geoconverter.infs.ch/vector 将interpret文件转化文shp文件格式

效果展示

image.png

6、阿里云获取

使用阿里云地图选择器工具:http://datav.aliyun.com/tools/atlas

打开后只要在左上角位置输入需要的行政区划范围名称,就可以快速获取到该范围的矢量底图数据。提供的获取方式有JSON API,也可以直接下载geojson或者svg格式。
如果直接下载了geojson格式的数据,可以通过mapshaper工具:https://mapshaper.org/转换成shapefile格式数据,大功告成。

7、软件获取

推荐软件91地图、Bigemap。直接下载(但是没钱)可以淘宝价格便宜
image.png