毕业设计的缘故,需要用到深圳市行政边界shp文件(包含各区边界)。直接在网上找现成又靠谱的shp文件还挺难的,我也在csdn上下载过一个付费的,还是偏差挺大的,而且也不包含各区划分情况,就想还是自己做一个。也尝试过使用百度api直接接入,看到很多技术博客都是推荐的这个,但是在使用过程中还是觉得哪里不对,可能是我的问题,没有找对方法。后来尝试了阿里的DataV,找到json文件的接口,把目标数据复制下来,形成csv文件再在arcgis中使用,具体过程如下:
步骤一
打开DataV的地图选择器页面:DataV地图选择器, 输入你感兴趣的城市,比如深圳市:
步骤二
复制红色框中的json链接,在chrome浏览器中打开(用IE打开乱码),会得到如下的json文件:
步骤三
把里面的经纬度数据按区分别保存在一个txt文件中,8个区就有8个txt文件。再简单把每一个txt文件头部和尾部不要的数据去掉,只留下经纬度数据,每个方括号内包含两个数值。
步骤四
再用简短的python代码读取txt文件,清洗并转化为csv文件,完整代码如下:
import pandas as pd
import csv
filename1 = '罗湖区边界线-阿里云.txt'
filename2 = '罗湖区边界线-阿里云.csv'
count = 0
lngs = []
lats = []
with open(filename1, encoding='utf-8') as file_object:
for line in file_object:
#以'],['分开每组经纬度坐标,形成列表
line_list = line.split('],[')
for str in line_list:
#去掉头部的'['和尾部的']'
position = str.strip('[')
position = position.strip(']')
lng_lat = position.split(',')
#经度列表
lngs.append(float(lng_lat[0]))
#纬度列表
lats.append(float(lng_lat[1]))
# print(lngs)
# print(lats)
#使用pandas库转化为csv格式
dataframe = pd.DataFrame({'经度': lngs, '纬度': lats})
dataframe.to_csv(filename2, index=False, encoding='utf_8_sig')
步骤五
得到每个区的csv数据之后就好办了。打开arcmap, 右击图层,选择添加数据,选中你要的数据:
加入之后会得到一个这样的表格标识:
步骤六
右击该文件,选择 “显示XY数据” ,填入经纬度信息,点击确定:
步骤七
之后就会出现这个 “罗湖区边界线-阿里云.csv个事件”, 右击,选择数据, 导出数据,可以把csv文件转换为shp文件,以方便之后的操作。
最终我们看到生成了罗湖区边界点的点shp文件,是这样子的:
步骤八
如果只是完整的一个闭合面,则可以直接选择 数据管理工具—要素–点集转线,将边界点转化为边界线:
步骤九
如果有的行政区划包括岛屿,直接点转线会导致拓扑关系错乱,只能先用选择工具选取岛屿的区域,再执行 点集转线功能,每一个闭合的面是一个单独的图层。这种方式可能不适合有很多分散区域的情形。
最终生成的行政区划图如下,也可以把多个shp文件合成一个,之后使用起来更加方便。
这只是一个gis小白的方法记录,分享给大家,希望能有所帮助。其中有些步骤有点绕,比如从dataV取json文件的时候,应该可以直接读取json文件而不是转化成一个一个的txt,再转化成csv, 如果小伙伴们有更好的建议,欢迎前来交流!