How do I create a grid in google maps api v3

青春壹個敷衍的年華 提交于 2019-12-03 20:14:39

I think this is what you are trying to do. Changed your rectangleLng array to a two dimensional array and changed the excLat/excLng variables to not be rounded (they were backwards as well extLat wants to be up/down, excLng should be side to side).

proof of concept fiddle

code snippet:

var map;
var marker1;
var marker2;
var rectangle;
var infowindow = new google.maps.InfoWindow();

function initialize() {
  var mapOptions = {
    zoom: 11,
    center: new google.maps.LatLng(38.4, 26.7)
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
    mapOptions);

  marker1 = new google.maps.Marker({
    position: new google.maps.LatLng(38.3, 26.6),
    map: map,
    draggable: true,
    title: 'marker1'
  });
  google.maps.event.addListener(marker1, 'click', function(evt) {
    infowindow.setContent(marker1.getPosition().toUrlValue(6));
    infowindow.open(map, this);
  });
  marker2 = new google.maps.Marker({
    position: new google.maps.LatLng(38.5, 26.8),
    map: map,
    draggable: true,
    title: 'marker2'
  });
  google.maps.event.addListener(marker2, 'click', function(evt) {
    infowindow.setContent(marker1.getPosition().toUrlValue(6));
    infowindow.open(map, this);
  });
  rectangle = new google.maps.Rectangle({
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35,
    map: map,
    bounds: new google.maps.LatLngBounds(
      marker1.getPosition(),
      marker2.getPosition())
  });

  var leftSideDist = Math.round((marker2.getPosition().lng() - marker1.getPosition().lng()) * 10000) / 100;
  var belowSideDist = Math.round((marker2.getPosition().lat() - marker1.getPosition().lat()) * 10000) / 100;

  google.maps.event.addListener(marker1, 'dragend', function() {

    rectangle.setBounds(new google.maps.LatLngBounds(marker1.getPosition(), marker2.getPosition()));
    leftSideDist = Math.round((marker2.getPosition().lng() - marker1.getPosition().lng()) * 10000) / 100;
    makeGrid();
  });

  google.maps.event.addListener(marker2, 'dragend', function() {

    rectangle.setBounds(new google.maps.LatLngBounds(marker1.getPosition(), marker2.getPosition()));
    belowSideDist = Math.round((marker2.getPosition().lat() - marker1.getPosition().lat()) * 10000) / 100;
    makeGrid();
  });
  makeGrid();
}

var rectangleLat = [];
var rectangleLng = [];

function makeGrid() {
  for (x in rectangleLng) {
    for (y in rectangleLng[x]) {
      if (rectangleLng[x][y].setMap) {
        rectangleLng[x][y].setMap(null)
        rectangleLng[x][y] = null;
      }
    }
  }
  var leftSideDist = marker2.getPosition().lng() - marker1.getPosition().lng();
  var belowSideDist = marker2.getPosition().lat() - marker1.getPosition().lat();

  var dividerLat = 5;
  var dividerLng = 5; //ilerde kullanıcıdan alınacak
  var excLat = belowSideDist / dividerLat;
  var excLng = leftSideDist / dividerLng;

  var m1Lat = marker1.getPosition().lat();
  var m1Lng = marker1.getPosition().lng();
  var m2Lat = marker2.getPosition().lat();
  var m2Lng = marker2.getPosition().lng();
  document.getElementById('info').innerHTML += "dividerLat=" + dividerLat + ", excLat=" + excLat + "<br>";
  document.getElementById('info').innerHTML += "dividerLng=" + dividerLat + ", excLng=" + excLng + "<br>";
  document.getElementById('info').innerHTML += "m1=" + marker1.getPosition().toUrlValue(6) + "<br>";
  document.getElementById('info').innerHTML += "m2=" + marker2.getPosition().toUrlValue(6) + "<br>";

  for (var i = 0; i < dividerLat; i++) {
    if (!rectangleLng[i]) rectangleLng[i] = [];
    for (var j = 0; j < dividerLng; j++) {
      if (!rectangleLng[i][j]) rectangleLng[i][j] = {};


      rectangleLng[i][j] = new google.maps.Rectangle({
        strokeColor: '#FFFFFF',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.1,
        map: map,
        bounds: new google.maps.LatLngBounds(
          new google.maps.LatLng(m1Lat + (excLat * i), m1Lng + (excLng * j)),
          new google.maps.LatLng(m1Lat + (excLat * (i + 1)), m1Lng + (excLng * (j + 1))))

      });
      document.getElementById('info').innerHTML += "[i=" + i + ",j=" + j + "]:" + rectangleLng[i][j].getBounds() + "<br>";



    } //for j Lng

  } //for i Lat


  document.getElementById('left').value = leftSideDist;
  document.getElementById('blw').value = belowSideDist;
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
  height: 100%;
  margin: 0px;
  padding: 0px
}
#panel {
  position: absolute;
  top: 5px;
  left: 50%;
  margin-left: -180px;
  z-index: 5;
  background-color: #fff;
  padding: 5px;
  /* border: 1px solid #999;*/
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map-canvas"></div>
<div id="panel" style="margin-left:-320px">leftSideDist:
  <input type="text" readonly id="left">belowSideDist:
  <input type="text" readonly id="blw">
