【问题标题】:GeoDjango polygon areaGeoDjango 多边形区域
【发布时间】:2012-11-01 03:28:03
【问题描述】:

我已经使用 postgis 实现了 GeoDjango。

这是我的模型:

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

当我调用 data.area 时,它会返回一个浮点数,但我没有任何关于它的测量单位的线索,这是一个问题,因为我想测试它是否更大以平方米为单位设置面积。

你能帮帮我吗?

【问题讨论】:

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


    【解决方案1】:

    如果你在处理地图上的大面积区域,你应该设置

    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
    

    我们使用哪种投影取决于数据的范围以及我们需要结果的准确程度:这里我用纽约部分地区的特定投影进行了说明,但如果您的数据不是特别准确,您可以轻松替换全局投影或仅使用简单的公式。

    【讨论】:

    • self.polygon.area 返回一个浮点数,因此没有 sq_m 属性
    猜你喜欢
    • 2012-03-02
    • 2016-09-03
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2021-09-14
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多