Google地图将多边形和缩放绘制到其边界

时间:2013-10-14 10:09:20

标签: javascript google-maps google-maps-api-3 zoom polygon

我遇到以下问题:创建多边形后,它不会在地图上绘制。我使用this示例。第二个问题:如何在创建多边形时缩放多边形?

var p = {
  "type": "MultiPolygon",
  "coordinates": [
    [
      [
        [-80.661917125299155, 35.042245264120233],
        [-80.662257428469147, 35.042566288770765],
        [-80.662116500253873, 35.042670715828088],
        [-80.661715367137106, 35.042389935257198],
        [-80.661917125299155, 35.042245264120233]
      ]
    ],
    [
      [
        [-80.661547137566686, 35.042510563404129],
        [-80.661677171806787, 35.042417322902836],
        [-80.662084018102888, 35.042702102858307],
        [-80.662039854197829, 35.042756211162953],
        [-80.662002555672572, 35.042820528162387],
        [-80.661457640151127, 35.042647387136952],
        [-80.661547137566686, 35.042510563404129]
      ]
    ]
  ]
};

var self = this;
    var coords = p.coordinates;
    var paths = [];
    for (var i = 0; i < coords.length; i++) {
      for (var j = 0; j < coords[i].length; j++) {
        var path = [];
        for (var k = 0; k < coords[i][j].length; k++) {
          var ll = new google.maps.LatLng(coords[i][j][k]
            [0],coords[i][j][k][1]);
          path.push(ll);
        }
        paths.push(path);
      }
    }
    var polygon = new google.maps.Polygon({
      paths: paths,
      strokeColor: "#FF7800",
      strokeOpacity: 1,
      strokeWeight: 5,
      fillColor: "#46461F",
      fillOpacity: 0.25
    });

    polygon.setMap(map);

1 个答案:

答案 0 :(得分:3)

你有纬度和经度向后

      var ll = new google.maps.LatLng(coords[i][j][k]
        [0],coords[i][j][k][1]);

应该是:

      var ll = new google.maps.LatLng(coords[i][j][k]
        [1],coords[i][j][k][0]);

working example

代码段

function initialize() {

  var myLatlng = new google.maps.LatLng(52.188680, 8.608940);

  var options = {
    center: myLatlng,
    zoom: 14
  };

  var div = document.getElementById('map-canvas');
  var map = new google.maps.Map(div, options);

  var p = {
    "type": "MultiPolygon",
    "coordinates": [
      [
        [
          [-80.661917125299155, 35.042245264120233],
          [-80.662257428469147, 35.042566288770765],
          [-80.662116500253873, 35.042670715828088],
          [-80.661715367137106, 35.042389935257198],
          [-80.661917125299155, 35.042245264120233]
        ]
      ],
      [
        [
          [-80.661547137566686, 35.042510563404129],
          [-80.661677171806787, 35.042417322902836],
          [-80.662084018102888, 35.042702102858307],
          [-80.662039854197829, 35.042756211162953],
          [-80.662002555672572, 35.042820528162387],
          [-80.661457640151127, 35.042647387136952],
          [-80.661547137566686, 35.042510563404129]
        ]
      ]
    ]
  };

  var self = this;
  var bounds = new google.maps.LatLngBounds();
  var coords = p.coordinates;
  var paths = [];
  for (var i = 0; i < coords.length; i++) {
    for (var j = 0; j < coords[i].length; j++) {
      var path = [];
      for (var k = 0; k < coords[i][j].length; k++) {
        var ll = new google.maps.LatLng(coords[i][j][k]
          [1], coords[i][j][k][0]);
        path.push(ll);
        bounds.extend(ll);
      }
      paths.push(path);
    }
  }
  var polygon = new google.maps.Polygon({
    paths: paths,
    strokeColor: "#FF7800",
    strokeOpacity: 1,
    strokeWeight: 5,
    fillColor: "#46461F",
    fillOpacity: 0.25
  });

  polygon.setMap(map);
  map.fitBounds(bounds);

}

google.maps.event.addDomListener(window, 'load', initialize)
.kontakt_map_container {
  position: relative;
  width: 100%;
  height: 500px;
  overflow: hidden;
  margin-top: 2em;
}
#map-canvas {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<script src="http://maps.google.com/maps/api/js"></script>
<div class="kontakt_map_container">
  <div id="map-canvas"></div>
</div>