Arcgis制作行政区划矢量文件(shp格式)

Kanya ·
更新时间:2024-11-14
· 696 次阅读

毕业设计的缘故,需要用到深圳市行政边界shp文件(包含各区边界)。直接在网上找现成又靠谱的shp文件还挺难的,我也在csdn上下载过一个付费的,还是偏差挺大的,而且也不包含各区划分情况,就想还是自己做一个。也尝试过使用百度api直接接入,看到很多技术博客都是推荐的这个,但是在使用过程中还是觉得哪里不对,可能是我的问题,没有找对方法。后来尝试了阿里的DataV,找到json文件的接口,把目标数据复制下来,形成csv文件再在arcgis中使用,具体过程如下:
步骤一
打开DataV的地图选择器页面:DataV地图选择器, 输入你感兴趣的城市,比如深圳市:
在这里插入图片描述
步骤二
复制红色框中的json链接,在chrome浏览器中打开(用IE打开乱码),会得到如下的json文件:
在这里插入图片描述
步骤三
把里面的经纬度数据按区分别保存在一个txt文件中,8个区就有8个txt文件。再简单把每一个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, 如果小伙伴们有更好的建议,欢迎前来交流!


作者:在养一只虎纹�



矢量 arcgis

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章