the*_*nd0 3 python matplotlib geopandas
我想知道是否有一种方法可以将 geopandas 世界地图集中在特定的经度点上。基本上,只是想将其移动约 5-10 度左右。
上一个问题是几个月前发布的,但没有收到答案。想知道是否有人知道解决方案。(stackoverflow 上原始问题的链接在这里)
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
fig, ax = plt.subplots()
world.plot(ax=ax, color=(0.8,0.5,0.5))
Run Code Online (Sandbox Code Playgroud)
如果有人可以提供帮助,我将非常感激。
提前致谢
小智 5
我发现如何做到这一点:
\nfrom shapely.geometry import LineString\nfrom shapely.ops import split\nfrom shapely.affinity import translate\nimport geopandas\n\nworld = geopandas.read_file(geopandas.datasets.get_path(\'naturalearth_lowres\'))\n\ndef shift_map(shift):\n shift -= 180\n moved_map = []\n splitted_map = []\n border = LineString([(shift,90),(shift,-90)])\n for row in world["geometry"]:\n splitted_map.append(split(row, border))\n for element in splitted_map:\n items = list(element)\n for item in items:\n minx, miny, maxx, maxy = item.bounds\n if minx >= shift:\n moved_map.append(translate(item, xoff=-180-shift))\n else:\n moved_map.append(translate(item, xoff=180-shift))\n gdf = geopandas.GeoDataFrame({"geometry":moved_map})\n fig, ax = plt.subplots()\n gdf.plot(ax=ax)\n plt.show()\n \nRun Code Online (Sandbox Code Playgroud)\n第一步,您创建您的世界并将其分割在您的预定义边界上。\n然后您获取所有元素的边界并检查边界是否与您所需的偏移匹配。然后,将每个大于边界的元素平移到地图的左侧,并将所有其他元素移动到右侧,以便它们与 +180\xc2\xb0 对齐。
\n\n移动了 120\xc2\xb0 的地图
\n