如何使用 Geopandas 在地图上显示以米为单位的比例尺、指北针以及以纬度和经度表示的轴?
How do you display the scale in meters, the north arrow and the axes in latitude and longitude on a map with Geopandas?
参考这个 issue,是否可以使用比例尺(以米为单位投影,例如 3857)和 x,y 轴纬度、经度投影 (4326) 和指北针?
我没有看到使用 geopandas 执行此操作的交钥匙解决方案。虽然这似乎是 GIS 地图显示的基本设置。这有技术原因吗?
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import matplotlib.pyplot as plt
df = gpd.read_file(gpd.datasets.get_path('nybb'))
ax = df.to_crs(4326).plot()
ax.add_artist(ScaleBar(1)) #how add ScaleBar for df in 3857?
plt.show()
从this开始,您似乎必须用坐标计算两个位置 A 和 B 之间的大圆距离
A=[longitudeA,latitudeA] 和 B=[longitudeA+1,latitudeA],在您感兴趣的纬度(在您的情况下为 ~40.7°)。要计算大圆距离,您可以使用 sklearn (here) 中的 'haversine_distances' 并将其乘以地球半径 6371000
以获得以米为单位的距离。
一旦你得到这个距离 dx
,你可以用 ScaleBar(dx=dx,units="m")
.
将它传递给你的比例尺
总的来说,代码如下所示:
import numpy as np
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import haversine_distances
df = gpd.read_file(gpd.datasets.get_path('nybb'))
ax = df.to_crs(4326).plot()
A=[-74.5*np.pi/180.,40.7*np.pi/180.] #Latitude of interest here 40.7 deg, longitude -74.5
B=[-73.5*np.pi/180.,40.7*np.pi/180.] ##Latitude of interest here 40.7 deg, longitude -74.5+1
dx=(6371000)*haversine_distances([A,B])[0,1]
ax.add_artist(ScaleBar(dx=dx,units="m"))
plt.show()
并且输出给出:
参考这个 issue,是否可以使用比例尺(以米为单位投影,例如 3857)和 x,y 轴纬度、经度投影 (4326) 和指北针?
我没有看到使用 geopandas 执行此操作的交钥匙解决方案。虽然这似乎是 GIS 地图显示的基本设置。这有技术原因吗?
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import matplotlib.pyplot as plt
df = gpd.read_file(gpd.datasets.get_path('nybb'))
ax = df.to_crs(4326).plot()
ax.add_artist(ScaleBar(1)) #how add ScaleBar for df in 3857?
plt.show()
从this开始,您似乎必须用坐标计算两个位置 A 和 B 之间的大圆距离
A=[longitudeA,latitudeA] 和 B=[longitudeA+1,latitudeA],在您感兴趣的纬度(在您的情况下为 ~40.7°)。要计算大圆距离,您可以使用 sklearn (here) 中的 'haversine_distances' 并将其乘以地球半径 6371000
以获得以米为单位的距离。
一旦你得到这个距离 dx
,你可以用 ScaleBar(dx=dx,units="m")
.
总的来说,代码如下所示:
import numpy as np
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import haversine_distances
df = gpd.read_file(gpd.datasets.get_path('nybb'))
ax = df.to_crs(4326).plot()
A=[-74.5*np.pi/180.,40.7*np.pi/180.] #Latitude of interest here 40.7 deg, longitude -74.5
B=[-73.5*np.pi/180.,40.7*np.pi/180.] ##Latitude of interest here 40.7 deg, longitude -74.5+1
dx=(6371000)*haversine_distances([A,B])[0,1]
ax.add_artist(ScaleBar(dx=dx,units="m"))
plt.show()
并且输出给出: