Как Построить Сектор На Google Maps?

Задача была построить сектор на картах Google (GM).

Насколько я знаю, это можно сделать только с помощью прямых линий.

http://maps.forum.nu/ здесь есть примеры как построить круг, но мне немного не подходит. Так как окружность строится по следующему принципу: координаты произвольной точки на окружности вычисляются по формулам:

var PGlat = (PGradius/3963)*r2d; // using 3963 miles as earth's radius var PGlng = PGlat/Math.cos(lat*d2r);

где r2d и d2r — перевод радиан в градусы и наоборот соответственно.

lat — широта центра круга.

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

После этого от полученной точки проводим 360 прямых с определенным шагом.



var PGsides = 360; var PGstart = (PGsides%2 == 1) ? 2/PGsides : 1/PGsides; PGstart = (0.5 - PGstart) * Math.PI; for (var i=-1; i < PGsides; i++) { var theta = 2*i*Math.PI/PGsides + PGstart; PGx = lng + (PGlng * Math.cos(theta)); PGy = lat + (PGlat * Math.sin(theta)); PGpoints.push(new GPoint(PGx,PGy)); }

Есть еще такой вариант построения круга, но я немного не разобрался в его расчетах, но делается все по тому же принципу.



if (circleUnits == 'KM') { var d = circleRadius/6378.8; // radians } else { //miles var d = circleRadius/3963.189; // radians } var lat1 = (PI/180)* center.lat(); // radians var lng1 = (PI/180)* center.lng(); // radians for (var a = 0 ; a < 361 ; a++ ) { var tc = (PI/180)*a; var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)); var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y)); var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI))); circlePoints.push(point); bounds.extend(point); } if (d < 1.5678565720686044) { circle = new GPolygon(circlePoints, '#000000', 2, 1, '#000000', 0.25); } else { circle = new GPolygon(circlePoints, '#000000', 2, 1); } map.addOverlay(circle);

Вернемся к построению сектора.

Входные значения: lat, lng — координаты центра; г — радиус; азимут — азимут центра сектора (медианы вписанного треугольника) в градусах; ширина — угол сектора.

Основная проблема — координаты первой и последней точек сектора.

Теоретически эти координаты получаются по следующим формулам:

PGlat = lat + (r * Math.cos( (azimuth - width/2 ))); PGlon = lng + (r* Math.sin( (azimuth - width/2 ))); PGlat = lat + (r * Math.cos( (azimuth + width/2 ))); PGlon = lng + (r* Math.sin( (azimuth + width/2 )));

Но r — радиус в милях — мешает. По идее его надо трансформировать, так как мы должны получить значение в градусах, но что это за трансформация я понять не могу.

Может кто-то сможет помочь или где-то видел построение сектора на GM. Буду признателен за любую помощь по этому вопросу.

Теги: #google карты #Чулан

Вместе с данным постом часто просматривают: