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

Jon*_*nas 14 python gis django geodjango

我正在使用GEOS API中的"缓冲"方法根据GeoDjango中的点和半径创建一个圆,根据这个答案:GeoDjango:如何根据点和半径创建一个圆

正如一位评论者指出的那样,你必须将半径以km为单位转换为......但是如何?我想这是一个快速的公式,但它对我来说是希腊语.我会感激任何指针.

sar*_*old 15

答案可能取决于地球上的位置.在赤道附近,1km将等于大约0.008度(1公里/ 40,000公里*360度)的纬度和经度,但是在极点附近,1km将大约等于0.008度纬度,但可以是多度经度.(如果距离极点1公里,向西行驶1公里将会向西带来大约57度的经度.)

但是,如果API只是想要沿着一个大圆的度数作为测量,也许它就足够使用(n km/40,000 km*360度).至少,40,000km是"对我来说足够好":)更准确的数字可用.


DTi*_*ing 6

赤道约1 1105公里,极地约111.699公里.

link可能是您感兴趣的.转换基于地球的周长360度.

赤道1英尺长也约111公里,当你走到极点时 - > 0.


Lee*_*ile 5

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)
Run Code Online (Sandbox Code Playgroud)