[英]GeoPandas - GeoData not overlapping Shapefile map
我正在嘗試將一些經緯度數據從geopandas.GeoDataFrame映射到shapely.geometry.Point對象,映射到從此處下載的UK shapefile中。 提取時有3個.shp文件,每個文件都出現下面的問題。
以下是我的代碼:
import geopandas as gpd
geometry = [Point(xy) for xy in zip(df['longitude'], df['latitude'])]
crs = {'init': 'epsg:4326'}
geo_df = gpd.GeoDataFrame(df, crs=crs, geometry=geometry)
ukmap = gpd.read_file("..\\gb_1km.shp")
fig, ax = plt.subplots(figsize=(6,6))
ukmap.plot(ax=ax) #check map
geo_df.plot(ax=ax, markersize=20, color='blue', marker = 'o', label = 'C')
輸出看起來像這樣:
沒有背景shapefile,幾何圖形如下所示:
為什么會發生這種情況,我該如何解決? 謝謝
編輯:隨着epsg = 27700
回答得更詳細些,因為這似乎很清楚...
在你的代碼生成geo_df
,您指定的crs
的'epsg:4326'
,並根據您的代碼,你在度的緯度和經度的工作。 通過查看EPSG 4326可以確認這一點,該文件將CRS的邊界指定為[-180,-90,180,90]。
我下載並閱讀了鏈接的文件。 這段代碼:
uk_10km = gpd.read_file(r'/Users/brendancox/Downloads/Great_Britain_shapefile/gb_10km.shp')
uk_10km.crs
退貨
{'init': 'epsg:3035'}
EPSG 3035表示其單位為米。 WGS84邊界為[-10.6700、34.5000、31.5500、71.0500],但投影邊界為[2426378.0132、1528101.2618、6293974.6215、5446513.5222]。
因此,當您將geo_df
到UK shapefile上時,它將與ukmap
crs
對齊,並將其放置在底角。
鑒於EPSG 4326適用於整個全球,並且您正在關注英國,所以我建議使用特定於英國的投影。 EPSG 3035似乎適用於整個歐洲,因此您可以使用geopandas.GeoDataFrame.to_crs()
找到英國特定的投影,以將兩個形狀文件轉換geopandas.GeoDataFrame.to_crs()
。
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
world.to_crs(epsg='3035', inplace=True)
fig, ax = plt.subplots(figsize=(10,8))
world.plot(ax=ax)
cities.plot(ax=ax, color='red')
plt.show()
這顯示了如何將內置的world
形狀重新投影到EPSG 3035會增加比例,並使cities
形狀顯示在(0,0)附近的小簇中-在這種情況下,位於地圖中心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.