在python中更改多边形坐标的长、纬度值

Rob*_*ien 2 numpy shapefile python-3.x pandas geopandas

我有一个美国所有州的基本形状文件,可以在这里找到。

形状文件

我正在寻找编辑夏威夷和阿拉斯加这两个州的位置,我希望更改夏威夷州的坐标,使其大致位于内华达州之下,并且我还希望更改阿拉斯加州的位置相当小......而且它大致位于加利福尼亚州和亚利桑那州的下方,我包括一张图片,只是为了让我的想法有一个视觉效果...... 在此处输入图片说明

正如你所看到的,阿拉斯加和夏威夷位于美国大陆的左下方,就在前面提到的州之下。

我知道要发生这种情况,我需要使用 geopandas 等更改两个州的经度和纬度坐标。

所以我从夏威夷州开始,并开始使用 numpy 访问多边形坐标。这是到目前为止的代码片段

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
from shapely.geometry import Polygon
from shapely.geometry import Point, Polygon
import numpy as np

poly_States = gpd.read_file("states.shp")
hawaii = poly_States[poly_States.STATE_ABBR == "HI"]
coords = [i for i in hawaii.geometry]

all_Coords = []
for b in coords[0].boundary:
    coords = np.dstack(b.coords.xy).tolist()
    all_Coords.append(*coords)

for cord_1 in all_Coords:
    for cord2 in cord_1:
        cord2[0] = cord2[0] + 54.00000000000000
Run Code Online (Sandbox Code Playgroud)

我的想法是访问数组格式的坐标并通过添加 54 来更改纬度坐标,因此基本上将整个状态向右移动以使其粗暴地位于新墨西哥州。

我的问题在于实际上将这些更改返回到 shapefile 本身中的多边形对象。我觉得可能有一种更简单的方法,可能是通过访问多边形的属性或使用某种外部软件,但我相信如果我能够正确访问 long,lat 值并更改它们,我应该能够进行更改我需要的定位和尺寸。

提前致谢。

Ste*_*tef 6

您可以translate像这样使用和分配新几何体:

m = poly_States.STATE_ABBR == "HI"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].translate(54))
Run Code Online (Sandbox Code Playgroud)

结果: 转移夏威夷

与您可以扩展和移动阿拉斯加的方式相同:

m = poly_States.STATE_ABBR == "AK"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].scale(.2,.2,.2).translate(40, -40))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明