我有一个包含十进制度的纬度/经度坐标的数据框。
我的目标是在 1 平方公里的矩形网格上汇总数据。为此,我根据将纬度、经度转换为距赤道的距离(以千米为单位)并四舍五入到最近的千米中描述的方法将坐标转换为千米
该方法包括计算从参考点到点 (lat=0, lon) 和 (lat, lon=0) 的距离。
但它不起作用,因为它似乎取决于参考点。
通过将我的参考点设为 (lon_ref=mean(lon), lat_ref=mean(lat)),我最终聚集在彼此相距 120 公里的相同瓦片点中。
这是我正在使用的代码:
# get the coordinates of my reference point
lat_ref, lon_ref = data["lat"].mean() , data["lon"].mean()
# the distance function
from pyproj import Geod
wgs84_geod = Geod(ellps='WGS84')
format = lambda x: wgs84_geod.inv(lon_ref,lat_ref,0,x)[2]/1000 #km
format = lambda x: wgs84_geod.inv(lon_ref,lat_ref,x,0)[2]/1000 #km
# Apply the function on my dataframe
data["londist"]=data['lon'].map(format)
data["latdist"]=data['lat'].map(format)
# round to the nearest km
step=1 # 1km
to_bin = lambda x: np.round(x / step) * step
data["latbin"] = data['latdist'].map(to_bin)
data["lonbin"] = data['londist'].map(to_bin)
这适用于一些纬度/经度,但不适用于其他人,
例子:
point1 (46.9574,4.29949) # lat,lon in °
point2( 46.9972 ,3.18153)
使用上面的代码计算距离和圆:
point1 (latbin = 259 , lonbin=5205)
point2(latbin = 259 , lonbin=5205)
两点将聚合在一起 但是,两点之间的距离是 85 公里!
dist=wgs84_geod.inv(4.29949,46.9574,3.18153,46.9972)[2]/1000
我怎么解决这个问题?鉴于我的数据框中有 1000 万个纬度/经度,还有其他有效的方法来进行聚合吗?