javascript - 如何在谷歌地图上显示两个多边形的相交区域?

标签 javascript google-maps google-maps-api-3

我正在开展一个项目,我需要显示在 Google map 上绘制的两个多边形的相交区域。我已经阅读了 map API 文档。它确实提到了相交多边形,但没有解释示例或方法。谁能帮帮我?

最佳答案

例子演示了如何确定和绘制两个多边形的相交区域

Prerequisite:

jsts library is utilized for calculating polygons intersection

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: { lat: 24.886, lng: -70.268 },
    mapTypeId: google.maps.MapTypeId.TERRAIN
  });

  // Define the LatLng coordinates for the polygon's path.
  var bermudaCoords = [
    { lat: 25.774, lng: -80.190 },
    { lat: 18.466, lng: -66.118 },
    { lat: 32.321, lng: -64.757 },
    { lat: 25.774, lng: -80.190 }
  ];

  // Construct the polygon.
  var bermudaTriangle = new google.maps.Polygon({
    paths: bermudaCoords,
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35
  });
  bermudaTriangle.setMap(map);

  // Construct another polygon.
  var anotherCoords = [
    { lat: 25.774, lng: -85.101 },
    { lat: 35.406, lng: -85.101 },
    { lat: 35.406, lng: -54.127 },
    { lat: 25.774, lng: -60.010 }
  ];

  var anotherArea = new google.maps.Polygon({
    paths: anotherCoords,
    strokeColor: '#0000FF',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#0000FF',
    fillOpacity: 0.35
  });
  anotherArea.setMap(map);



  //calc polygons intersection
  var geometryFactory = new jsts.geom.GeometryFactory();
  var bermudaPolygon = createJstsPolygon(geometryFactory, bermudaTriangle);
  var anotherPolygon = createJstsPolygon(geometryFactory, anotherArea);
  var intersection = bermudaPolygon.intersection(anotherPolygon);
  drawIntersectionArea(map, intersection);
}



function drawIntersectionArea(map, polygon) {
  var coords = polygon.getCoordinates().map(function (coord) {
    return { lat: coord.x, lng: coord.y };
  });

  var intersectionArea = new google.maps.Polygon({
    paths: coords,
    strokeColor: '#00FF00',
    strokeOpacity: 0.8,
    strokeWeight: 4,
    fillColor: '#00FF00',
    fillOpacity: 0.35
  });
  intersectionArea.setMap(map);
}



function createJstsPolygon(geometryFactory, polygon) {
  var path = polygon.getPath();
  var coordinates = path.getArray().map(function name(coord) {
    return new jsts.geom.Coordinate(coord.lat(), coord.lng());
  });
  if(coordinates[0].compareTo(coordinates[coordinates.length-1]) != 0) 
      coordinates.push(coordinates[0]);
  var shell = geometryFactory.createLinearRing(coordinates);
  return geometryFactory.createPolygon(shell);
}


google.maps.event.addDomListener(window, 'load', initMap);
#map,
        html,
        body {
            padding: 0;
            margin: 0;
            height: 100%;
        }
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<script src="https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/1.1.2/jsts.min.js"></script>
<div id="map"></div>

JSFiddle

关于javascript - 如何在谷歌地图上显示两个多边形的相交区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504068/

相关文章:

javascript - 反转 DECRYPT 算法

javascript - 主干嵌套模型...它们是如何工作的?

javascript - Jquery - 获取行跨度超过一的 <td> 标记的值

java - 使用 Android Maps API V2 的 Android 应用程序拒绝启动

javascript - Google Map API v3 遮蔽除多边形之外的所有内容

google-maps-api-3 - 用户点击时捕获 Google map 中的坐标

javascript - Android在线服务器接收JavaScript响应而不是Json?

android - 使用 showInfoWindow 时如何在 Google Maps v2 上显示路线图标?

javascript - 将 mouseevent 传递给 googlemaps 事件监听器

javascript - 无法在街景中触发事件