做网站最专业的公司关键词排名 收录 查询
最近在处理矢量样本的时候,遇到一些shp文件的坐标系为2000坐标,需要统一地把非WGS84坐标系的矢量转换为WGS84坐标系。
本文记录一下如何进行2000坐标系转化为wgs84坐标系的过程。
在处理矢量数据转换的过程中,有几个关键步骤确保了数据的有效性和可用性。
首先,在转换之前,通过检查并创建目标保存目录,保证了正确的目录结构,这对于避免转换失败或产生错误输出至关重要。
接着,通过osr.SpatialReference对象定义目标坐标系,并使用ImportFromEPSG()方法设置EPSG代码,确保了转换后的数据能够在地理信息系统中正确显示。
此外,通过selectFields参数可以选择性地保留某些字段,而geometryType参数则定义了输出文件中的几何类型,这些选项使用户可以根据具体需求定制输出文件。
重投影选项reproject=True指示GDAL/OGR进行坐标系转换,这对于整合不同坐标系下的数据至关重要。
最后,通过dim参数可以控制输出数据的维度,例如仅保留X和Y坐标,这对于某些特定应用场景是必要的。这些步骤共同构成了一个完整的矢量数据转换流程,确保了数据的准确性和实用性。
具体代码如下:
from osgeo import ogr, gdal
from osgeo import osr
import os
def VectorTranslate(shapeFilePath,saveFolderPath,format="GeoJSON",accessMode=None,dstSrsESPG=4326,selectFields=None,geometryType="POLYGON",dim="XY",
):"""转换矢量文件,包括坐标系,名称,格式,字段,类型,纬度等。:param shapeFilePath: 要转换的矢量文件:param saveFolderPath: 生成矢量文件保存目录:param format: 矢量文件格式:param accessMode:None代表creation,'update','append','overwrite':param dstSrsESPG: 目标坐标系EPSG代码,4326是wgs84地理坐标系:param selectFields: 需要保留的字段列表如果都保留,则为None:param geometryType: 几何类型,"POLYGON","POINT"。。。:param dim: 新矢量文件坐标纬度,建议查阅官方API。:return:"""if os.path.exists(saveFolderPath) ==0:os.makedirs(saveFolderPath)ogr.RegisterAll()gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")data = ogr.Open(shapeFilePath)layer = data.GetLayer()spatial = layer.GetSpatialRef()layerName = layer.GetName()data.Destroy()dstSRS = osr.SpatialReference()dstSRS.ImportFromEPSG(int(dstSrsESPG))if format == "GeoJSON":destDataName = layerName + ".geojson"destDataPath = os.path.join(saveFolderPath, destDataName)elif format == "ESRI Shapefile":destDataName = os.path.join(saveFolderPath, layerName)flag = os.path.exists(destDataName)os.makedirs(destDataName) if not flag else NonedestDataPath = os.path.join(destDataName, layerName + ".shp")else:print("不支持该格式!")returnoptions = gdal.VectorTranslateOptions(format=format,accessMode=accessMode,srcSRS=spatial,dstSRS=dstSRS,reproject=True,selectFields=selectFields,layerName=layerName,geometryType=geometryType,dim=dim)gdal.VectorTranslate(destDataPath,srcDS=shapeFilePath,options=options)return destDataPath
if __name__ == '__main__':shapeFilePath = r'G:\\vector.shp'saveFolderPath = r'G:\\84'VectorTranslate(shapeFilePath,saveFolderPath,format="ESRI Shapefile",accessMode=None,dstSrsESPG=4326,selectFields=None,geometryType="POLYGON",dim="XY",)
在上述代码的主程序部分,我们指定了一个Shapefile文件路径和保存目录,并调用了 VectorTranslate 函数将其转换为ESRI Shapefile格式,并重新投影到WGS84坐标系。
在实际应用中,这段代码可以被用来批量处理大量的矢量数据文件,从而简化数据准备过程。例如,当需要将来自不同来源的Shapefile文件统一到一个标准坐标系中时,这样的脚本可以极大地提高工作效率。