GeoDjango多边形区域

时间:2012-11-12 17:15:54

标签: python django area geodjango units-of-measurement

我使用postgis实现了GeoDjango。

这是我的模特:

  ...
  geometria = models.PolygonField(srid=4326, null=True)
  ...

当我打电话给 data.area 时,它会返回一个浮点数,但我没有关于它的测量单位的任何线索,这是一个问题,因为我想要测试它是否在平方米的预设区域中更大。

你能帮助我吗?

1 个答案:

答案 0 :(得分:3)

如果您要处理地图上的大片区域,则应设置

geometria = models.PolygonField(srid=4326, null=True, geography=True)

如geodjango的文档https://docs.djangoproject.com/en/dev/ref/contrib/gis/model-api/#geography

中所述
  

地理类型在PostGIS 1.5中,引入了地理类型 - 它   为表示的空间特征提供原生支持   地理坐标(例如,WGS84经度/纬度)。 [7]不同于   几何类型使用的平面,地理类型使用球形   表示其数据。距离和测量操作   在地理栏上执行自动采用大​​圆弧   计算和返回线性单位。换句话说,当ST_Distance   在两个地理位置上调用,返回以米为单位的值(如   如果在WGS84中的几何列上调用,则与度相反。)

如果您没有geography=True,我们将事物存储为普通几何图形,我们需要将square degrees(您获得的浮点结果)转换为您更喜欢的度量单位因为我们无法从地理坐标计算面积。我们可以改为在投影坐标空间中添加辅助方法来进行转换:

def get_acres(self): 
    """ 
    Returns the area in acres. 
    """ 
    # Convert our geographic polygons (in WGS84)
    # into a local projection for New York (here EPSG:32118) 
    self.polygon.transform(32118) 
    meters_sq = self.polygon.area.sq_m

    acres = meters_sq * 0.000247105381 # meters^2 to acres

    return acres

我们使用哪种投影取决于数据的范围,以及我们对结果的准确程度:这里我已经用纽约部分的特定投影进行了说明,但如果您的数据不是特别准确,那么您可以很容易替换全局投影或只使用简单的公式。