使用不同类型输入创建Shapely Polygon的实现方法咨询
问题1:经纬度字典列表生成Polygon的优化方案
你当前的硬编码下标写法仅能适配固定3个点的输入,列表长度变化时就会报错,更通用的实现方式如下:
x = [{'lat':90.87898, 'lon': -67.7897878}, {'lat':93.87898, 'lon': -77.7897878}, {'lat':33.87898, 'lon': -47.7897878}] # 列表推导式批量提取所有坐标对,适配任意长度的输入列表 coords = [(point['lat'], point['lon']) for point in x] poly = Polygon(coords)
注意:生成Polygon需要至少3个不共线的坐标点,生成后可调用poly.is_valid检查几何对象的有效性。
问题2:特殊格式字符串转Polygon对象
你给出的输入字符串用(和]作为每组坐标的包裹符,可以通过正则提取坐标内容后转换,实现代码如下:
import re from shapely import Polygon # 示例输入已补充第3个坐标点,否则不足3个点无法生成有效面 y = '(90.87898,-67.7897878](93.87898, -77.7897878](33.87898, -47.7897878]' # 提取所有括号包裹的坐标文本 coord_strs = re.findall(r'\((.*?)\]', y) # 转换为浮点型坐标对 coords = [] for item in coord_strs: lat, lon = map(float, [i.strip() for i in item.split(',')]) coords.append((lat, lon)) poly = Polygon(coords)
注意:如果后续数据库返回的包裹符规则有调整,修改正则匹配规则即可适配。
内容的提问来源于stack exchange,提问作者user3625533
相关产品推荐
相关产品推荐

