如何在Geodjango/GEOS中将公里转换为度?

19 投票
4 回答
38393 浏览
提问于 2025-04-16 13:09

我正在使用GEOS API中的“buffer”方法,在GeoDjango中根据一个点和半径来创建一个圆,具体可以参考这个回答:GeoDjango: 如何根据点和半径创建一个圆

正如一位评论者提到的,你需要把半径从公里转换成度数……但是怎么转换呢?我觉得这应该有个简单的公式,但我完全不懂。任何指点都将不胜感激。

4 个回答

5

在GEOS django API中,缓冲区会根据你当前的坐标系统使用的单位来创建缓冲区。

如果你存储的数据都是用4326格式(经纬度度数),那么你就得想办法把公里转换成度数。不过,往北走的时候,你的缓冲区会变得很扭曲。

一个更好的办法是把你的几何图形重新投影到一个能保持面积的坐标系统,通常这种投影可以用米作为单位。

比如,如果你在北美创建缓冲区,可以使用这个以米为单位的投影: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)
8

在赤道上,1度的纬度大约是110.567公里,而在两极则是111.699公里。

这个链接可能对你有帮助。这个换算是根据地球的周长除以360度来计算的。

至于经度,在赤道上1度大约也是111公里,但当你往两极走时,这个值会逐渐变为0。

23

这个答案可能会根据你在地球上的位置而有所不同。在赤道附近,1公里大约等于0.008度(计算方式是1公里除以地球周长4万公里,再乘以360度),但是在极地附近,1公里大约等于0.008度的纬度,但经度的变化可能会非常大。如果你离北极1公里,向西走1公里大约会让你移动57度的经度。

不过,如果这个API只是想要沿着大圆圈来测量度数,可能用(n公里 / 4万公里 * 360度)就足够了。至少,4万公里对我来说“已经够好了” :) 如果需要更准确的数字,可以查看这里

撰写回答