如何将纬度/经度坐标从度转换为公里以创建1公里网格

时间:2019-06-07 10:19:01

标签: python grid coordinates gis pyproj

我有一个包含十进制纬度/经度坐标的数据框。

我的目标是将数据汇总到1km²的矩形网格上。为此,我根据Convert latitude, longitude to distance from equator in kilometers and round to nearest kilometer

中描述的方法将坐标转换为km

该方法包括计算参考点到点(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万纬度/经度,还有其他有效的方法可以进行聚合吗?

1 个答案:

答案 0 :(得分:0)

看起来您两次分配了format变量,第二次分配擦除了第一个。您是说拥有format_lonformat_lat之类的东西吗?

请注意,一旦解决此问题,结果仍将取决于参考点-将球形坐标投影到平面地图时,这是不可避免的。但是结果应该是合理的。