将地理坐标从 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的主要内容,如果未能解决你的问题,请参考以下文章