根据这个答案,我正在使用GEOS API中的“缓冲”方法根据GeoDjango中的点和半径创建一个圆:GeoDjango: How to create a circle based on point and radius
正如一位评论者指出的那样,你必须将半径(以km为单位)转换为度数......但是如何?我想这是一个快速的公式,但它对我来说是希腊语。我会感激任何指示。
答案 0 :(得分:15)
答案可能取决于地球上的位置。在赤道附近,1km将等于大约0.008度(1公里/ 40,000公里* 360度)的纬度和经度,但是在极点附近,1km将大约等于0.008度纬度,但可以是多度经度。 (如果距离极点1公里,向西行驶1公里将会向西带来大约57度的经度。)
但是,如果API只是想要沿着一个大圆度的度数作为测量,也许它就足够了(n km / 40,000 km * 360度)。至少,40,000km对我来说“足够好”:)更准确的数字are available。
答案 1 :(得分:6)
1 deg lat在赤道大约110.567 km,在极点大约111.699 km。
此link
可能对您有用。转换基于地球的周长360度。
1度长也在赤道约111km并且 - >当你去两极时,你就是0。
答案 2 :(得分:4)
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)
答案 3 :(得分:0)
距离=度* PI *直径/ 360
使用地球半径的粗略估计:6378 km
在赤道或沿经度的1度@是:111.317 km
沿x度latutide纬度的1度是: (度* PI *直径/ 360)* cos(纬度)
所以@60纬度: 经度55 659米。