Geodjango-无法获得多边形中的点

时间:2016-05-11 13:50:25

标签: python postgis geodjango

我有一个基于shapefile的模型:

我的模特是:     来自django.contrib.gis.db导入模型

class RegionBorder(models.Model):

    region_code = models.CharField(max_length=9)
    region_name = models.CharField(max_length=24)

    mpoly = models.MultiPolygonField(srid=27700)
    objects = models.GeoManager()

    def __str__(self):
        return self.region_name

我已成功将多边形导入我的数据库:

len(RegionBorder.objects.all())
9

但是当我试图在多边形中找到一个点时,我什么也得不回来。我知道这一点必须在多边形中,因为它们是英格兰地区的地图,而我正试图在伦敦市中心找到Nelsons列爆炸。

p = GEOSGeometry("Point(-0.127907 51.507786)", srid=27700)

RegionBorder.objects.filter(mpoly__contains=p)
[]

我做错了什么?我已经交换了坐标以防万一我把它们弄错了,我已经删除了srid参数并重新开始。这是我第一次做任何GIS的东西,所以我完全迷失了

1 个答案:

答案 0 :(得分:0)

我为这些点设置了错误的SRID。通过将srid 4326用于lng / lat点然后在搜索之前转换为正确投影来修复

from django.contrib.gis.geos import GEOSGeometry

p = GEOSGeometry("Point(-0.127907 51.507786)", srid=4326) # 4326 for standard lng/lat coordinates

# Transform to same coordinate system as maps
p.transform(27700)

RegionBorder.objects.filter(mpoly__contains=p)
[<RegionBorder: London>]