【问题标题】:How do I convert kilometres to degrees in Geodjango/GEOS?如何在 Geodjango/GEOS 中将公里转换为度数?
【发布时间】:2011-03-07 08:18:38
【问题描述】:

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

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

【问题讨论】:

  • 1 度纬度在赤道处约为 110.567 公里,在两极处约为 111.699 公里。这个link 你可能会感兴趣。转换是基于地球周长除以 360 度。
  • @Kriegar,您应该将其发布为答案,仅此链接就值得 +1 :)

标签: python django gis geodjango


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,这对我来说已经足够准确了。
  • 我通常建议不要使用这种方法。缓冲区 API 不使用大圆的度数,它使用笛卡尔空间中的线性缓冲区距离(无投影)。
  • @MikeT 请在这里给出一个更好的答案,并在你发布它时告诉我——我试图明确表示我的答案既便宜又肮脏,这对某些人来说已经足够了,但显然不是全部用户。我很乐意为更好的东西投票!
【解决方案2】:

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

您可能会对这个link 感兴趣。换算是根据地球周长除以 360 度。

1 度长在赤道处也约为 111 公里,并且 -> 0 到两极。

【讨论】:

    【解决方案3】:

    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)
    

    【讨论】:

      【解决方案4】:

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

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

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

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

      所以@ 60 纬度: 经度方向55 659 m。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        相关资源
        最近更新 更多