osgeo和pyproj:经纬度坐标和高斯坐标互相转换

一、前言
搞地图和自动驾驶的都知道,坐标转换是非常频繁的事情,有时候需要在各种坐标之间来回的转换,最近使用python代码处理地图数据,在使用osgeo库中的gdal时,发现了gdal v2和V3的一些不同之处,研究了一下,这里分享出来。

二、问题描述
经纬度转高斯的过程中,发现3.0一直出现的转换结果是’inf’,经过查看官方github上的issue,才知道,gdal V3.0以后,转换需要设置转换策略,具体看后面代码中的说明,现象截图如下:
在这里插入图片描述

三、解决后封装的代码
下面代码使用osgeo库和pyproj库分别实现,底层调用都是gdal,代码经过测试。

#!/usr/bin/python3

__author__ = 'ISmileLi'

from osgeo import gdal, ogr, osr
from pyproj import Transformer

'''
osgeo底层坐标转换使用的库还是proj,下面函数中的espg值需要根据自己的需求进行修改,
下文测试使用的是wgs84与中国区高斯-克吕格EPSG码为21460区的转换
'''

def lonLat_to_gauss(lon, lat, from_epsg=4326, to_epsg=21460):
    '''
    经纬度转高斯
    :param lon:
    :param lat:
    :param from_epsg:
    :param to_EPSG:
    :return:
    '''

    from_spa = osr.SpatialReference()
    '''
    gdal版本大于3.0以后必须设置转换策略才能正确显示结果,否则结果将会输出'inf'
    可以了解官方的这个issue说明:https://github.com/OSGeo/gdal/issues/1546
    '''
    if int(gdal.__version__[0
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要通过Python将经纬度坐标生成矢量面文件,您可以使用GDAL库来实现。下面是一个示例代码,可以将经纬度坐标转换为矢量面并保存为Shapefile文件: ```python from osgeo import ogr # 创建Shapefile数据源 driver = ogr.GetDriverByName('ESRI Shapefile') data_source = driver.CreateDataSource('output.shp') # 创建图层 layer = data_source.CreateLayer('polygon', geom_type=ogr.wkbPolygon) # 创建字段 field_defn = ogr.FieldDefn('id', ogr.OFTInteger) layer.CreateField(field_defn) # 创建多边形 ring = ogr.Geometry(ogr.wkbLinearRing) # 添加经纬度坐标点 ring.AddPoint(lon1, lat1) ring.AddPoint(lon2, lat2) ring.AddPoint(lon3, lat3) # ...添加更多的点... # 创建多边形对象 polygon = ogr.Geometry(ogr.wkbPolygon) polygon.AddGeometry(ring) # 创建要素 feature_defn = layer.GetLayerDefn() feature = ogr.Feature(feature_defn) feature.SetGeometry(polygon) feature.SetField('id', 1) # 将要素添加到图层 layer.CreateFeature(feature) # 清理资源 feature = None data_source = None ``` 请替换代码中的经纬度坐标(lon1, lat1),(lon2, lat2),(lon3, lat3)为您的实际坐标。运行代码后,将生成名为"output.shp"的Shapefile文件,包含一个名为"polygon"的图层,其中包含一个多边形要素。 请注意,此示例代码仅生成一个多边形要素,您可以根据需要添加更多的坐标点来创建更复杂的多边形。另外,确保已安装GDAL库,可以使用`pip install gdal`命令进行安装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值