excel或txt格式坐标到面图层(python)

背景:现有如下图所示的多个界址点坐标(excel格式或txt格式)。
在这里插入图片描述
需求:根据大量界址点坐标转换为界址点坐标对应的面shp图层。
解决思路:一、为方便处理首先将txt文件或excel文件转换为csv文件(逗号分割符)。
                  二、为方便理解和使用,我们将过程分为:1.点坐标到点集合图层(xy to point),2.点集合到线图层(point to line),3.线图层到面图层(line to polygon)。
解决步骤:
一、转为csv。
        1.txt转csv。如图所示一名为测试的文件夹下有大量由rtk测量得到的后缀为txt的坐标文件。我们需要在同一目录下新建一个txt,输入:ren *.txt *.csv,然后保存关闭,将后缀改为.bat(ren可以批量修改指定目录下的所有文件后缀,有兴趣的同学可以自行学习一下)。然后双击bat,我们会发现文件夹下的所有txt都已改为csv文件。
在这里插入图片描述
        2.excel转csv。excel转为csv直接另存为就行了,在这里不再陈述。需要说的是首先我们需要把多个excel合为一个excel,多个excel尤其是相同格式的合为一个excel的方法网络上点点鼠标就可以得到,在这里介绍一种方法,没错,依旧还是用vba实现!至于vba宏的用法前文中已经描述过多,在这里不再赘述。直接上多个相同格式excel合并为一个的代码:


```vbnet
Sub all_contents()
Dim MyPath, MyName, AWbName
Dim Wb As Workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False
MyPath = ActiveWorkbook.Path
MyName = Dir(MyPath & "\" & "*.xls")
AWbName = ActiveWorkbook.Name
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄"
End Sub

        3.修改格式。在合并完成以后我门需要把格式修改为,如下图所示的格式(界址点号作为绘制点的顺序,转为线时方便按顺序连接;x、y坐标不再多说,点(序)号作为识别不同要素的关键字,即同一个线要素的界址点号都唯一):在这里插入图片描述
二、由坐标转面。关于此部分的python代码,用arcgis安装时自带的python环境即可,本人就是用自带的python2.7实现,关于python代码如何具体修改使用和其他疑问,欢迎大家私信交流。(此部分代码运行时,本想使生成的要素存在设置好的数据库中,不知为何频频报错,至今无法解决,所以只好以shp的方式进行存储。剩下的基本都是上代码和图了)。
        1.坐标转点集。这一步的代码,注释和运行结果如图所示,可以看出生成的点图层的坐标系都和我们设置的一样。

    # -*- coding: utf-8 -*-
import arcpy
from arcpy import env
import glob
import os
import arcgisscripting
gp=arcgisscripting.create()
spatial_ref=r'C:\Users\Administrator\Desktop\yanshi\zuobiaoxi\China_2000_3_Degree_GK_Zone_38.prj' #坐标系
env.workspace =r'C:\Users\Administrator\Desktop\yanshi\csv' #工作空间
pathout=r'C:\Users\Administrator\Desktop\yanshi\shp' #输出路径
 
x_corrods='xzuobiao' #x坐标
y_corrods='yzuobiao' #y坐标
Z_filed='jiezhidianhao' #需要保留的字段1
Z_filed='xuhao' #需要保留的字段2
try:    
    for file1 in arcpy.ListFiles("*.csv"): 
        print file1
        info=os.path.basename(file1).split('.')[0] #以csv名称命名生成的shp,获取csv名称 去掉后缀 
        intable=file1 
        outlayer=info  
        print'outlayer',outlayer
        gp.MakeXYEventLayer_management(intable,x_corrods,y_corrods,outlayer,spatial_ref,Z_filed) #根据xy创建shp
        print'MakeXYEventLayer over'
        gp.FeatureClassToShapefile_conversion(outlayer,pathout) 
        print'ToShapefile over'
 
except:
    print gp.GetMessages()

在这里插入图片描述

        2.点集转线图层。这一步的代码,注释和运行结果如图所示(此功能及下一个先图层转面图层的功能在arcgis10.2.2及以上版本内有内置好的python程序集可以直接使用,在这里我们依旧以代码的形式进行操作),从运行结果图中我们可以看出,生成的先及其界址点绘制顺序是正确的。

# Name: PointsToLine_Example2.py
# Description: Convert point features into line features
# Import system modules
import arcpy
# Set environment settings
arcpy.env.workspace = r'C:\Users\Administrator\Desktop\yanshi\shp'
# Set local variables
inFeatures = "ceshi.shp"
outFeatures = r'C:\Users\Administrator\Desktop\yanshi\pointstoline.shp'
lineField = "xuhao"
sortField = "jiezhidian"
# Execute PointsToLine 
arcpy.PointsToLine_management(inFeatures, outFeatures, lineField, sortField)

在这里插入图片描述

        3.线转为面图层。直接上代码吧,应该不会错了。

# Name: FeatureToPolygon_Example2.py
# Description: Use FeatureToPolygon function to construct habitat areas
#              from park boundaries and rivers.
# Author: ESRI.wrj
# import system modules 
import arcpy
from arcpy import env
# Set environment settings
env.workspace = r'C:\Users\Administrator\Desktop\yanshi'
# Set local parameters
inFeatures = ["pointstoline.shp"]
outFeatureClass = r'C:\Users\Administrator\Desktop\yanshi\polygon.shp'
clusTol = "0.0001 Meters"
# Use the FeatureToPolygon function to form new areas
arcpy.FeatureToPolygon_management(inFeatures, outFeatureClass, clusTol,
                        "NO_ATTRIBUTES", "")

在这里插入图片描述

至此我们实现了从测绘仪器得到的坐标,到面图层的转换。与传统方式的cass展点,在cad中按照顺序连接的方法相比,要节约很多时间。想了解此篇文章中代码的具体用法、或者其他疑问和部分步骤直接生成面图层的代码,请私信本人。同时也欢迎大家多使用多提出问题,进一步完善代码。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值