Python 是否可以在x轴(经度)上移动geopandas世界地图?

Python 是否可以在x轴(经度)上移动geopandas世界地图?,python,matplotlib,geopandas,Python,Matplotlib,Geopandas,我想知道是否有办法将geopandas世界地图置于特定经度点的中心。基本上,只是想把它移动大约5-10度左右 前一个问题在几个月前发布,但没有得到答案。想知道是否有人知道答案。(有关stackoverflow的原始问题链接为) 如果有人能帮忙,我会非常感激的 提前感谢我找到了方法: from shapely.geometry import LineString from shapely.ops import split from shapely.affinity import translate

我想知道是否有办法将geopandas世界地图置于特定经度点的中心。基本上,只是想把它移动大约5-10度左右

前一个问题在几个月前发布,但没有得到答案。想知道是否有人知道答案。(有关stackoverflow的原始问题链接为)

如果有人能帮忙,我会非常感激的


提前感谢

我找到了方法:

from shapely.geometry import LineString
from shapely.ops import split
from shapely.affinity import translate
import geopandas

world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

def shift_map(shift):
    shift -= 180
    moved_map = []
    splitted_map = []
    border = LineString([(shift,90),(shift,-90)])
    for row in world["geometry"]:
        splitted_map.append(split(row, border))
    for element in splitted_map:
        items = list(element)
        for item in items:
            minx, miny, maxx, maxy = item.bounds
            if minx >= shift:
                moved_map.append(translate(item, xoff=-180-shift))
            else:
                moved_map.append(translate(item, xoff=180-shift))
    gdf = geopandas.GeoDataFrame({"geometry":moved_map})
    fig, ax = plt.subplots()
    gdf.plot(ax=ax)
    plt.show()
   
在第一步中,您创建您的世界并在预定义的边界上分割它。 然后获取所有元素的边界,并检查边界是否与所需的移位匹配。然后,将每个大于边界的元素平移到地图的左侧,并将所有其他元素移动到右侧,以便它们以+180°的角度移动

例如,这将为您提供:


地图移动了120°

你需要整个移动的世界吗?或者仅仅改变就够了吗?我需要改变整个世界(如果可能的话)。顺便说一句,忘了说谢谢!这是一个极好的答案,提供了我需要的确切细节!没问题!很高兴,我能帮上忙
from shapely.geometry import LineString
from shapely.ops import split
from shapely.affinity import translate
import geopandas

world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

def shift_map(shift):
    shift -= 180
    moved_map = []
    splitted_map = []
    border = LineString([(shift,90),(shift,-90)])
    for row in world["geometry"]:
        splitted_map.append(split(row, border))
    for element in splitted_map:
        items = list(element)
        for item in items:
            minx, miny, maxx, maxy = item.bounds
            if minx >= shift:
                moved_map.append(translate(item, xoff=-180-shift))
            else:
                moved_map.append(translate(item, xoff=180-shift))
    gdf = geopandas.GeoDataFrame({"geometry":moved_map})
    fig, ax = plt.subplots()
    gdf.plot(ax=ax)
    plt.show()