Python: 如何从文本文件创建点形状文件

7

我正在编写一个Python代码以读取一个多边形形状文件中的点,并将它们保存在一个点形状文件中。 首先,我创建了一个文本文件,并将点(x,y)存储在该.txt文件中。然后我试图从文本文件创建一个点形状文件,但出现了错误。
以下是代码(仅最后一部分):

creat point shape-file from text file 
import fileinput
import string
import os
env.overwriteOutput=True
outpath="C:/roadpl"
newfc="newpoint.shp" 
arcpy.CreateFeatureclass_management(outpath, newfc, "Point")
infile="C:/roadpl/roadL5.txt"
cursor=arcpy.da.InsertCursor(newfc, ["SHAPE@"])
array=arcpy.Array()
for line in fileinput.input(infile):
    X, Y=string.split(line, " ")
    array.add(arcpy.Point(X,Y))
cursor.insertRow([arcpy.Point(array)])
fileinput.close()
del cursor

这里是错误:

Traceback (most recent call last):
  File "C:\Lab5\P_Code_L5", line 49, in <module>
    point.X, point.Y  = line.split()
  File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\_base.py", line 87, in _set
    return setattr(self._arc_object, attr_name, cval(val))
RuntimeError: Point: Input value is not numeric

它确切地给了什么错误文本? - Silvio Mayolo
如果您将此问题发布到地理信息系统上,可能会获得更多的关注... http://gis.stackexchange.com - bcollins
2个回答

1

1
这里有一个替代方案。它读取一个制表符分隔的.ascii文件(非常类似于.txt文件),假设它具有经度和纬度的标题。我遇到了这个问题,然后得出了这个解决方案,所以我认为它可能会对某些人有所帮助。
# ------------------------------------------------------
# IMPORTS
# ------------------------------------------------------

import os
import pandas as pd
from shapely.geometry import Point, mapping
from fiona import collection

# ------------------------------------------------------
# INPUTS
# ------------------------------------------------------

# Define path
path = os.path.abspath(os.path.dirname(__file__))

# Set working directory
os.chdir(path)  

# Define file to convert
file = 'points.ascii'

# Define shp file schema
schema = { 'geometry': 'Point', 'properties': { 'LocationID': 'str', 'Latitude': 'float', 'Longitude': 'float' } }

# Read in data
data = pd.read_csv(file, sep='\t') 

# Define shp file to write to
shpOut = 'points.shp'

# Create shp file
with collection(shpOut, "w", "ESRI Shapefile", schema) as output:
    # Loop through dataframe and populate shp file
    for index, row in data.iterrows():
        
        # Define point
        point = Point(row['Longitude'], row['Latitude'])
        # Write output
        output.write({
            'properties': {'LocationID': row['LocationID'], 'Latitude': row['Latitude'], 'Longitude': row['Longitude'] }, 
            'geometry': mapping(point)
        })

我得到了 raise KeyError(key) from err KeyError: 'Longitude' - user7721156
听起来你的文件没有“经度”标题。你的文件有哪些标题? - Casivio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接