2014-09-05 5 views
1

Я пытаюсь получить среднюю точку линии (линия в прямоугольном многоугольнике), но следующий код не дает мне правильного ответа. Число слишком мало. Может ли кто-нибудь помочь?Как найти среднюю точку строки на карте google

код модифицируется здесь: http://www.yourhomenow.com/house/haversine.html

var p1 = myRectPolygon.getPath().getAt(0); 
var p2 = myRectPolygon.getPath().getAt(3); 

var lat1 = p1.lat().toRad(); 
var lat2 = p2.lat().toRad(); 
var lon1 = p1.lng().toRad(); 
var dLon = (p2.lng() - p1.lng()).toRad(); 


var Bx = Math.cos(lat2) * Math.cos(dLon); 
var By = Math.cos(lat2) * Math.sin(dLon); 
lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2), 
        Math.sqrt((Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By)); 
lon3 = lon1.toRad() + Math.atan2(By, Math.cos(lat1) + Bx); 

var mid_latLng = new google.maps.LatLng(lat3, lon3); 

ответ

1

Вы конвертируете lon1 в Råd дважды:

Вы заявили:

var lon1 = p1.lng().toRad(); 

А потом вы делаете:

lon3 = lon1.toRad() + Math.atan2(By, Math.cos(lat1) + Bx); 

попробуйте изменить его

lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx); 

Я также нашел это решение (Using the Haversine Formula in Javascript), который указывает, что делать что-то вроде следующего может не работать правильно

(lon2-lon1).toRad(); 

и вместо этого сделать что-то вроде

var dLonDeg = lon2-lon1 
var dlon = dLonDeg.toRad() 
0

Вы можете использовать geometry library для вычисления средней точки:

var p1 = myRectPolygon.getPath().getAt(0); 
var p2 = myRectPolygon.getPath().getAt(3); 

var mid_latLng = google.maps.geometry.spherical.computeOffset(p1, 
    google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/2, 
    google.maps.geometry.spherical.computeHeading(p1, p2)); 

proof of concept fiddle