</div>
<div id="info"></div>

To get the coordinates of the marker after it's been dragged, change:

  google.maps.event.addListener(marker1, 'dragend', function() {
      polyline.LatLngBounds(new google.maps.LatLng(marker1.getPosition(), marker2.getPosition()));
  });

to:

  google.maps.event.addListener(marker1, 'dragend', function(event) {
      polyline.LatLngBounds(event.latLng);
  });

However, there is no LatLngBounds function on the polyline object.

As far as i done:

    <!DOCTYPE html>
<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
      #panel {
        position: absolute;
        top: 5px;
        left: 50%;
        margin-left: -180px;
        z-index: 5;
        background-color: #fff;
        padding: 5px;
        border: 1px solid #999;
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?          
    sensor=false&v=3&libraries=geometry"></script>
    <script>
        var map;
        var marker1;
        var marker2;
        var rectangle;

        function initialize() {
            var mapOptions = {
                zoom: 11,
                center: new google.maps.LatLng(38.4, 26.7)
            };
            map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

            marker1 = new google.maps.Marker({
                position: new google.maps.LatLng(38.3, 26.6),
                map: map,
                draggable: true,
                title: 'marker1'
            });
            marker2 = new google.maps.Marker({
                position: new google.maps.LatLng(38.5, 26.8),
                map: map,
                draggable: true,

                title: 'marker2'
            });

            rectangle = new google.maps.Rectangle({
                strokeColor: '#FF0000',
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: '#FF0000',
                fillOpacity: 0.35,
                map: map,
                bounds: new google.maps.LatLngBounds(
                        marker1.getPosition(),
                        marker2.getPosition())
            });

            var leftSideDist = Math.round((marker2.getPosition().lng() - marker1.getPosition().lng()) * 10000) / 100;
            var belowSideDist = Math.round((marker2.getPosition().lat() - marker1.getPosition().lat()) * 10000) / 100;

            google.maps.event.addListener(marker1, 'dragend', function () {

                rectangle.setBounds(new google.maps.LatLngBounds(marker1.getPosition(), marker2.getPosition()));
                leftSideDist = Math.round((marker2.getPosition().lng() - marker1.getPosition().lng()) * 10000) / 100;
            });

            google.maps.event.addListener(marker2, 'dragend', function () {

                rectangle.setBounds(new google.maps.LatLngBounds(marker1.getPosition(), marker2.getPosition()));
                belowSideDist = Math.round((marker2.getPosition().lat() - marker1.getPosition().lat()) * 10000) / 100;
            });



            var leftSideDist = Math.round((marker2.getPosition().lng() - marker1.getPosition().lng()) * 10000) / 100;
            var belowSideDist = Math.round((marker2.getPosition().lat() - marker1.getPosition().lat()) * 10000) / 100;

            var dividerLat = 5;
            var dividerLng = 5; //ilerde kullanıcıdan alınacak
            var excLat = leftSideDist / dividerLat;
            var excLng = belowSideDist / dividerLng;

            var rectangleLat[];
            var rectangleLng[];

            var m1Lat = marker1.getPosition().lat();
            var m1Lng = marker1.getPosition().lng();
            var m2Lat = marker2.getPosition().lat();
            var m2Lng = marker2.getPosition().lng();

            for (var i = 0; i < dividerLat; i++) {

                for (var j = 0; j < dividerLng; j++) {



                    rectangleLng[i*5+j] = new google.maps.Rectangle({
                        strokeColor: '#FF0000',
                        strokeOpacity: 0.8,
                        strokeWeight: 2,
                        fillColor: '#FF0000',
                        fillOpacity: 0.35,
                        map: map,
                        bounds: new google.maps.LatLngBounds(
                        ( m1Lat , (excLng*(j+1) ) ),
                        ( m1Lat+excLat, m2Lng+(excLng*(j+1) ) ) )

                    });



                }//for j Lng

             }//for i Lat


            document.getElementById('left').value = leftSideDist;
            document.getElementById('blw').value = belowSideDist;
        }

        google.maps.event.addDomListener(window, 'load', initialize);

    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
    <div id="panel" style="margin-left:-320px">
      leftSideDist: <input type="text" readonly id="left">
      belowSideDist: <input type="text" readonly id="blw">
    </div>
  </body>
</html>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!