GeoDjango多边形面积

4
我已经使用postgis实现了GeoDjango。
这是我的模型:
  ...
  geometria = models.PolygonField(srid=4326, null=True)
  ...

当我调用 data.area 时,它返回一个浮点数,但是我不知道它的度量单位是什么,这是一个问题,因为我想测试它是否大于以平方米为单位预设的区域。
你能帮帮我吗?
1个回答

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,则我们将物品存储为普通几何图形,我们需要将平方度数(您获得的浮点结果)转换为您喜欢的度量单位,因为我们无法从地理坐标计算面积。相反,我们可以添加一个帮助方法,该方法在投影坐标空间中进行转换:

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

我们使用哪种投影取决于数据的范围和我们需要多么准确的结果:在这里,我用一个特定的投影来说明纽约的一部分,但如果您的数据不是特别准确的话,您可以很容易地替换为全球投影或者只使用一个简单的公式。

4
self.polygon.area返回一个浮点数,因此没有sq_m属性。 - roob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接