【问题标题】:Get center of geojson Continent/Country/State with leaflet使用传单获取 geojson 大陆/国家/州的中心
【发布时间】:2017-02-08 09:15:11
【问题描述】:

有没有办法为由多个多边形对象组成的国家/大陆(例如美国、加拿大,除了主要陆地部分还有岛屿)找到一个中心?我曾尝试使用传单的Layer.getCenter() 甚至Layer.getBounds().getCenter(),但这些方法肯定不适用于此类国家,并返回“禁止”结果。

可以通过以下链接(传单游乐场)查看示例。只需滚动并单击美国或加拿大,看看circleMarker 将出现在哪里。然后尝试点击较小的实体,例如美国南部的一些岛屿,他们会将此标记精确地放置在它们的中心:

http://playground-leaflet.rhcloud.com/voyi/1/edit?html,output

【问题讨论】:

    标签: javascript leaflet geojson markers


    【解决方案1】:

    Leaflet 只能计算特征边界框的中心。在其他库(例如Turf.js)的帮助下,您可以计算多边形或(multipolygon)的centroid

    无论如何,您都会感到困惑,因为有时质心不在多边形(或多多边形)内:


    (来源:postgis.net

    (图 1.PostGIS's ST_Centroid documentation 中的多边形质心)

    所以我猜你真正想问的是:

    给定一个多边形或多多边形,我如何计算一个中心(或类似中心的点),它保证在多边形内并在视觉上看起来在它的中心,以便使用 Leaflet 向该点添加符号?

    为此,答案是"pole of inaccessibility",由polylabel 实现:«距多边形轮廓最远的内部点»。

    【讨论】:

    • 谢谢,这实际上是我想问的正确问题,但缺乏关于质心的知识。非常感谢,我会根据您提供的信息尝试获得好的结果
    • polylabel 帮助处理多边形。那么'multiPolygons'呢?就像拥有北美南部和阿拉斯加部分的美国国家一样?在这种情况下可以做些什么吗?
    • 计算每个多边形外环的面积,然后将polylabel应用于最大的那个。和/或,向github.com/mapbox/polylabel/issues 提交功能请求
    • 很抱歉问,但它是一个简单的鞋带公式吗?还是应该进行任何更正?你能指出我正确的方向吗?也许您有任何关于此的链接/信息,因为我从未有过与此相关的任何经验。但我肯定想知道更多。
    猜你喜欢
    • 2011-07-23
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多