将经纬度批量转换为UTM?


11

我有一个.csv文件,其中包含一长串的纬度和经度点。有没有一种有效的方法可以将列表批量转换为预计的UTM坐标系?

Answers:


8

也许最简单的方法是使用QGIS及其分隔的文本插件之类的东西来导入然后导出数据。如果您正在寻找命令行和可扩展的工具,那么Sasa提到的VRT方法就是一个不错的选择。

您还可以使用以下命令对文件输入和输出进行操作gdaltransform

gdaltransform -s_srs epsg:4326 -t_srs epsg:25832 < space-delimited-coordinates.txt

并且,如果您需要对结果进行更多的编程访问,请使用pyroj来查看geographika的答案以解决相关问题。


您能否更具体地说明我应如何在QGIS中导出数据?我尝试右键单击带有点的导入层,单击“另存为...”,然后将UTM 16N指定为我的投影坐标系。但是结果文件没有改变!
hpy 2011年

我可以。在加载CSV之后,只需将其指向图层标尺上,然后将其另存为>选定的crs>选择要转换为的系统并保存。如果您随后想要返回CSV dfsfsd
yair suari 2013年

一些编辑问题。如果要返回csv,请使用属性计算器并计算几何函数上的$ x和$ y值,以获取nes crs上的位置,然后另存为csv
yair suari 2013年

9

使用arcmap,
添加csv并使用经纬度创建事件表。(右键单击图层>“显示XY数据”)

这将创建具有表和点层的事件层(不是真正的点层,需要稍后导出)

显示xy

将文档投影(数据框属性)设置为所需的文件输出。(在“目录”>“属性”>“坐标系”选项卡中右键单击图层)。

文档道具

期望的投影

右键单击“目录”>“导出数据”中的图层

出口

使用选项“使用与数据框相同的坐标系”

出口


7

ogr2ogr应该能够处理此问题(您可以下载FWTools进行快速安装)。

该线程说明了如何重新投影CSV数据。总而言之,您需要创建一个VRT文件,其中包含对CSV列的引用:

<OGRVRTDataSource>
    <OGRVRTLayer name="test">
        <SrcDataSource>test.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <GeometryField encoding="PointFromColumns" x="RW" y="HW"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

然后运行ogr2ogr进行重新投影:

ogr2ogr -s_srs "epsg:31466" -t_srs "epsg:25832" -f "CSV" -lco GEOMETRY=AS_XY -sql "SELECT PNR FROM test" temp_dir test.vrt

您需要使用适用于您的UTM坐标系的EPSG代码替换epsg:31466。





3

据我了解,您不想简单地重新投影文件,而是想要自己转换坐标并拥有一个带有新坐标的新文件。如果您将Google“将经/纬度转换为utm”,则应该找到可以进行此转换的excel电子表格(例如,在威斯康星大学绿湾分校或上述回答者中)。或者,您可以购买AllTrans或Franson Coordtrans之类的软件,这些软件可以在许多不同的坐标系之间进行批量转换。

或者,较简单但更具教育意义的是,学习gdal或FWTools的语法。


3

对于脚本解决方案,可以使用pyproj

import sys
import csv
import pyproj

# example invocation
# ./reproj.py ./file.csv 32619 4326

if (len(sys.argv) != 4):
    print '%s <csvfile> <epsg_code_in> <epsg_code_out>' % sys.argv[0]
    sys.exit(1)
else:
    p1 = pyproj.Proj(init='epsg:%s' % sys.argv[2])
    p2 = pyproj.Proj(init='epsg:%s' % sys.argv[3])

    f = open(sys.argv[1], 'r')
    table = csv.reader(f)
    for row in table:
        print '%s %s' % (row[1], row[2])
        newxy = pyproj.transform(p1, p2, row[1], row[2])
        print '%s %s' % (row[0], newxy[0], newxy[1])
    f.close()

谢谢各位程序员!注意:如果您的CSV文件有3+列,而xy数据是第二列和第三列,则此方法将起作用。我只需要稍微调整一下索引,因为我的输入x / y在前两列中。如此清晰,可扩展且可重用!
艾哈迈德·法西

2

以下新站点在线转换文件。(它使用pyproj)

它还会生成KML,并且输入文件通常可以“按原样”保留,而不能重新格式化以适合转换程序。

Sorry i cant post a numeric domain so have to wrap it in a code block!
http://54.251.49.75/XYZ_tools

请剪切并粘贴链接以跟随它。


删除了。用户太少,每年要花费我$ 120 +管理时间。抱歉。
宁加

1

我不会寻求ARC解决方案。对于这些常见的转换,有许多在线工具,例如http://www.hamstermap.com-只需复制并粘贴坐标列表,您便会立即将其转换。


从Lon / Lat到UTM的更好的在线批处理转换器位于< zonums.com/online/coords/cotrans.php?module=13 >仓鼠地图工具似乎会更改输入坐标,而zonums工具不会弄乱输入数据,并且区域数也适用于全球数据-仅在WGS84中可用,但是它确实允许您设置区域。只要注意您从lat / lon或lon / lat中选择正确的选项即可。Zonums工具可以提供正确的结果,并且肯定比使用脚本或其他工具更容易使用。
IanS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.