【问题标题】:Converting geographic coordinates from GEOSTAT to lat and lng将地理坐标从 GEOSTAT 转换为 lat 和 lng
【发布时间】:2023-04-07 11:37:01
【问题描述】:

我发现了一个有趣的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

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

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

【问题讨论】:

标签: python latitude-longitude geo


【解决方案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

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2017-09-06
    • 2020-01-20
    • 2018-11-12
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多