首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Google地图中获取多边形内的多边形

在Google地图中获取多边形内的多边形
EN

Stack Overflow用户
提问于 2014-01-09 20:14:33
回答 3查看 1.5K关注 0票数 3

在的帮助下,我学会了在谷歌地图上手绘。现在,我正尝试在一个多边形内绘制多边形,类似于下面的SS

我想让多边形标记为黄色和绿色的within the black

我不确定这是否可能。请说明一下这个问题。

更新:在进一步的研究中,我了解到一种名为的方法,该方法用于确定给定的纬度/lng点是否在多边形内。

但遗憾的是,没有默认方法来检查Google地图提供的多边形中的多边形:(

EN

回答 3

Stack Overflow用户

发布于 2014-12-03 18:43:46

通过循环遍历内部多边形的每个点并使用containsLocation()测试它是否包含在外部多边形中,可以检查一个多边形是否位于另一个多边形中。

代码语言:javascript
复制
var isPolygonInsidePolygon = function (innerPolygon, outerPolygon) {
    var pointsInside = 0;
    var pointsOutside = 0;
    innerPolygon.getPath().getArray().map(function (x) { 
        (google.maps.geometry.poly.containsLocation(x, outerPolygon)) ? pointsInside++ : pointsOutside++;
    });
    return (pointsOutside > 0) ? false : true;
};

在较旧的浏览器( IE8或更低版本)中,JavaScript映射()函数可能无法工作。

票数 6
EN

Stack Overflow用户

发布于 2014-04-11 12:11:39

这是一个GIS问题。Google Maps API并不是一个真正成熟的GIS。如果您想要一个开源解决方案,我建议将黄色和绿色多边形加载到PostGIS数据库中。然后你就可以查询数据库了。

例如,可以将绘制的多边形编码为polygon对象,其格式为:

代码语言:javascript
复制
POLYGON((lon lat, lon lat, lon lat, lon lat, ... lon lat))

然后将其从javascript发送到PHP文件,如(您将把它包装在$.get()命令或类似命令中,并返回json结果:

代码语言:javascript
复制
getParcels.php?bounds=POLYGON((lon lat, lon lat, lon lat, lon lat, ... lon lat))

在PHP文件中,查询PostGIS数据库并返回黄色和绿色多边形的In:

代码语言:javascript
复制
<?php
$pgcon = pg_connect ("dbname=gis user=gisuser connect_timeout=5") or die ( 'Can not connect to PG server' );
if (!$pgcon) {
  echo "No connection to GIS database.\n";
}
$bounds = urldecode($_GET["bounds"];
$ewkt = 'SRID=4326;' . $bounds);
$json = ''; // this will contain your output
// Here I am returning the polygon geometry and the parcelID...
$query .= <<<EOD
SELECT 
  ST_AsGeoJSON(the_geom) as geom, 
  parid 
FROM
  parcels
WHERE 
  ST_Intersects(the_geom, ST_GeomFromEWKT( $1 ));
EOD;

$result = pg_query_params($pgcon, $query, array($ewkt));

if($result) {
$json = '{"type":"FeatureCollection", "features":[';
    while($row = pg_fetch_assoc($result)) {
        $json .= '{"geometry":' . $row['geom'] . ',';
        $json .= '"type":"Feature","properties":{"parid":"' . $row['parid'] . '"}},';
    }
    $json = substr($json, 0,-1).']}';
}

echo $json;
?>

这将使用PostGIS中的ST_Intersects命令返回与多边形相交的地块。

票数 0
EN

Stack Overflow用户

发布于 2019-03-25 02:08:04

使用@chris-smith解决方案的替代实现可能会更快,因为如果找到外部点,它就不会一直循环:

代码语言:javascript
复制
function isPolygonInsidePolygon( innerPolygon, outerPolygon ) {

  var points = innerPolygon.getPath().getArray();

  for( var i = 0; i < points.length; i++ ){
    if( ! google.maps.geometry.poly.containsLocation( points[i], outerPolygon) ){ 
      return false; 
    }
  }

  return true; 

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21019967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档