【问题标题】:Determine the centroid of multiple points确定多个点的质心
【发布时间】:2008-12-09 18:06:34
【问题描述】:

我正在编写一个用 python 编写的地图应用程序,我需要获取 N 个点的纬度/经度质心。 假设我有两个位置

a.lat = 101
a.lon = 230

b.lat = 146
b.lon = 200

使用欧几里得公式很容易获得两点的中心。我想 能够做到两点以上。

从根本上说,我想做类似http://a.placebetween.us/ 这样的事情,一个人可以输入多个地址并找到一个对每个人都等距的位置。

【问题讨论】:

    标签: math google-maps geometry geolocation


    【解决方案1】:

    查看下面链接的 pdf 文档。它解释了如何应用 the plane figure algorithm that Bill the Lizard 提及,但在球体的表面上。

    poster thumbnail and some details http://img51.imageshack.us/img51/4093/centroidspostersummary.jpg
    来源:http://www.jennessent.com/arcgis/shapes_poster.htm
    还有一个25 MB full-size PDF 可供下载。
    感谢 mixdev 找到原始来源的链接,当然还有 Jenness Enterprises 提供的信息。注意:我与本材料的作者没有任何关系。

    【讨论】:

    • 这是一个明显的改进。我最近一直在使用 GIS 做很多工作,所以我只是假设这已被理解。在一般论坛中,这是一个可怕的假设。 +1
    • 谢谢。让我们希望这一切都值得咀嚼。
    • 该 PDF 丢失。改为检查[24MB!]jennessent.com/downloads/graphics_shapes_poster_full.pdf
    • 我已经浏览了你们提供的链接。为了计算笛卡尔坐标和三角形的质心,我们需要正确的半径。但是如何计算球体的半径呢?
    • 对不起,@Winbros。我没有示例实现或伪代码。 Wikipedia atricle 和海报都提供了背景数学。翻译成代码应该不会太难。只是很多循环和浮点运算:)
    【解决方案2】:

    添加到 Andrew Rollings 的答案中。

    您还需要确保如果您在 0/360 经度线的任一侧有点,您正在“正确的方向”进行测量

    Is the center of (0,359) and (0, 1) at (0,0) or (0,180)?
    

    【讨论】:

    • 这是我的应用程序将东半球与西半球完全分开处理的主要原因。例如,没有“美国的范围”,有“US-E”和“US-W”,我根据需要将它们组合起来。
    【解决方案3】:

    如果您正在平均角度并且必须处理它们穿过 0/360,那么将每个值的 sin 和 cos 相加然后平均 = atan2(正弦之和,余弦之和)会更安全
    (注意 atan2 函数中的参数顺序)

    【讨论】:

      【解决方案4】:

      如果这些点形成plane figure,则数学非常简单。但是,无法保证一组经纬度就这么简单,因此可能首先需要找到这些点的convex hull

      编辑:正如eJames 指出的那样,您必须对球体的表面进行校正。我的错是假设(不假思索地)这是被理解的。 +1 给他。

      【讨论】:

        【解决方案5】:

        下面的 PDF 比 Jenness Enterprises 的海报更详细。它还可以处理两个方向以及球体(例如地球)而不是完美球体的转换。

        Converting between 3-D Cartesian and ellipsoidal latitude, longitude and height coordinates

        【讨论】:

          【解决方案6】:

          分别平均纬度和经度。

          【讨论】:

            猜你喜欢
            • 2013-11-22
            • 1970-01-01
            • 2020-02-09
            • 2018-11-08
            • 2020-01-26
            • 2012-12-20
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            相关资源
            最近更新 更多