利用坐标转成点、线、面是很常规的一个操作,也是很必要的一个操作,同时也是比较繁琐的一个操作,如何让这个过程变得简单是需要考虑的事情。
我们拿到的坐标一般都是经纬分秒制的,需要进行一下转换,变为10进制的,可以在excel里面来完成。在wps中可以利用ctrl+E(智能填充,根据前面的值,推测你后面需要的,坐标是度分秒时,我们需要把度分秒各自提取出来,比如说度,我只要在第一行填写第一行坐标对于的度,然后在第二行ctrl+E,就可以得到数据表中所有坐标的度,同理适合于分和秒),填充加快转换效率。(同时也要仔细检查一下,也可能wps识别错误)。
添加数据
先设置经度再设置纬度,设置地理坐标系统,经纬度转点的话用地理坐标系统,后面要投影的话再可以投影坐标,有些 时候如果位置不对请检查经纬度是不是位置弄反了,如果还有问题的话,可以在一个空白的工作空间中进行转换,因为旧的工作空间中有临时投影可能会导致数据转换出问题。
导出数据
在这里是地理坐标系统,后期如果需要的话可以进行投影,一般来说就是用地理坐标系统进行分析的话也没什么很大的问题。
将点转换成线。
将线转换成面。
直接输入坐标点。
与前面利用经纬度类似,但要设置投影坐标系统。
点连点成线。
点转线
注意:点转线的顺序按照排列顺序的,如果没有设置好顺序的话,线就会打结。
线转换成面。
points是一个列表,如果是要生成很多的点的话,可以利用python直接读取文件生成列表。
# -*- coding: utf-8 -*-
import arcpy
points = [[1111, 1112], [1111, 1133]]#表示坐标点
sp=arcpy.SpatialReference(4326)#数字代表坐标系统WGS-84
path = "D:\work file\STUDY DATA\Folder"#设置文件生成路径
filename = 'points.shp'
fc = path + "\\" + filename
arcpy.CreateFeatureclass_management(path, filename, 'POINT', '', '', '', sp)
arcpy.AddField_management(fc, "FIDX", 'TEXT', 50)
cursor = arcpy.InsertCursor(fc)
# ---------------
index = 0
for pt in points:
point = arcpy.Point()
point.X = pt[0]
point.Y = pt[1]
row = cursor.newRow()
row.shape = point
row.FIDX = index
cursor.insertRow(row)#将记录插入到属性表里面
index = index + 1
print('finsh')
# -*- coding: utf-8 -*-
import arcpy
import xlwt
sp = arcpy.SpatialReference(4326)
path = "D:\work file\STUDY DATA\Folder"
filename = 'line.shp'
fc = path + "\\" + filename
arcpy.CreateFeatureclass_management(path, filename, 'POLYLINE', '', '', '', sp)
arcpy.AddField_management(fc, "DLMC", 'TEXT', 50)
cursor = arcpy.InsertCursor(fc)
poylinePts = [[[111, 112], [115, 119]], [[150, 159], [160, 172]]]
index = 0
for coord in poylinePts:
array = arcpy.Array()
for pt in coord:
point = arcpy.Point()
point.X = pt[0]
point.Y = pt[1]
array.add(point)
polyline = arcpy.Polyline(array)
row = cursor.newRow()
row.shape = polyline
row.DLMC = index
index += 1
cursor.insertRow(row)
print 'finshed'
# -*- coding: utf-8 -*-
import arcpy
poylinePts = [[[111, 112], [115, 119],[120,127]], [[150, 159], [160, 172],[175,180]]]
sp = arcpy.SpatialReference(4326)
path = "D:\work file\STUDY DATA\Folder"
filename = 'feature.shp'
fc = path + "\\" + filename
arcpy.CreateFeatureclass_management(path, filename, 'POLYGON', '', '', '', sp)
arcpy.AddField_management(fc, "DLMC", 'TEXT', 50)
cursor = arcpy.InsertCursor(fc)
print 'finsh'
for cood in poylinePts:
array=arcpy.Array()
for pt in cood:
point=arcpy.Point()
point.X=pt[0]
point.Y=pt[1]
array.add(point)
tpolygon=arcpy.Polygon(array)
row= cursor.newRow()
row.shape=tpolygon
row.DLMC='polygon'
cursor.insertRow(row)
print 'finshed'
对于很多个坐标点的话也可以,python从EXCEL中读取数据转换为列表,方法如下,但在这之前要安装xlrd的包。
python3
import xlrd as xd
data =xd.open_workbook ('...../data1.xlsx') #打开excel表所在路径
sheet = data.sheet_by_name('Sheet1') #读取数据,以excel表名来打开
d = []
for r in range(sheet.nrows): #将表中数据按行逐步添加到列表中,最后转换为list结构
data1 = []
for c in range(sheet.ncols):
data1.append(sheet.cell_value(r,c))
d.append(list(data1))
print(d)
python2
# -*- coding: utf-8 -*-
import xlrd
data =xlrd.open_workbook (u'D:\work file\STUDY DATA\Folder\坐标演示.xls') #打开excel表所在路径
sheet = data.sheet_by_name('Sheet1') #读取数据,以excel表名来打开
d = []
for r in range(sheet.nrows): #将表中数据按行逐步添加到列表中,最后转换为list结构
data1 = []
for c in range(sheet.ncols):
data1.append(sheet.cell_value(r,c))
d.append(list(data1))
print(d)
前面这种方法是针对于python3.9可行,但对于python2.7,需要在路径最前面加个u,例如(u’…/data1.xlsx’)。