首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将geojson变换成几何图形?

如何将geojson变换成几何图形?
EN

Stack Overflow用户
提问于 2021-08-17 15:27:57
回答 3查看 11.1K关注 0票数 6

我有一个geoJSON

代码语言:javascript
运行
复制
geo = {'type': 'Polygon',
 'coordinates': [[[23.08437310100004, 53.15448536100007],
   [23.08459767900007, 53.15448536100007],
   [23.08594514600003, 53.153587050000056],
   (...)
   [23.08437310100004, 53.15448536100007]]]}

我想用这些坐标作为shapely.geometry.Polygon的输入。问题是多边形只接受tuple值,这意味着我必须将这个geojson转换成一个多边形。当我尝试将这种类型的数据输入多边形时,会出现一个错误ValueError: A LinearRing must have at least 3 coordinate tuples

我试过这个:

代码语言:javascript
运行
复制
[tuple(l) for l in geo['coordinates']]

但是这个不太好用,因为它只返回

代码语言:javascript
运行
复制
[([23.08437310100004, 53.15448536100007],
  [23.08459767900007, 53.15448536100007],
  (...)
  [23.08437310100004, 53.15448536100007])]

我需要的是这个(我想这是个元组)

代码语言:javascript
运行
复制
([(23.08437310100004, 53.15448536100007),
  (23.08459767900007, 53.15448536100007),
  (...)
  (23.08437310100004, 53.15448536100007)])

有这个功能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-02 12:53:30

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

代码语言:javascript
运行
复制
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)
票数 24
EN

Stack Overflow用户

发布于 2021-08-17 15:40:10

尝尝这个,

代码语言:javascript
运行
复制
from itertools import chain


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

Stack Overflow用户

发布于 2021-08-17 15:41:57

代码语言:javascript
运行
复制
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]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68820085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档