2009-12-28 4 views
5

Google의 매핑 API에 대한 광범위한 연구와 재미 학습을 마친 후 디지털 안테나 맵 애플리케이션을 구축하고 있습니다. 이 시점에서 프로젝트 계획의 다음 단계는 사용자 주소의 입력을 기반으로 디지털 TV 방송국을 찾는 Google지도의 메모리 맵 복제를 만드는 것입니다. 그래서이 수학 코드를 사용하여 Google지도의 중심과 latitude/lng 점을 데이터베이스 결과 집합에서 공식화합니다.매핑 수학과 자바 스크립트

내 질문은 : 베어링을 각도로 표시하려면 어떻게해야합니까?

1.21 
1.10 
1.10 
1.10 
1.10 
2.62 
-0.29 
-1.17 
0.12 
3.04 

var y = Math.sin(longitude-center.lng()) * Math.cos(latitude); 
var x = Math.cos(center.lat())*Math.sin(latitude) - Math.sin(center.lat())*Math.cos(latitude)*Math.cos(longitude-center.lng()); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

내 계산에서 누락 뭔가있는 것 같다 :

이 코드는 다음과 같은 배열 결과 집합을 반환하는 수학이다. db 테이블은 지구의 상위 서쪽 사분면을 나타 내기 위해 음수로 경도 값을 보유합니다.

내 수학을 완료하기위한 어떤 제안이라도 백만의 누에를 구할 수 있습니다. 이미 1 조를 연소했습니다.

var radLat1 = center.lat() * Math.PI/180; 
var radLat2 = latitude * Math.PI/180; 
var radLng1 = center.lng() * Math.PI/180; 
var radLng2 = longitude * Math.PI/180; 

var y = Math.sin(radLng2- radLng1) * Math.cos(radLng2); 
var x = Math.cos(radLat1)*Math.sin(radLat2) -  Math.sin(radLat1)*Math.cos(radLat2)*Math.cos(radLng2-radLng1); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

URL 테스트 프로젝트 사이트 : click here

페이지의 하단에있는 사업부가 반환 된 결과 집합은 라디안 제안에도 촬영

, 나는 자바 스크립트 코드를 수정 한 2 개의 배열에서 첫 번째는 거리를 잡고 두 번째는 베어링 측정을 유지합니다.

+0

로버트 예, FCC의 사이트에서 보았다 저스틴 – rjsteward

답변

6

Google지도는 좌표를도 단위로 반환합니다. 물론 삼각 함수는 라디안을 기대합니다. 그래서 먼저 라디안으로 변환 할 수 있습니다 : the Haversine formula을하려고처럼

function deg_to_rad(degrees) { 
    return degrees * Math.PI/180; 
} 

귀하의 수학 보인다. 나는 당신이 코드를 검사 할 수 있도록 자바 스크립트 구현 here을 발견했다.

결과를 the FCC's DTV engineering maps과 비교하여 확인할 수 있습니다.

+0

감사합니다. 감사. – rjsteward

3

세스 (Seth)의 도움을 받고 이른 아침 뇌를 사용합니다 (예, 저는 중년이며 아침에 더 똑똑합니다).

내가 공부하고 있었고 세스가 언급 한 here에 대한 링크가 핵심입니다. 블로그 항목에서 js 파일의 코드를 사용하고 oo javascript 개념의 코드를 인라인으로 실행되는 스크립트로 변형 시켰습니다.

var lat1 = center.lat(); 
var lon1 = center.lng(); 
var lat2 = latitude; 
var lon2 = longitude; 

lat1 = lat1 * Math.PI/180; 
lat2 = lat2 * Math.PI/180; 
var dLon = (lon2-lon1) * Math.PI/180; 
var y = Math.sin(dLon) * Math.cos(lat2); 
var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon); 

var bearing = Math.atan2(y, x) * 180/Math.PI; 
    if (bearing < 0){ 
      bearing = bearing + 360; 
    } 

    bearing = bearing.toFixed(0); 

stationDistance.push(distance.toFixed(1)); 
stationBearing.push(bearing); 

나는 데모 구글지도 here를 실행하고 있습니다 :

이 내 솔루션입니다.

감사합니다. 이제 고객의 고객에게 맞는 제품을 this url에 추천 할 논리 코드로 이동할 수 있습니다.

유래 바위 ....

+0

삼각법 바위! – Seth

+0

감사합니다. 이것이 바로 베어링에 도움이되었습니다. –

+0

http://martinhansen.no/2011/04/14/getting-the-bearingheading-betweet-2-coordinates/ –