ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)

注:此处的表格请使用.csv格式,.xlsx和.xls格式不保证能成功。完整代码直接拉到最下。

手动方法

先来看看我们即将用到的csv文件:

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第1张图片

一共五项数据,其中最核心的属性是x、y坐标,其余的都是次要属性,plotid是编号,value1、value2是随机生成的数值。

第一步:打开arcmap,首先不要直接从add data中添加csv文件,选择Add XY Data:

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第2张图片

点击以后会弹出这么个框:

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第3张图片

至此我们算是达到了阶段性的胜利:让点显示在arcmap里面了!

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第4张图片

但是此时我们注意到,我们得到的并不是点的矢量文件,而是一个这样的东西:

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第5张图片

所以第二步:我们右键这个events,选择Export Data导出:

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第6张图片

ArcMap:表格中XY点数据生成矢量文件(手动&代码两种方法)_第7张图片

这就转成了矢量文件:

 查看一下属性没问题就成功了。

代码方法

上述手动操作都是针对数据量小情况的操作,如果涉及到批量处理,比如有几百上千个点文件要转矢量,就需要用到代码。

我们直接使用Arcmap自带python:

第一步首先进行一些前期设置,比如导入功能模块、设置输入输出路径:

# -*- coding: utf-8 -*-
# 首先检查python中是否有以下模块
import csv
import arcpy
import os
import arcgisscripting

# 设置路径
input = "E:\\points.csv"            # 待处理csv文件
outputname = "point.shp"            # 待输出shapefile文件
outputpath = "E:\\"                 # 待输出shapefile文件
output = outputpath+'\\'+outputname # 待输出shapefile文件完整路径

第二步我们创建一个点状矢量文件:

# 创建处理对象
gp = arcgisscripting.create()
gp.OverWriteOutput = True   ## 允许overwrite

# 创建矢量点文件 
gp.CreateFeatureclass(outputpath,outputname,"Point")

第三步,创建属性字段,俗称表头,就是下面这个东西:

其中,FID是系统自动加上的编号不必理会,Shape*是一个叫几何令牌的东西,可以访问特定几何信息,在点状要素中,这个几何信息指的是坐标xy,剩下的几个字段就跟csv的表头一模一样了。

下面是在shapefile里创建属性字段代码:

# 创建属性字段
gp.AddField(output, "plotid", "LONG")
gp.AddField(output, "x", "DOUBLE")
gp.AddField(output, "y", "DOUBLE")
gp.AddField(output, "value1", "DOUBLE")
gp.AddField(output, "value2", "DOUBLE")

AddField函数的三个参数分别是:shapefile路径、字段名称(自己随便命名,可以和csv中统一,也可以不统一)、字段数据类型(有LONG、DOUBLE、TXT等类型,注意没有float)

表头创建好了,那么第四步就是向表里添加数据了:

# 添加数据
cur = gp.InsertCursor(output)
pnt = gp.CreateObject("Point")

## 打开csv文件
f = open(input,'r')
data = csv.reader(f,delimiter=',')
next(data)  # 跳过表头

## 读入数据
for line in data:
    
    # 获取csv每行中的五个数据,依次赋予变量plotid、x、y、value1、value2
    plotid = int(line[0])
    x = float(line[1])
    y = float(line[2])
    value1 = float(line[3])
    value2 = float(line[4])
    
    # 将以上四个变量写入shapefile相应字段
    feat = cur.NewRow()
    pnt.x = x
    pnt.y = y
    
    feat.shape = pnt
    feat.x = pnt.x
    feat.y = pnt.y
    feat.plotid = plotid
    feat.value1 = value1
    feat.value2 = value2
    
    cur.InsertRow(feat)
	
del cur
f.close()

运行以后就大功告成了。

最后附上完整代码:

# -*- coding: utf-8 -*-
"""
@author: 国宝级退堂鼓手
"""
# 首先检查python中是否有以下模块
import csv
import arcpy
import os
import arcgisscripting

# 设置路径
input = "E:\\points.csv"            # 待处理csv文件
outputname = "point.shp"            # 待输出shapefile文件
outputpath = "E:"                   # 待输出shapefile文件
output = outputpath+'\\'+outputname # 待输出shapefile文件完整路径

# 创建处理对象
gp = arcgisscripting.create()
gp.OverWriteOutput = True   ## 允许overwrite

# 创建矢量点文件 
gp.CreateFeatureclass(outputpath,outputname,"Point")

# 创建属性字段
gp.AddField(output, "plotid", "LONG")
gp.AddField(output, "x", "DOUBLE")
gp.AddField(output, "y", "DOUBLE")
gp.AddField(output, "value1", "DOUBLE")
gp.AddField(output, "value2", "DOUBLE")

# 添加数据
cur = gp.InsertCursor(output)
pnt = gp.CreateObject("Point")

## 打开csv文件
f = open(input,'r')
data = csv.reader(f,delimiter=',')
next(data)  # 跳过表头

## 读入数据
for line in data:
    
    # 获取csv每行中的五个数据,依次赋予变量plotid、x、y、value1、value2
    plotid = int(line[0])
    x = float(line[1])
    y = float(line[2])
    value1 = float(line[3])
    value2 = float(line[4])
    
    # 将以上四个变量写入shapefile相应字段
    feat = cur.NewRow()
    pnt.x = x
    pnt.y = y
    
    feat.shape = pnt
    feat.x = pnt.x
    feat.y = pnt.y
    feat.plotid = plotid
    feat.value1 = value1
    feat.value2 = value2
    
    cur.InsertRow(feat)
	
del cur
f.close()

你可能感兴趣的:(半杯水的arcgis,arcgis,python,shapefile)