python for ArcGIS 绘制上海市板块地图

python for ArcGIS 绘制上海市板块地图

背景及思路

第一次用python操作 ArcGIS, 写下这篇博文记录一下。板块是房地产行业专有术语,很多维度特征都在板块层级讨论的。这不,要把上海市所有所有板块画出来,作为其他数据,如产业,人口数据的一个划分,作为最小研究地理空间单位。以前咨询过淘宝,把上海市板块用ArcGIS画出来大约需要150元人民币,恰好,手里头有板块边界的位置数据,即板块边界的经纬度,如下图所示
在这里插入图片描述
琢磨着,自己用python写个脚本,每个板块抽象成一个由多个折点构成的多边形,实现思路大致如下

  • 读数,即读取板块边界经纬度数据
  • 拆点,即采用split()函数将经纬度数据分割,构成折点
  • 连线,即将折点连起来形成封闭多边形,即板块

完整代码

# -*- coding: utf-8 -*-
"""
Project_name:drawing plate 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 #导入数据分析模块
plate_data=pd.read_excel("lat_lng.xlsx") #读取板块数据
rows,cols=plate_data.shape #数据框尺寸
lng_lat=plate_data[u'板块经纬度'] #经纬度数据
plate_name=plate_data[u'板块名称'] #板块名称

#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): #按行循环
    points=lng_lat[row].split(";") #折点
    for spot in points:
        xy=spot.split(",") #折点经纬度
        if len(xy)==2:
            point=arcpy.Point() #几何对象,用来存放折点对象
            point.id=row;point.X=float(xy[0]);point.Y=float(xy[1])  #转为点对象
            polygonPoints.add(point) #构成一串折点
            #print(point.id)
    polygon=arcpy.Polygon(polygonPoints,spatial_ref,"","") #利用折点构造多边形带空间参考
    polygonGeometryList.append(polygon) #把多边形追加到数组  
    polygonPoints.removeAll() #移除折点
result=arcpy.CopyFeatures_management(polygonGeometryList,r"D:\python for ArcGIS\绘制上海板块\plate_of_Shanghai.shp","POLYGON")

arcpy.AddField_management(result, "title", "TEXT") #添加文本的title字段
with arcpy.da.UpdateCursor(result, ['title']) as cursor: #建立对从要素类或表返回的记录的读写访问权限。对图表层进行的title字段循环,以写入
    for i, row in enumerate(cursor):  #循环可迭代更新游标
        row[0] = plate_name[i] #将第i行的板块名称赋值给title字段的第i行
        cursor.updateRow(row) #更新表中的当前行

结果截图

图中淡黄绿色就是上海市的一个一个板块。
在这里插入图片描述

代码解读

思路简单代码清晰, 所有的板块做成一个列表 polygonGeometryList ,然后一起画出来,也可以通过游标insert的办法插入。形成shape文件后再用arcpy.AddField_management增加一个字段,用for循环增加字段的值,这里是板块名称。
title字段

后话

画出来的多边形两个相邻板块的公共分割线还存在不重合的情行,放大你会发现公共边会有空隙,以后要改进算法,消除这种拓扑错误。如果还有不懂的欢迎来微信公众号“三行科创”交流群。

1,python for ArcGIS 绘制上海市板块地图
2,python for ArcGIS 绘制上海市环线地图
3,python for ArcGIS 绘制北京市板块地图
4,python for ArcGIS 绘制广州市板块地图
5,python for ArcGIS 绘制深圳市板块地图
6,python for ArcGIS 绘制成都市板块地图
7,python for ArcGIS 绘制武汉市板块地图
8,python for ArcGIS 绘制杭州市板块地图
9,python for ArcGIS 绘制重庆市板块地图
10,python for ArcGIS绘制合肥市板块地图
11,python for ArcGIS 绘制南京市板块地图
12,python for ArcGIS绘制宁波市板块地图
13,python for ArcGIS 绘制沈阳市板块地图
14,python for ArcGIS 绘制苏州市板块地图
15,python for ArcGIS 绘制天津市板块地图
16,python for ArcGIS 绘制西安市板块地图
17,python for ArcGIS 绘制郑州市板块地图

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三行数学

赞赏也是一种肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值