Google Maps V3 Circle и Circle, которые я создал, не совпадают

#javascript #jquery #google-maps #google-maps-api-3 #gis

#javascript #jquery #google-карты #google-maps-api-3 #гис

Вопрос:

Я создал круг, используя API Google Maps V3, а также попытался создать круг из маркеров с тем же радиусом.

Проблема: тот, который я создал, является наклонным, в то время как тот, который создан Google Maps, представляет собой красивый круглый круг. Что пошло не так?

Код круга Google Maps V3

 // Draw search circle
search_circle = new google.maps.Circle;
search_circle.setCenter(target_latlng);
search_circle.setRadius(travel_time * average_speed);
search_circle.setMap(map);
  

введите описание изображения здесь

Ответ №1:

Здесь вам нужно помнить одну вещь: круг Google показывает расстояние между двумя точками на сфере (земле), поэтому ваш круг не выглядит одинаково.

Вы не указали, какова цель круга в вашем примере, но из фрагмента кода я могу сказать, что это как-то связано с расстояниями в пути. В этом случае вам может быть интересно изучить :

Формула Haversine

или

Сферический закон косинусов

Также эта страница могла бы предоставить вам некоторую информацию о том, как настроить вашу формулу, чтобы получить правильную форму круга.

Редактировать: Для корректности Земля не является идеальной сферой, но для всех практических целей предполагается, что это так.

Ответ №2:

Для вычисления расстояний на сфере вы можете использовать геометрическую библиотеку Google Maps. Чтобы запросить библиотеку, используйте:

 <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometryamp;sensor=true_or_false"></script>
  

Тогда ваш JS-код circle был бы:

 num_theta_step = 365;               // number of steps
for(theta = 0; theta < 365; theta  = 365/num_theta_step) {                        
   var circle_latlng = google.maps.geometry.spherical.computeOffset(target_latlng, R, theta);
   var marker = new google.maps.Marker({
      position: circle_latlng,
      map: map,
      title:"Hello World!"
   });
}