在 python 中更改多边形坐标的经纬度值
Changing long, lat values of Polygon coordinates in python
我有一个美国所有州的基本形状文件,可以在这里找到..
我想编辑夏威夷和阿拉斯加这两个州的位置,我想更改夏威夷州的坐标,使其大致位于内华达州下方,我还要更改州阿拉斯加所以它要小得多..而且它大致位于加利福尼亚州和亚利桑那州的下方,我会附上一张图片,这样我的想法就有了视觉效果..
如您所见,阿拉斯加和夏威夷位于美国大陆的左下方,就在前面提到的各州之下。
我知道要做到这一点,我需要使用 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
我的想法是访问数组格式的坐标并通过添加 54 来更改纬度坐标,因此基本上将整个州向右移动以使其大致位于新墨西哥州之下。
我的问题在于实际将这些更改返回到 shapefile 本身中的多边形对象。
我觉得可能有一种更简单的方法可能是通过访问多边形的属性或使用某种外部软件,但我相信如果我能够正确访问 long、lat 值并更改它们,我应该能够进行更改我需要的位置和尺寸。
提前致谢。
您可以使用 translate
并像这样分配新几何体:
m = poly_States.STATE_ABBR == "HI"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].translate(54))
结果:
与扩展和移动阿拉斯加的方式相同:
m = poly_States.STATE_ABBR == "AK"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].scale(.2,.2,.2).translate(40, -40))
我有一个美国所有州的基本形状文件,可以在这里找到..
我想编辑夏威夷和阿拉斯加这两个州的位置,我想更改夏威夷州的坐标,使其大致位于内华达州下方,我还要更改州阿拉斯加所以它要小得多..而且它大致位于加利福尼亚州和亚利桑那州的下方,我会附上一张图片,这样我的想法就有了视觉效果..
如您所见,阿拉斯加和夏威夷位于美国大陆的左下方,就在前面提到的各州之下。
我知道要做到这一点,我需要使用 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
我的想法是访问数组格式的坐标并通过添加 54 来更改纬度坐标,因此基本上将整个州向右移动以使其大致位于新墨西哥州之下。
我的问题在于实际将这些更改返回到 shapefile 本身中的多边形对象。 我觉得可能有一种更简单的方法可能是通过访问多边形的属性或使用某种外部软件,但我相信如果我能够正确访问 long、lat 值并更改它们,我应该能够进行更改我需要的位置和尺寸。
提前致谢。
您可以使用 translate
并像这样分配新几何体:
m = poly_States.STATE_ABBR == "HI"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].translate(54))
结果:
与扩展和移动阿拉斯加的方式相同:
m = poly_States.STATE_ABBR == "AK"
poly_States[m] = poly_States[m].set_geometry(poly_States[m].scale(.2,.2,.2).translate(40, -40))