我使用的是「緩衝」從GEOS API來創建基於點和GeoDjango內置半徑的圓法,按照這樣的回答:GeoDjango: How to create a circle based on point and radius如何將公里轉換爲Geodjango/GEOS的度數?
正如一位評論者所指出的,你就必須轉換以km爲單位的半徑...但是如何?我想這是一個快速的公式,但它對我來說是希臘人。我會很感激任何指針。
我使用的是「緩衝」從GEOS API來創建基於點和GeoDjango內置半徑的圓法,按照這樣的回答:GeoDjango: How to create a circle based on point and radius如何將公里轉換爲Geodjango/GEOS的度數?
正如一位評論者所指出的,你就必須轉換以km爲單位的半徑...但是如何?我想這是一個快速的公式,但它對我來說是希臘人。我會很感激任何指針。
答案可能取決於地球上的位置。在赤道附近,1km的緯度和經度大致相當於0.008度(1km/40,000km * 360度),但在兩極附近,1km的緯度大致等於0.008度,但可能有許多度數的經度。 (如果你距離極點1公里,那麼'西'1公里的行程會給你帶來大約57度的經度西部。)
但是,如果API只是希望沿着一個大圓作爲度量值, d足以使用(n千米/ 40,000千米* 360度)。至少,40,000公里對我來說「已經足夠了」:)更準確的數字are available。
非常感謝,這對我來說足夠準確。 – Jonas 2011-03-07 10:36:59
距離=度* PI *直徑/ 360
使用地球半徑的粗略估計:6378公里
1度@在赤道或者沿着經度是:111.317公里
1度沿x處度latutide緯度是: (度* PI *直徑/ 360)* COS(緯度)
所以@ 60緯度: 55 659在經度方向米。
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)
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
@Kriegar,你應該發表一個答案,這個鏈接本身就值+1 :) – sarnold 2011-03-07 10:38:39