【问题标题】:Geokit LatLng midpoint between two pointsGeokit LatLng 两点之间的中点
【发布时间】:2013-09-21 19:56:12
【问题描述】:

嗨,我正在使用 ruby​​ Geokit::LatLng 类来存储纬度和经度,并试图找到几个点之间的中点。我注意到这个宝石有问题,或者我可能误解了这些概念。

          a = Geokit::LatLng.new(13.0627081,80.274658)
          b = Geokit::LatLng.new(12.8550615,80.2264393)

当我计算“midpoint_to”方法来计算这些点之间的中点时,我注意到它们给出了不同的结果

          a.midpoint_to(b) 
<Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 

          b.midpoint_to(a)
<Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596>

谁能解释一下这里发生了什么。 a 到 b 之间的中点应该与 b 到 a 相同还是纬度和经度不同

【问题讨论】:

    标签: ruby geolocation geocoding latitude-longitude geokit


    【解决方案1】:

    在您的示例中,两点是相同的,非常接近。值得找出差异 - 即为什么你没有得到相同的对象:

    a.midpoint_to(b) 
    <Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 
    
    b.midpoint_to(a)
    <Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596>
    
    • 第一个数字0x0000000292f3680x00000002933f80 是对象标识(不清楚您是否已经知道)。它们在任何新对象实例中总是不同的,并且不测量与距离或位置相关的任何内容。还有一些其他类没有显示这个数字,或者当答案相同时是相同的。

    • @lat@lng 的差异是由于浮点精度的限制。结果不一样,因为求中点的计算并没有以完全相同的方式使用两组输入数字。事实上,即使浮点数非常简单,a + (b - c) 也可能与(a + b) - c 不同。当您查看两个计算出的中点之间的经度差异时,它是9.379590437674779e-10 度。在地球表面,这大约是 0.0001 米(0.1 毫米)的距离,而您的输入点相距大约 14.7 公里。

    如果您使用 geokit 测量距离,您会得到一个令人放心的 0.0,您可以使用它来确认两个计算是否足够接近,可以算作完全相同的点:

    a = Geokit::LatLng.new(13.0627081,80.274658)
    b = Geokit::LatLng.new(12.8550615,80.2264393)
    m1 = a.midpoint_to(b)
    m2 = b.midpoint_to(a)
    if m1.distance_to( m2 ) > 0
      puts "Mid-points are separate"
    else
      puts "Mid-points are the same location"
    end
    

    输出是:

    Mid-points are the same location
    

    如果您进行更复杂的计算,您可能更喜欢使用略高于 0.0 的数字,例如 1e-5(到最接近的厘米)。

    【讨论】:

      【解决方案2】:

      a 到 b 之间的中点,反之亦然。

      中点可能不在纬度/经度的中间;

      指出一个

      纬度经度 22.57265 88.36389

      点b

      纬度经度 27.66483 -81.51575

      a.midpoint_to(b) 
      => #<Geokit::LatLng:0xb9219f44 @lat=79.06104152033897, @lng=16.672528167825877
      

      此页面显示如何计算geographic midpoint

      This post可能有助于理解公式

      【讨论】:

        猜你喜欢
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        • 2015-07-03
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        相关资源
        最近更新 更多