将planet_osm_nodes纬度转换为“正常”纬度

时间:2018-09-05 16:29:40

标签: postgresql gps openstreetmap postgis

我已经下载了德国的openstreetmap数据。我正在尝试使用planet_osm_nodes查找最接近的点,但是表中的纬度对我来说没有任何意义。让我尝试通过示例来说明为什么不这样做:

我随机取一个点

SELECT * FROM planet_osm_nodes LIMIT 1;

    id     |    lat    |    lon    |         tags         
-----------+-----------+-----------+----------------------
 363692391 | 596568676 | 109247330 | {ref,1A,power,tower}

将点插入(纬度,经度)时,(59.6568676,10.9247330)或(10.9247330,59.6568676),然后在https://www.openstreetmap.org/search?query=59.6568676%2C%2010.9247330#map=5/59.657/10.925中输入点,我最终会到达挪威或大海。

当使用EPSG:3857到EPSG:4326转换器(https://epsg.io/transform#s_srs=3857&t_srs=4326&x=109247330.0000000&y=596568676.0000000)时,我尝试使用转换后的GPS坐标来精确定位地图,甚至交换x / y和lat / lon,但是我仍然不会最终到达德国(但南北极,美国等)。

当我查找属于“节点”的“方式”时:

SELECT * FROM planet_osm_ways WHERE 363692391 = ANY (nodes);
 48616848 | {363692392,363692391,...,302275015,346153952,251417206} | {cables,6,name,"Bürs - Obermooweiler blau;Bürs - Ober
mooweiler weiß",power,line,ref,401;402,voltage,380000,wires,quad}


在OSM在线中找到“方法”(感谢Google): https://www.openstreetmap.org/relation/1750798/history#map=9/47.3988/9.7439

选择附近的GPS坐标: https://www.openstreetmap.org/node/346153670

我得到的GPS确实使我在德国着陆: 位置:47.6525789,9.8031666 这使我相信自己拥有正确的数据库,并且数据应该以某种方式存在。

问题:如何转换上述表格中的纬度数,以获取可以输入到Google Maps / Openstreetmaps中以显示正确位置(在德国)的坐标?

3 个答案:

答案 0 :(得分:0)

正如JGH所指出的,在以下位置提出了类似的问题: https://gis.stackexchange.com/questions/57003/what-format-is-lat-long-stored-in-osm-postgis

我从中得到的主要要旨:

  • “列出了您所引用的planet_osm_nodes表(请参见osm2pgsql Wiki 条目)作为在运行导入程序时使用的临时表 内存有限(“超薄”模式)。”由用户diciu
  • 因此,通过在其他表的“ way”键上执行几何操作,大多数标签都可以使用和访问
  • 但是maxspeed标记未转换为新表 据我所见
  • 一个人可以从planet_osm_nodes转换纬度,获取ID,然后在planet_osm_ways的节点列中搜索ID。这将允许访问标签

获得经纬度转换的代码的最终答案(来自gis.stackexchange.com上的链接问题,其中插入了变量):
ST_Transform( ST_GeomFromText('POINT('||lon/100||' '||lat/100||')',3785 ),4326)

答案 1 :(得分:0)

此奇怪数据的正确转换应为:

select ST_Transform(ST_GeomFromText('POINT('||lon::numeric/100||' '||lat::numeric/100||')',3857 ),4326) from planet_osm_nodes

如果不为“ lat”和“ lon”添加:: numeric,则会失去精度,在某些情况下甚至可能达到数千米。 EPSG 3857、3785、900913(和许多其他)都是相同的,但大多数“正确的”(用惯用语来说)是3857

答案 2 :(得分:0)

const mapStateToProps = state => {
 return {
    data: state.posts
 };
};

const mapDispatchToProps = dispatch => {
 return {
  onFetch: () => {
   dispatch(requestPosts);
  },
  onFetchSuccess: data => {
   dispatch(receivedPosts(data));
  }
  // onFetchError: () => {
  //   // dispatch()
  // }
};
};
export default connect(
 mapStateToProps,
 mapDispatchToProps
)(App);

因为几何保存为整数,所以我们必须将其转换为double。投影是4326(不是用于几何图形的3857)。 所以我们必须

  1. 确定基于10的对数。

  2. 将其减少1,因为假设是整数值的前两位 应该停留在要点之前。

  3. 将原始值除以10次幂,无论是在第2步中计算得出的结果。