【问题标题】:Is it possible to shift a geopandas world map on the x axis (longitude)?是否可以在 x 轴(经度)上移动 geopandas 世界地图?
【发布时间】:2020-09-22 20:42:51
【问题描述】:

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

之前的问题是几个月前发布的,但没有得到答复。想知道是否有人知道解决方案。 (stackoverflow上原始问题的链接是here

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))

如果有人能提供帮助,我将不胜感激。

提前致谢

【问题讨论】:

  • 你需要整个转移的世界吗?或者它只是转移就足够了吗?
  • 我需要改变整个世界(如果可能的话)。

标签: python matplotlib geopandas


【解决方案1】:

我知道怎么做:

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°

【讨论】:

  • 顺便说一句,忘了说谢谢!这是一个绝妙的答案,并提供了我需要的确切细节!
  • 没问题!很高兴,我可以帮忙:D
  • 经度标注没有相应移动,中间仍然是零经度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2021-10-08
  • 2013-08-29
  • 2014-07-18
  • 2017-07-11
  • 1970-01-01
  • 2015-04-26
相关资源
最近更新 更多