簡體   English   中英

GeoPandas-GeoData不與Shapefile地圖重疊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM