xyz文件处理
使用不同的库导出为shp
GDAL库
这个库安装起来不友好,可以使用下面的其他方式实现
from osgeo import ogr, osr
def export_xyz_to_shp(input_file, output_file):
# 创建输入文件的数据源
driver = ogr.GetDriverByName('XYZ')
xyz_ds = driver.Open(input_file, 0)
xyz_layer = xyz_ds.GetLayer()
# 获取输入数据的投影
xyz_srs = osr.SpatialReference()
xyz_srs.ImportFromEPSG(4326) # 根据实际情况设置投影
# 创建输出文件的数据源
driver = ogr.GetDriverByName('ESRI Shapefile')
shp_ds = driver.CreateDataSource(output_file)
shp_layer = shp_ds.CreateLayer('points', srs=xyz_srs, geom_type=ogr.wkbPoint)
# 添加字段到输出图层
field_defn = ogr.FieldDefn('ID', ogr.OFTInteger)
shp_layer.CreateField(field_defn)
# 遍历输入.xyz文件中的要素,并将其写入.shp文件中
for feature in xyz_layer:
xyz_geom = feature.GetGeometryRef()
xyz_x, xyz_y, xyz_z = xyz_geom.GetPoint()
shp_point = ogr.Geometry(ogr.wkbPoint)
shp_point.AddPoint(xyz_x, xyz_y, xyz_z)
shp_feature = ogr.Feature(shp_layer.GetLayerDefn())
shp_feature.SetGeometry(shp_point)
shp_feature.SetField('ID', feature.GetFID())
shp_layer.CreateFeature(shp_feature)
# 释放资源
xyz_ds = None
shp_ds = None
print("导出.shp文件完成!")
# 示例用法
input_xyz_file = 'input.xyz' # 输入.xyz文件路径
output_shp_file = 'output.shp' # 输出.shp文件路径
export_xyz_to_shp(input_xyz_file, output_shp_file)
pandas + shapely + geopandas
import pandas as pd
from shapely.geometry import Point
import geopandas as gpd
def export_xyz_to_shp(input_file, output_file):
# 读取.xyz文件并创建点几何对象
df = pd.read_csv(input_file, sep=' ', header=None, names=['X', 'Y', 'Z'])
geometry = [Point(xyz) for xyz in df[['X', 'Y', 'Z']].values]
# 创建Geopandas数据框
gdf = gpd.GeoDataFrame(df, geometry=geometry)
# 将数据框保存为.shp文件
gdf.to_file(output_file, driver='ESRI Shapefile')
print("导出.shp文件完成!")
# 示例用法
input_xyz_file = 'input.xyz' # 输入.xyz文件路径
output_shp_file = 'output.shp' # 输出.shp文件路径
export_xyz_to_shp(input_xyz_file, output_shp_file)
shapefile + numpy
import numpy as np
import shapefile
def export_xyz_to_shp(input_file, output_file):
# 读取.xyz文件
data = np.loadtxt(input_file, skiprows=1)
# 提取xyz数据
x = data[:, 0]
y = data[:, 1]
z = data[:, 2]
# 创建.shp文件
w = shapefile.Writer(output_file, shapeType=shapefile.POINT)
# 添加字段
w.field('ID', 'N')
# 写入几何和属性数据
for i in range(len(x)):
w.point(x[i], y[i])
w.record(i+1) # 设置ID字段的值
# 保存.shp文件
w.close()
print("导出.shp文件完成!")
# 示例用法
input_xyz_file = 'input.xyz' # 输入.xyz文件路径
output_shp_file = 'output.shp' # 输出.shp文件路径
export_xyz_to_shp(input_xyz_file, output_shp_file)