GeoPandas-GeoData不与Shapefile地图重叠

时间:2019-07-02 20:11:27

标签: python-3.x pandas gis shapefile geopandas

我正在尝试将一些经纬度数据转换成来自geopandas.GeoDataFrame的shapely.geometry.Point对象到从here下载的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')

输出看起来像这样:

enter image description here

没有背景shapefile,几何图形如下:

enter image description here

为什么会这样,我该如何解决?谢谢

编辑:使用epsg = 27700

enter image description here

1 个答案:

答案 0 :(得分:2)

更详细地回答,因为这似乎很清楚...

在生成geo_df的代码中,您指定crs的{​​{1}},并根据您的代码在纬度和经度上进行工作。通过查看EPSG 4326可以确认这一点,该{C3的边界指定为[-180,-90,180,90]。

我下载并阅读了链接的文件。这段代码:

'epsg:4326'

返回

uk_10km = gpd.read_file(r'/Users/brendancox/Downloads/Great_Britain_shapefile/gb_10km.shp')
uk_10km.crs

EPSG 3035表示其单位为米。 WGS84边界为[-10.6700、34.5000、31.5500、71.0500],但投影边界为[2426378.0132、1528101.2618、6293974.6215、5446513.5222]。

因此,当您将{'init': 'epsg:3035'} 绘制到UK shapefile上时,它将与geo_df ukmap对齐,并将其放在底角。

鉴于EPSG 4326适用于全球,并且您正在关注英国,所以我建议使用特定于英国的投影。 EPSG 3035似乎适用于整个欧洲,因此您可能会找到一个英国特定的投影,可以使用crs将两个形状文件转换为该投影。

可复制的示例

geopandas.GeoDataFrame.to_crs()

Reproducible example map

这显示了如何将内置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() 形状重新投影到EPSG 3035,如何扩大比例,并使world形状出现在(0,0)附近的小簇中。情况,在地图的中心。