确定两个多边形在Google地图中是否重叠?


12

我正在使用Google地图和多边形,但是我必须验证多边形之间是否相互重叠。

我有一个函数,当一个点(lat,lng)在一个多边形内时返回TRUE,但这还不足以确定一个多边形的每个点是否在另一个多边形内。

有什么建议吗?


1
花了我大约10秒钟找到github.com/tparkin/Google-Maps-Point-in-Polygon。你有尝试过吗?
John Powell

4
他写道:“我有一个函数(当点(纬度,经度)位于多边形内部时,返回TRUE)”。我认为这是一个很好的尝试,但是如果整个多边形都在另一个多边形内,则无法回答。
user30184 '16

1
我将Javascript Topology Suite库添加到您的项目中,并利用其空间运算符进行这种比较。我提供了一个类似问题的答案,该问题显示了如何将jsts库包括在项目中以及如何对两个多边形几何进行溶解/联合。您可能会发现有帮助。如果有机会,我将看看是否可以找到或创建一个示例来测试两个几何的相交-多边形,直线或点无关紧要,它们要么相交,要么不相交。:)
elrobis

Answers:


8

JSFiddle示例

我创建了一个JSFiddle,它使用JavaScript拓扑套件(JSTS)(JSTS)库演示了您的问题的解决方案

讲解

此方法有两个步骤。第一步,将您的Google几何转换为WellKnownText(WKT)几何表达式,这是一种广泛支持的格式。第二步使用JSTS对geometry.intersects()两个WKT几何图形执行JSTS 比较。

要真正理解这一点,您需要对WKT有基本的了解。由于您的Google Map中的多边形几何图形不受广泛支持,因此我立即将其转换为WKT几何图形,以便我们可以在JSTS中使用它们。

为了轻松做到这一点,我使用了Wicket库。当然,您始终可以自行开发自己的Google-Polygon-to-WKT方法,也可以使用我曾经写的一种方法,也可以使用其他可能找到的解决方案。就个人而言,这些天我只使用Wicket,就像您看到的那样,它非常简单:

// Pass in two Google Polygon objects.
// It returns two WellKnownText (WKT) geometry expressions.
// 
function UseWicketToGoFromGooglePolysToWKT( poly1, poly2 )
{
    var wicket = new Wkt.Wkt();

    wicket.fromObject(poly1);
    var wkt1 = wicket.write();

    wicket.fromObject(poly2);
    var wkt2 = wicket.write();

    return [wkt1, wkt2];
}

接下来是肉和土豆-使用JSTS来获取两个WKT几何形状,并测试它们是否相交。再一次,依靠库,没有太多东西了:

// Pass in two WKT geometry expressions.
// It performs a JSTS intersects() comparison.
// 
function UseJstsToTestForIntersection( wkt1, wkt2 )
{
    // Instantiate JSTS WKTReader and get two JSTS geometry objects
    var wktReader = new jsts.io.WKTReader();
    var geom1 = wktReader.read(wkt1);
    var geom2 = wktReader.read(wkt2);

    if (geom2.intersects(geom1)) {
      alert('intersection confirmed!');
    } else {
      alert('..no intersection.');
    }
}

我如何链接小提琴中的库

上面的小提琴链接和我演示的解决方案要求在您的项目中添加两个第三方库-JSTS和Wicket。从各自的Github中获取代码并将其合并到您的项目中是另一回事。但是,为了摆弄,我通过在克里斯托弗·曼宁Christopher Manning)发布的现有JSTS示例以及Wicket自己的演示页面中引用这些库来链接到这些库。基本上,我打开了页面,选择了“查看源代码”,并选择了对这两个库的相关引用。这些是我使用的确切库端点:

http://arthur-e.github.io/Wicket/wicket.js
http://arthur-e.github.io/Wicket/wicket-gmap3.js
http://bl.ocks.org/christophermanning/raw/4450188/javascript.util.min.js
http://bl.ocks.org/christophermanning/raw/4450188/jsts.min.js

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.