python for ArcGIS 绘制上海市环线地图 您所在的位置:网站首页 上海内中外环线地图分布 python for ArcGIS 绘制上海市环线地图

python for ArcGIS 绘制上海市环线地图

2023-03-11 17:54| 来源: 网络整理| 查看: 265

python for ArcGIS 绘制上海市环线地图 地理数据结果预览完整代码代码解读注意事项参考文献

最近的研究需要把上海环线在底图里面加上显示出来,用以说明各项目的大致地理位置,上海机构那边给出一份关于上海市各环线的经纬度数据如下

地理数据

地理数据包括城市名称,环线名称,环线有哪些点组成,这些点的经纬度。

数据

结果预览

现在的任务是利用这份数据绘制出上海市环线地图。下图中细细的绿色线条就是python画出来的上海市环线位置,分别有内环内,内中环,中外环,郊外环一共4条环线。 结果

完整代码 # -*- coding: utf-8 -*- """ Project_name:drawing cirlce for shanghai @author: 帅帅de三叔 Created on Wed Oct 30 15:16:44 2019 """ import sys arcpy_path = [r'D:\Python27\ArcGIS10.6\Lib\site-packages', r'D:\Program Files (x86)\ArcGIS\Desktop10.6\arcpy', r'D:\Program Files (x86)\ArcGIS\Desktop10.6\bin', r'D:\Program Files (x86)\ArcGIS\Desktop10.6\ArcToolbox\Scripts'] sys.path.extend(arcpy_path) stdi,stdo,stde = sys.stdin, sys.stdout, sys.stderr reload(sys) #通过import引用进来时,setdefaultencoding函数在被系统调用后被删除了,所以必须reload一次 sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde sys.setdefaultencoding('utf-8') import arcpy #导入地理处理模块 from arcpy import env #导入环境类 env.workspace = r"D:\python for ArcGIS\绘制上海环线" env.overwriteOutput = True #是否开启复写 import pandas as pd #导入数据分析模块 circle_data = pd.read_excel(u"上海环线坐标.xlsx") #读环线数据 rows,cols = circle_data.shape #数据框尺寸 lng_lat = circle_data['sBoundary'] #经纬度数据 plate_name = circle_data['sName'] #板块名称 #factoryCode = arcpy.GetParameterAsText(4490) #WGS_1984_World_Mercator投影坐标系工厂代码4490,3395 #spatial_ref = arcpy.SpatialReference(factoryCode) #设置空间参考参数 spatial_ref = arcpy.SpatialReference('China Geodetic Coordinate System 2000') #China Geodetic Coordinate System 2000 or WGS 1984 World Mercator polygonPoints = arcpy.Array() #用来存放构成多边形的折点 polygonGeometryList = [] #用来存放多边形几何对象组 for row in range(0, rows): #按行循环 lng = [] #用来存放各个环线的经度 lat = [] #用来存放各个环线的纬度 points = lng_lat[row].split("],[") #折点 for num_index, spots in enumerate(points): #既有索引,又有实例 if (num_index % 2) == 0: #如果是偶数 lng.append(float(spots.replace("[", ""))) #追加经度 else: lat.append(float(spots.replace("]", ""))) #追加纬度 #print(len(lng), len(lat)) #测试每个环线由多少个点构成 for i, j in zip(lng, lat): #对经纬度对循环 point = arcpy.Point() #几何对象,用来存放折点对象 point.X = i point.Y = j point.id = row #print(i, j) polygonPoints.add(point) #构成一串折点 polygon = arcpy.Polyline(polygonPoints, spatial_ref, "","") #利用折点构造多边形带空间参考 polygonGeometryList.append(polygon) #把多边形追加到数组 polygonPoints.removeAll() #移除折点 result = arcpy.CopyFeatures_management(polygonGeometryList, r"D:\python for ArcGIS\绘制上海环线\circle_sh.shp","POLYGON") #保存 代码解读

主要包括数据处理和绘制环线两大块,关键是数据处理方面。 1,数据处理 由于原数据是一个经度在一个方括号里面,一个纬度在一个方括号里面,而生成point 的时候是要经纬度对的形式,也就是说经度,纬度成对出现,如(121.2100032,31.340544),这里先用 split("],[") 函数分开每个环线的经纬度,变成两串,然后再根据奇偶性判断是否追加到 lng 和 lat 列表里面去,经过这一次循环后,就把内环内,内中环,中外环和郊外环各环线的经度,纬度分别存进lng和lat列表里面去了, 2,绘制环线图像 紧接着用zip函数经度和维度打包成经纬度对,生成折点的几何对象,一串折点下连接起来便是一个线状多边形,然后利用Polyline类生成线状多边形,这样一环一环的生成也不容易混。

注意事项

1, 报reload错误

NameError: name 'reload' is not defined

利用ArcGIS自带的 python2 编译器进行编译,在VScode里面ctrl+shift+p调出python:Select Interpreter,再在其下选择ArcGIS自带的python2.7进行编译,前提是你电脑装了ArcGIS软件,arcpy这个python模块严重依赖ArcGIS软件。 编译 2,如果画出来的图是一条直线,很可能是你经纬度位置调换了。 3,不懂的来微信公众号“三行科创”交流群。

参考文献

1,python for ArcGIS 绘制上海市板块地图 2,Polyline

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有