如何将 GeoJSON 转换为 Shapely 多边形?

14

我有一个GeoJSON文件。

geo = {'type': 'Polygon',
 'coordinates': [[[23.08437310100004, 53.15448536100007],
   [23.08459767900007, 53.15448536100007],
   [23.08594514600003, 53.153587050000056],
   (...)
   [23.08437310100004, 53.15448536100007]]]}

我想将这些坐标用作shapely.geometry.Polygon的输入。问题在于,Polygon只接受元组(tuple)值,这意味着我必须将这个geojson转换为一个多边形。当我尝试将这种类型的数据输入到Polygon中时,会出现错误:ValueError:LinearRing必须至少有3个坐标元组

我尝试了这样做:

[tuple(l) for l in geo['coordinates']]

但这并不完全有效,因为它只返回了这个结果。

[([23.08437310100004, 53.15448536100007],
  [23.08459767900007, 53.15448536100007],
  (...)
  [23.08437310100004, 53.15448536100007])]

我需要的是这个(我认为它是元组)

([(23.08437310100004, 53.15448536100007),
  (23.08459767900007, 53.15448536100007),
  (...)
  (23.08437310100004, 53.15448536100007)])

有这方面的函数吗?

3个回答

37

一种通用的解决方案是使用 shape 函数。这适用于所有几何图形,而不仅仅是多边形。

from shapely.geometry import shape
from shapely.geometry.polygon import Polygon

geo: dict = {'type': 'Polygon',
   'coordinates': [[[23.08437310100004, 53.15448536100007],
   [23.08459767900007, 53.15448536100007],
   [23.08594514600003, 53.153587050000056],
   [23.08437310100004, 53.15448536100007]]]}
polygon: Polygon = shape(geo)

这里有一个非常好的答案! - salfaris
1
这应该是被接受的答案。 - José L. Patiño
1
它不起作用! - Beikeni
有关程序设计的内容翻译成中文:为什么它不能工作? - bensentropy

4

试试这个:

from itertools import chain


geom = {...}
polygon = Polygon(list(chain(*geom['coordinates']))

我认为这种方法应该更准确,因为在其他答案中只考虑了第一个多边形,所以如果一个多边形有内环,它将不会显示出来。 - Guven Degirmenci

2
from shapely.geometry import Polygon
geo = {'type': 'Polygon',
 'coordinates': [[[23.08437310100004, 53.15448536100007],
   [23.08459767900007, 53.15448536100007],
   [23.08594514600003, 53.153587050000056],
   [23.08437310100004, 53.15448536100007]]]}
Polygon([tuple(l) for l in geo['coordinates'][0]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接