在的帮助下,我学会了在谷歌地图上手绘。现在,我正尝试在一个多边形内绘制多边形,类似于下面的SS
我想让多边形标记为黄色和绿色的within the black
。
我不确定这是否可能。请说明一下这个问题。
更新:在进一步的研究中,我了解到一种名为的方法,该方法用于确定给定的纬度/lng点是否在多边形内。
但遗憾的是,没有默认方法来检查Google地图提供的多边形中的多边形:(
发布于 2014-12-03 18:43:46
通过循环遍历内部多边形的每个点并使用containsLocation()测试它是否包含在外部多边形中,可以检查一个多边形是否位于另一个多边形中。
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映射()函数可能无法工作。
发布于 2014-04-11 12:11:39
这是一个GIS问题。Google Maps API并不是一个真正成熟的GIS。如果您想要一个开源解决方案,我建议将黄色和绿色多边形加载到PostGIS数据库中。然后你就可以查询数据库了。
例如,可以将绘制的多边形编码为polygon对象,其格式为:
POLYGON((lon lat, lon lat, lon lat, lon lat, ... lon lat))
然后将其从javascript发送到PHP文件,如(您将把它包装在$.get()
命令或类似命令中,并返回json结果:
getParcels.php?bounds=POLYGON((lon lat, lon lat, lon lat, lon lat, ... lon lat))
在PHP文件中,查询PostGIS数据库并返回黄色和绿色多边形的In:
<?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
命令返回与多边形相交的地块。
发布于 2019-03-25 02:08:04
使用@chris-smith解决方案的替代实现可能会更快,因为如果找到外部点,它就不会一直循环:
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;
}
https://stackoverflow.com/questions/21019967
复制相似问题