我已经使用postgis实现了GeoDjango。GeoDjango多边形区域
这里是我的模型:
...
geometria = models.PolygonField(srid=4326, null=True)
...
当我打电话data.area它返回一个浮点数,但我没有任何线索关于它的测量单位,因为我想这是个问题测试它是否大于平方米的预设面积。
你能帮我吗?
我已经使用postgis实现了GeoDjango。GeoDjango多边形区域
这里是我的模型:
...
geometria = models.PolygonField(srid=4326, null=True)
...
当我打电话data.area它返回一个浮点数,但我没有任何线索关于它的测量单位,因为我想这是个问题测试它是否大于平方米的预设面积。
你能帮我吗?
如果您在地图上处理大的地区,你应该设置
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属性 – rawbeans