2017-03-08 156 views
0

每个坐标我有,我觉得从赤道公里给我两个距离的距离:转换纬度,经度,以从公里赤道轮距离最近公里

from pyproj import Geod 
wgs84_geod = Geod(ellps='WGS84')  
_,_, lon_dist = wgs84_geod.inv(0, 0,lon, 0) 
_,_, lat_dist = wgs84_geod.inv(0, 0,0, lat) 

作为一个全面的检查,我可以重新计算从这些值原来的坐标如下(从赤道承担方向的坐标为(0,0)是北部和西部:

_, new_lat, _ = wgs84_geod.fwd(0,0, 0, lat_dist) 
new_lon, _, _ = wgs84_geod.fwd(0, 0, 90, lon_dist) 

这让我回我开始用相同的坐标

。 10

现在我想找到离我的坐标最近的公里点。我将lon_dist和lat_dist四舍五入到距赤道值的公里。

lat_km_dist = round(lat_dist/1000)*1000 #to nearest km and back to meters 
lon_km_dist = round(lon_dist/1000)*1000 

我得到使用以相同的方式,这些距离坐标之前

_, km_lat, _ = wgs84_geod.fwd(0,0, 0, lat_km_dist) 
km_lon, _, _ = wgs84_geod.fwd(0, 0, 90, lon_km_dist) 

逻辑应该是在同一区域内的多个坐标,任何km_lat之间的最近距离,km_lon对应该一公里。 这在南/北轴线上是正确的,但对于经度来说,距离因我所处的纬度而异。 我附上了两张屏幕截图,以显示km_lat,km_lon坐标由面积为1km的多边形中心的黑色圆圈表示的问题。

我该如何纠正?

Copenhagen

San Francisco

回答

0

什么该算法本质上是这样做的是,它构造一个等距离目(与点1公里开)在赤道上(LAT = 0)与主子午线(LON = 0) 。然后它有效地在椭球上构建一个网格作为这些点的笛卡尔乘积。

但是,纬度/经度坐标不形成笛卡尔框架,由这些网格点产生的结果平行/子午线定义的“方块”的大小不仅取决于特定的经度,还取决于纬度。在完美的球体上,这将在南北方向上起作用,从那时起,lon = 0上的等距(按照大圆距离)网格在纬度上也是等距的(纬度差等于距离上的差球体的半径)。

换句话说,如果固定两个纬度lat1lat2并从(lat1, lon)特定经度lon举,比如说(lat2, lon)1公里,向西方向,那么这些新获得的积分不会有相同的经度...

我不完全确定你要达到的目标,但如果目标是获得一些不太接近的代表点,那么就大圆距离而言,hierarchical clustering可能会提供合理的结果...

编辑:

作为一个近似的解决方法,你可以得到最有可能离开的选择比(0, 0)另一个参考点 - 新的参考点应该不会太远,你试图描述的区域(类似于感兴趣区域的“左下角”)。如果整个感兴趣区域不覆盖全球的大部分地区(大纬度纬度),那么这些差异将非常小,因此它们在GoogleMaps可视化中可能几乎看不见...

因此,如果您对丹麦感兴趣(通过截图来判断),那么类似以下内容可能会起作用:

lat_ref, lon_ref = 53.637976, 6.694138 

_,_, lon_dist = wgs84_geod.inv(lon_ref,lat_ref, lon, 0) 
_,_, lat_dist = wgs84_geod.inv(lon_ref,lat_ref, 0, lat) 

lat_km_dist = round(lat_dist/1000)*1000 #to nearest km and back to meters 
lon_km_dist = round(lon_dist/1000)*1000 


_, km_lat, _ = wgs84_geod.fwd(lon_ref,lat_ref, 0, lat_km_dist) 
km_lon, _, _ = wgs84_geod.fwd(lon_ref,lat_ref, 90, lon_km_dist) 
+0

如您所说,目标是将大量坐标减少为较少的代表性点。这需要独立于数据集,因此给定同一区域中的不同坐标,底层网格不会改变。出于这个原因,我不想使用群集。在这种方法中,有没有一种方法可以考虑纬度对经度距离的影响? – clurhur

+0

@clurhur你可能会尝试改变参考点 - 我已经包括一个例子... – ewcz

+0

感谢您的这一点。我尝试过这种方法,它让我更接近我想要的1公里的距离。难点在于这依赖于了解这些参考坐标。因为我想在世界的任何地方使用这种方法,所以这需要收集许多这样的参考。我已经看到了一个国家中心名单,但是对于南北大片地区的国家来说,也会出现同样的问题。 – clurhur