Как создать предопределенный многоугольник с определенным размером - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть начальное значение Lat / Lng, полученное по событию click в Google Maps.Используя этот Lat / Lng, я хочу иметь возможность построить прямоугольный многоугольник размером 2 на 2 км.Так как у меня уже есть lat / lng, я попытался найти углы SE прямоугольника - используя computeOffset.

  var initial_pos = new google.maps.LatLng(lat, lng)
  var south = spherical.computeOffset(initial_pos, 2000, 135); 
  var east  = spherical.computeOffset(initial_pos, 2000, 90);

  var bounds = new google.maps.LatLngBounds(
    initial_pos,  south, east
  );
  var rectangle = new google.maps.Rectangle({
    map:map,
    bounds: bounds
  });

1 Ответ

0 голосов
/ 23 сентября 2018

Вы правы.Чтобы нарисовать прямоугольник, вам понадобятся границы, которые могут быть получены из двух диагонально противоположных вершин прямоугольника, который нужно нарисовать.Допустим, у вас есть северо-западный угол и вы пытаетесь нарисовать квадрат со стороной s.Затем вы можете узнать LatLng угла SE, используя computeOffset , с расстоянием s * √2 (в метрах) и курсом 135 (градусов).

Ниже приведены предложения по опубликованному исходному коду:

Вы должны рассчитать новую позицию только один раз.Поскольку эта позиция по диагонали противоположна, расстояние должно быть 2000 * 1.414.Также обратите внимание, что границы не инициализируются с помощью LatLng.Они инициализируются четырьмя переменными.север и юг - значения лат.восток и запад - значения Lng.Вот мои предложения по изменению кода.Пожалуйста, попробуйте их.Пожалуйста, воспринимайте это как псевдокод и подходящие изменения, если необходимо. (Следующий код теперь обновляется во время моего редактирования и должен работать. Убедитесь, что в теге script добавлена ​​library = geometry, например,

<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=geometry&callback=initGMap">
    </script>)



  var initial_pos = new google.maps.LatLng(18.39,77.12);
  // initialize initial_pos variable based on click event or so
  var calculated_pos = google.maps.geometry.spherical.computeOffset(initial_pos, 200*1.414, 135); 


  var rectangle = new google.maps.Rectangle({

    map: map,
    bounds:{ 
      north: initial_pos.lat(),
      south: calculated_pos.lat(),
      west: initial_pos.lng(),
      east: calculated_pos.lng()
    }
  });
...