我已经下载了德国的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中以显示正确位置(在德国)的坐标?
答案 0 :(得分:0)
正如JGH所指出的,在以下位置提出了类似的问题: https://gis.stackexchange.com/questions/57003/what-format-is-lat-long-stored-in-osm-postgis
我从中得到的主要要旨:
获得经纬度转换的代码的最终答案(来自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)。 所以我们必须
确定基于10的对数。
将其减少1,因为假设是整数值的前两位 应该停留在要点之前。
将原始值除以10次幂,无论是在第2步中计算得出的结果。