Skip to main content

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)