17

根据这个答案,我正在使用 GEOS API 中的“缓冲区”方法基于 GeoDjango 中的点和半径创建一个圆:GeoDjango: How to create a circle based on point and radius

正如一位评论者指出的那样,您必须将半径以千米为单位转换为度数......但是如何?我想这是一个快速的公式,但对我来说是希腊语。我会很感激任何指示。

4

4 回答 4

18

答案可能取决于地球上的位置。在赤道附近,1 公里将大致等于经纬度的 0.008 度(1 公里 / 40,000 公里 * 360 度),但在两极附近,1 公里将大致等于纬度 0.008 度,但可能是许多度的经度。(如果您距离极地 1 公里,则向“西”行驶 1 公里将使您向西移动大约 57 度经度。)

但是,如果 API 只是想要沿着一个大圆的度数作为测量值,那么使用 (n km / 40,000 km * 360 度) 可能就足够了。至少,40,000 公里“对我来说已经足够好了”:) 有更准确的数字可用

于 2011-03-07T08:29:08.587 回答
7

1 纬度在赤道约为 110.567 公里,在两极约为 111.699 公里。

link可能对此感兴趣。转换基于地球周长除以 360 度。

1 度长在赤道处也大约为 111 公里,当您到达两极时 -> 0。

于 2011-03-07T10:48:35.640 回答
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)
于 2013-10-18T17:32:34.950 回答
2

距离 = 度数 * PI * 直径 / 360

用地球半径粗略估计:6378公里

1 度@ 在赤道或沿经度是:111.317 公里

沿纬度 x 度纬度的 1 度是:(度 * PI * 直径 / 360)* cos(纬度)

所以@60纬度:经度方向55659米。

于 2011-03-10T16:01:12.177 回答