矢量文件坐标转换:2000坐标系转换为wgs84坐标系,具体代码实现

news2024/11/12 7:14:07

最近在处理矢量样本的时候,遇到一些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 None
        destDataPath = os.path.join(destDataName, layerName + ".shp")
    else:
        print("不支持该格式!")
        return
    options = 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文件统一到一个标准坐标系中时,这样的脚本可以极大地提高工作效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ComfyUI LoRA应用和三级放大

ComfyUI LoRA应用和三级放大 LoRA加载器LoRA应用三级放大 LoRA加载器 新建节点–>加载器–>LoRA加载器 LoRA应用 如下图串起来 三级放大

ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现

一.环境配置 腾讯云的ubuntu操作系统,已经安装有docker 和 vulhub 直接来到 启动环境docker-compose,要在root权限下运行。 docker-compose up -d 若出现等待时间过长的情况,请参考这篇文章http://t.csdnimg.cn/SYhbE 访问http://公网ip:8…

Vivado启用modelsim报错boost::filesystem::remove

问题描述 在vivado中以配置好仿真工具为modelsim,但是启动仿真时报错如下: boost::filesystem::remove: 另一个程序正在使用此文件,进程无法访问。 "C:/Users/ZYP_PC/Desktop/verilog_test/simulation_project/project_1/project_1.si…

VTK8.2.0编译(Qt 5.14.2+VS2017)

VTK8.2.0编译(Qt 5.14.2+VS2017) 关于Qt和MSVC的安装,可以参考文章(Qt+MSVC2017)。 本篇VTK在Qt+MSVC的配置下的编译。VTK 以8.2.0为例。 一、环境变量的配置 我们打开电脑的环境变量,可以看到没有Qt相关的路径的配置: 我们把Qt相关的变量增加一下(主要以64位为主,…

day02-员工管理、Swapper测试、JWT、ThreadLocal、全局时间转换

苍穹外卖-day02 课程内容 新增员工员工分页查询启用禁用员工账号编辑员工导入分类模块功能代码 **功能实现:**员工管理、菜品分类管理。 员工管理效果: 菜品分类管理效果: 1. 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求…

LNMP环境搭建论坛

注意:这里用的是Rocky Linux自带的Nginx 1.1 环境准备 1.1.1 安装部署Nginx、MySQL和PHP相关组件 [rootRocky8-node1 ~]# yum install nginx php-mysqlnd php php-gd php-fpm php-xml mysql-server -y 1.1.2 启动服务 [rootRocky8-node1 ~]# systemctl enable …

【C++】C++入门基础【类与对象】

目录 1.类 1.1类的定义 1.2struct 与 class对比 2.访问限定符 3. 类域 4.实例化 5.存储大小----内存对齐 6.this指针 1.类 1.1类的定义 class作为类的关键字,后面跟的是类的名字,如Stack,{}中的为类的主体,类定义结束时…

cpp笔记07:STL

STL 基本概念 STL(Standard Template Library,标准模板库) STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator) 容器和算法之间通过迭代器…

8.7 Day15 匿名用户访问FTP与日志查看

查看配置文件 vsftpd是一个认证文件,意味着ftp是通过vsftpd这个认证文件来对我们输入的用户名和密码进行认证的,那么这个认证文件在哪里呢? 所在位置如下: 查看文件配置内容 默认通过系统来验证,但现在我们欲做一个类…

web自动化7-pytest④实践测试用例-回归用例web自动化部分代码

文档说明: 本文档包括web自动化目录结构代码元素定位 : 父级, 同级后面, 同级div, 包含, 不包含, 鼠标右键, 悬停, 句柄切换(浏览器切换,关闭), 不可见元素查找, 滑动到不可见元素出现, 悬停后点击, 页面有值判断, 页面数据量判断web自动化: 前置, 后置事件 结合上篇文章, 基本…

Django—模板继承和包含

模块的继承意义:将需要多次用到的内容(盒子)进行引用,减少代码的重复使用 如我们经常在网上看见的导航栏,页脚等 第一步:我们将继承模块写在一个html文件里面 第二步:创建一个html文件&#x…

【归并排序/快排/堆排序】912. 排序数组

力扣连接:. - 力扣(LeetCode) 归并排序 对左右子集合分别排序,然后合并两个有序数组 class Solution {int[] nums;public int[] sortArray(int[] nums) {this.nums nums;return sort(0, nums.length-1);}int[] sort(int st, i…

电机学前置知识

https://zhuanlan.zhihu.com/p/712393024 基本定律 全电流定律(安培环路定律) 在磁场中沿任意闭合回路磁场强度的线积分等于穿过该回路所有电流的代数和,即: ∮ H ⋅ d l ∮ J ⋅ d s \oint H \cdot dl \oint J \cdot ds ∮H…

Windows 11下RTX 4090深度学习及大模型微调环境安装指南

在安装深度学习及大模型微调环境时,经历了多次反复操作(如CUDA、cuDNN、PyTorch的安装与卸载)。为了避免走弯路,总结了以下步骤: 步骤 1:显卡驱动安装 首先在安装完Windows 11后,安装RTX 4090显…

C++——类模板经典案例——自定义通用数组类

案例:自定义数组类 需求: 1,对内置数据及自定义数据类型的数据存储 2,将数组中的数据存储到堆区 3,构造函数中可以存入数组的容量 4,提供对应的拷贝构造函数和运算符重载防止浅拷贝问题的发生 5&#xff0c…

户外上网黑科技|300~500元随身wifi测评推荐,华为vs格行vs中兴vs上赞,哪个好?

1.老牌国货,颜值担当——华为 设备价格:499元 套餐价格:99一个月 599一年 质保时间:1年 测评:网速大概在50~60M/S,华为是老牌国货了,设备上没有硬伤,家里连接多设备都没什么问…

小怡分享之Java中的异常

前言: 🌈✨之前小怡带大家认识了String类,今天小怡给大家分享Java中的异常。 1.异常的概念与体系结构 1.1 异常的概念 在日常开发中,绞尽脑汁将代码写的尽善尽美,在程序运行中,难免会出现一些奇奇怪怪…

Python学习(2):在单机机器学习,使用Dask实现鸢尾数据集 Iris 的分类任务

目录 一、源码来源 二、鸢尾花数据集的品种分类 1、数据处理步骤 (1)数据集加载 (2)准备特征和标签 (3)训练集和测试集划分 2、安装必需的软件包 3、运行程序 三、信用卡欺诈数据集检测信用卡交易…

全网最详细的LVS实战详解

一、Lvs-nat实战部署 1、准备 设置好网卡信息 2、基础环境搭建详情 ①调度器LVS:网卡ens160(NAT模式)、网卡ens224(仅主机模式),使其可处于不同的VLAN段 为网卡ens160设置IP vmset.sh ens160 172.25.254.100 lvs.zf.org为网卡ens224设置IP vmset.sh ens224 192.…

在MAC安装Lazarus 起点 - 我们的第一个Lazarus程序!

安装Lazarus 首先到Lazarus官网,找到合适的版本下载页面,比如Mac的版本: https://sourceforge.net/projects/lazarus/files/Lazarus%20macOS%20x86-64/Lazarus%203.4/ 将三个文件都下载到本地,需要安装这三个文件: …