2011-03-07 75 views
12

我使用的是「緩衝」從GEOS API來創建基於點和GeoDjango內置半徑的圓法,按照這樣的回答:GeoDjango: How to create a circle based on point and radius如何將公里轉換爲Geodjango/GEOS的度數?

正如一位評論者所指出的,你就必須轉換以km爲單位的半徑...但是如何?我想這是一個快速的公式,但它對我來說是希臘人。我會很感激任何指針。

+2

1度緯度在赤道約110.567公里,兩極爲111.699公里。這[鏈接](http://www.movable-type.co.uk/scripts/gis-faq-5.1.html)可能是你感興趣的。轉換是基於地球的周長除以360度。 – DTing 2011-03-07 08:30:43

+0

@Kriegar,你應該發表一個答案,這個鏈接本身就值+1 :) – sarnold 2011-03-07 10:38:39

回答

12

答案可能取決於地球上的位置。在赤道附近,1km的緯度和經度大致相當於0.008度(1km/40,000km * 360度),但在兩極附近,1km的緯度大致等於0.008度,但可能有許多度數的經度。 (如果你距離極點1公里,那麼'西'1公里的行程會給你帶來大約57度的經度西部。)

但是,如果API只是希望沿着一個大圓作爲度量值, d足以使用(n千米/ 40,000千米* 360度)。至少,40,000公里對我來說「已經足夠了」:)更準確的數字are available

+0

非常感謝,這對我來說足夠準確。 – Jonas 2011-03-07 10:36:59

6

1度緯度在赤道約爲110.567公里,兩極爲111.699公里。

link可能是你感興趣的。轉換是基於地球的周長除以360度。

1度長也在赤道約爲111公里,當你走到兩極時,也是 - > 0。

+0

優秀!謝謝。 :) – sarnold 2011-03-08 05:30:57

0

距離=度* PI *直徑/ 360

使用地球半徑的粗略估計:6378公里

1度@在赤道或者沿着經度是:111.317公里

1度沿x處度latutide緯度是: (度* PI *直徑/ 360)* COS(緯度)

所以@ 60緯度: 55 659在經度方向米。

3

GEOS django API中的緩衝區將使用當前座標系統使用的任何單位創建緩衝區。

如果你在4326(經度/緯度)存儲所有內容,那麼你將不得不找到一些將KM轉換成度的棘手方法。但是現在你的緩衝區會在你走向北方時變得嚴重扭曲。

更好的解決方案是將幾何圖形重新投影到保持面積的投影中,通常這種投影可以跟蹤以米爲單位的單位。

例如,如果你是在北美建立的緩衝區域,您可以使用此投影,它使用米http://spatialreference.org/ref/sr-org/7314/

下面是如何做一個例子使用Django GEOS API:

from django.contrib.gis.geos import Point 

    # Defines a point in lat/long 
    p = Point(-70, 50) 

    # This projection defines lat/long coordinate system 
    p.srid = 4326 

    # Transform into the 7314 projection using the OGC WKT format to define that projection 
    p.transform('PROJCS["NA Lambert Azimuthal Equal Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["longitude_of_center",-100.0],PARAMETER["latitude_of_center",45.0],UNIT["meter",1.0]]') 

    # Creates a buffered polygon of 1000 meters in radius 
    poly = p.buffer(1000)