首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python (GDAL):从WGS84到NZTM2000的投影转换不正确

Python (GDAL):从WGS84到NZTM2000的投影转换不正确
EN

Stack Overflow用户
提问于 2016-03-11 16:38:34
回答 1查看 1.2K关注 0票数 1

我是Python和GDAL的新手。我正在将以下文件转换为NZTM2000坐标转换器。我将文件导入为csv,然后使用Lat/Long将其转换为XY输出。然而,结果对我来说是不正确的。我不明白输出单位/比例。我本来想要六位数的。

剧本:

代码语言:javascript
复制
"reads a CSV file and converts its coordinates"
import os
import csv
from osgeo import gdal
from osgeo import osr
from osgeo import ogr

# Coordinate Reference System (CRS)
SourceEPSG = 4326  
TargetEPSG = 2193

source = osr.SpatialReference()
source.ImportFromEPSG(SourceEPSG)

target = osr.SpatialReference()
target.ImportFromEPSG(TargetEPSG)


# Input file details
fullpath = os.path.abspath("\ew0001\NavigationsCMP")

def CRSTransform(Lat, Long):
    transform = osr.CoordinateTransformation(source, target)
    point = ogr.CreateGeometryFromWkt("POINT ("+Lat+" "+Long+")")
    point.Transform(transform)
    print point.GetX(), "   ", point.GetY()


print "Reading CSV"
inCSV = csv.DictReader(open(fullpath+".csv"))
for row in inCSV:
    lat = row['Lat']
    long = row['Long']
    CRSTransform(lat, long)

输入:

代码语言:javascript
复制
Lat Long    CMP Year    Month   Day Hours   Mins    Sec XXX Line    Vintage
-44.419134  172.243651  264 2000    1   23  6   11  10  180 10  EW0001
-44.419176  172.243706  265 2000    1   23  6   11  12  681 10  EW0001
-44.419214  172.243759  266 2000    1   23  6   11  15  181 10  EW0001
-44.419259  172.24382   267 2000    1   23  6   11  17  711 10  EW0001

输出:

代码语言:javascript
复制
-44.419134     172.243651
-44.419176     172.243706
-44.419214     172.243759
-44.419259     172.24382
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 00:19:35

GDAL <3的原始答案

你需要交换轴的顺序,这样X=经度,Y=纬度。

代码语言:javascript
复制
def CRSTransform(Lat, Long):
    transform = osr.CoordinateTransformation(source, target)
    point = ogr.Geometry(ogr.wkbPoint)
    point.SetPoint_2D(0, float(Long), float(Lat))
    point.Transform(transform)
    print point.GetX(), "   ", point.GetY()

CRSTransform(-44.419134, 172.243651)  # 1539788.868     5081294.99354

更新GDAL 3+的答案

轴排序已经从GDAL3.0改变了(例如,请参阅GDAL的OSR教程)。默认顺序是“符合权限的”,.e.g。Lat/Long要获得X/Y使用的“传统轴序”:

代码语言:javascript
复制
source.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
target.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)

如果您想为source保留Lat/Long,它将是默认的或指定的:

代码语言:javascript
复制
source.SetAxisMappingStrategy(osr.OAMS_AUTHORITY_COMPLIANT)

请注意,EPSG:2193具有默认权限Northing/EPSG(或Y/X)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35945437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档