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

2024-05-13 03:15:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

正如一位评论人士所说,你必须把半径从公里换算成度。。。但是怎么做呢?我想这是一个快速的公式,但对我来说是希腊语。我很感激你的指点。


Tags: andto方法答案apionbuffercreate
3条回答

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)

答案可能取决于地球上的位置。在赤道附近,1公里大约等于纬度和经度的0.008度(1公里/40000公里*360度),但在两极附近,1公里大约等于纬度的0.008度,但可能是许多经度。(如果你距离北极点1公里,1公里的“西行”将为你带来大约57度的经度西行。)

但是,如果API只想用一个大圆上的度数作为测量值,也许它就足够使用了(n km/40000km*360度)。至少,40000公里“对我来说足够了”:)更精确的数字are available

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

这个^{}可能是你感兴趣的。换算是以地球周长除以360度为基础的。

赤道处1度长约111km,到达两极时为->;0。

相关问题 更多 >