如何在Django中通过经纬度列表创建Polygon实例用于PolygonField?
实例化Polygon用于PolygonField的方法
假设你使用Django的GeoDjango框架(PolygonField是GeoDjango的字段类型),按以下步骤操作:
1. 导入依赖类
先导入GeoDjango提供的Polygon类:
from django.contrib.gis.geos import Polygon
2. 整理坐标格式
Polygon要求坐标为嵌套结构,外层是多边形的环,每个坐标是(经度, 纬度)的元组,且首尾坐标必须完全一致(保证多边形闭合)。
比如你有原始坐标列表:
raw_coords = [(116.397428, 39.90923), (116.407428, 39.90923), (116.407428, 39.91923), (116.397428, 39.91923)]
先补充闭合坐标:
# 把第一个坐标追加到列表末尾,完成闭合 raw_coords.append(raw_coords[0])
3. 创建Polygon实例
直接用整理后的坐标列表实例化:
polygon = Polygon(raw_coords)
4. 赋值给模型字段
假设你的模型定义如下:
from django.contrib.gis.db import models class Region(models.Model): boundary = models.PolygonField()
创建模型实例时直接赋值即可:
region = Region(boundary=polygon) region.save()
额外说明
- 坐标顺序:GeoDjango默认采用WGS84坐标系(EPSG:4326),必须遵循
(经度, 纬度)的顺序,不要颠倒。 - 带洞多边形:如果需要创建带内部空洞的多边形,可传入多个环的列表,第一个为外环,后续为内环(空洞),每个环都要自行闭合:
outer_ring = [(x1,y1), (x2,y2), ..., (x1,y1)] inner_ring = [(a1,b1), (a2,b2), ..., (a1,b1)] polygon_with_hole = Polygon(outer_ring, inner_ring)
内容的提问来源于stack exchange,提问作者Software Dev
相关产品推荐
相关产品推荐

