将地理坐标从 GEOSTAT 转换为 lat 和 lng

Posted

技术标签:

【中文标题】将地理坐标从 GEOSTAT 转换为 lat 和 lng【英文标题】:Converting geographic coordinates from GEOSTAT to lat and lng 【发布时间】:2019-03-05 22:59:13 【问题描述】:

我发现了一个有趣的datasource of European Population,我认为它可以帮助我实现这样的地图:

源文档GEOSTAT_grid_POP_1K_2011_V2_0_1.csv如下所示:

| TOT_P | GRD_ID | CNTR_CODE | METHD_CL | YEAR | DATA_SRC | TOT_P_CON_DT | |-------|---------------|-----------|----------|------|----------|--------------| | 8 | 1kmN2689E4337 | DE | A | 2011 | DE | other | | 7 | 1kmN2689E4341 | DE | A | 2011 | DE | other |

地理坐标看起来在GRD_ID 列中编码,此文档表示Appendix1_WP1C_production-procedures-bottom-up.pdf:

网格单元识别码基于网格单元格的左下角坐标被网格截断 像元大小(例如 1kmN4534E5066 是坐标 Y=4534672、X=5066332 和像元大小 1000 的结果)

我认为我可以通过解析字符串来获得 lat 和 long。例如在 Python 中:

import re
string = "1kmN2691E4341"
lat = float(re.sub('.*N([0-9]+)[EW].*', '\\1', string))/100
lng = float(re.sub('.*[EW]([0-9]+)', '\\1', string))/100

print lat, ",", lng

输出 26.91 , 43.41

但这没有意义,它不对应欧洲的位置!

它可能是指我不知道的地理坐标系。

【问题讨论】:

来自一个 PDF:GRD_ID 根据 INSPIRED (efgs.info/wp-content/uploads/geostat/1a/…) 的网格单元(左下角)的识别码 【参考方案1】:

感谢维克多的评论,我发现我的文件中使用的坐标系是EPSG:3035

基于python对Proj4的实现,我可以用下面的代码得到一个令人信服的结果:

#! /usr/bin/python
# coding: utf-8

import re
from pyproj import Proj, transform

string = "1kmN2326E3989"

x1 = int(re.sub('.*[EW]([0-9]+)', '\\1', string))*1000
y1 = int(re.sub('.*N([0-9]+)[EW].*', '\\1', string))*1000

inProj = Proj(init='EPSG:3035')
outProj = Proj(init='epsg:4326')

lng,lat = transform(inProj,outProj,x1,y1)
print lat,lng

输出:43.9613760836 5.870517281

【讨论】:

以上是关于将地理坐标从 GEOSTAT 转换为 lat 和 lng的主要内容,如果未能解决你的问题,请参考以下文章

将地理坐标转换为地址 C# 或 jQuery

将 Lat/Long 转换为状态

turfjs 能否提供地理坐标和应用程序坐标之间的坐标转换

阻止Maps API进行地理编码坐标

有啥方法可以从作为 LAT/LONG 作为 PostGIS 中的地理数据类型插入的 GPS 坐标中恢复数据?

快速将 PFGeoPoint Lat 和 Long 从 Parse 转换为 CLLocation Lat 和 Long