4

postgis を使用して GeoDjango を実装しました。

これが私のモデルです:

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

data.areaを呼び出すと浮動小数点数が返されますが、測定単位についての手がかりがありません。平方メートルで事前に設定された面積よりも大きいかどうかをテストしたいので問題です。

手伝って頂けますか?

4

1 に答える 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 が 2 つの地域で呼び出されると、メートル単位の値が返されます (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

どの投影法を使用するかは、データの範囲と、必要な結果の精度によって異なります。ここでは、ニューヨークの一部の特定の投影法で説明しましたが、データが特に正確でない場合は、簡単に代用できます。グローバル射影または単純な式を使用するだけです。

于 2012-11-22T15:14:08.113 に答える