繁体   English   中英

如何使用 geopandas 或 shapely 提取内部多边形的坐标?

[英]How can I extract the coordinates of an interior polygon using geopandas or shapely?

我在使用 geopandas 时读过英国县/统一当局 (UTLA) 的 geojson 文件。 我试图获得每个 UTLA 的形状多边形,但我遇到了包含其他 UTLA(即内部多边形)的 UTLA 的问题,例如德比郡。

我正在尝试提取内部多边形的坐标:

import geopandas as gpd

utla_polygons = gpd.read_file('https://opendata.arcgis.com/datasets/244b257482da4778995cf11ff99e9997_0.geojson')

derbs = utla_polygons[utla_polygons['CTYUA21NM']=='Derbyshire']
derbs_int = derbs.explode().geometry.interiors
derbs_int

根据geopandas 文档,derbs_int 是我所期望的:

130  0    [LINEARRING (-1.484521649999976 52.96638748100...
dtype: object

但是,当我尝试从 derbs_int 中提取坐标时,出现以下错误:

derbs_int.coords

AttributeError: 'Series' object has no attribute 'coords'

如何提取这些坐标以便我可以使用它们来创建一个形状优美的多边形?

将多面体转换为单个多边形的一种方法是访问 JSON 并获取列表中的第一个元素。

import json
from shapely.geometry import shape
import requests

url = 'https://opendata.arcgis.com/datasets/244b257482da4778995cf11ff99e9997_0.geojson'
r = requests.get(url)
data = json.loads(r.text)
for f in data['features']:
    if f['properties']['CTYUA21NM'] == 'Derbyshire':
        geom = f['geometry']
        # convert MultiPolygon > Polygon
        geom = shape({
            'type': 'Polygon',
            'coordinates': geom['coordinates'][0]
        })
        print(type(geom))
        break

Output:

<class 'shapely.geometry.polygon.Polygon'>

需要系统化。 多多边形包括多边形,多边形包括内部,内部有坐标

import geopandas as gpd
import requests

res = requests.get(
    "https://opendata.arcgis.com/datasets/244b257482da4778995cf11ff99e9997_0.geojson"
)
gdf = gpd.GeoDataFrame.from_features(res.json()).set_crs("epsg:4326")

gdfd = gdf.loc[gdf["CTYUA21NM"].str.contains("Derbyshire")].copy()

gdfd["geometry"].apply(
    lambda g: [g3.coords for g2 in g.geoms for g3 in g2.interiors]
).explode().explode()

output

130     (-1.484521649999976, 52.96638748100003)
130     (-1.484809956999925, 52.96630955400008)
130     (-1.484938351999972, 52.96627955300005)
130     (-1.485184568999955, 52.96623118800005)
130      (-1.48530681099993, 52.96621284400004)
                         ...                   
130     (-1.483622200999946, 52.96727346400007)
130     (-1.483387032999929, 52.96689850300004)
130    (-1.483327163999945, 52.966792199000054)
130    (-1.483532068999978, 52.966718497000045)
130     (-1.484521649999976, 52.96638748100003)
Name: geometry, Length: 1587, dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM