【问题标题】:Geodjango- Can't get point in a polygonGeodjango-无法在多边形中找到点
【发布时间】:2016-09-06 23:28:10
【问题描述】:

我有一个基于 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 的东西,所以我完全迷路了

【问题讨论】:

    标签: python postgis geodjango


    【解决方案1】:

    我为这些点设置了错误的 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>]
    

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 2012-11-13
      • 2020-02-23
      • 2012-11-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多