2011-07-26 5 views
5

두 위도/경도 점 사이의 중간 점을 찾아야합니다.C# 두 위도/경도의 중간 점 찾기

나는 두 지점 사이에지도를 배치하려고하는데, 그 지점을 찾으려고해야합니다.

내가 발견 한 다른 예제에서이 함수를 작성 했으므로 작동하지 않는 것 같습니다.

public static void midPoint(double lat1, double lon1, double lat2, double lon2, out double lat3_OUT, out double lon3_OUT) 
    { 
     //http:// stackoverflow.com/questions/4656802/midpoint-between-two-latitude-and-longitude 
     double dLon = DistanceAlgorithm.Radians(lon2 - lon1); 

     //convert to radians 
     lat1 = DistanceAlgorithm.Radians(lat1); 
     lat2 = DistanceAlgorithm.Radians(lat2); 
     lon1 = DistanceAlgorithm.Radians(lon1); 

     double Bx = Math.Cos(lat2) * Math.Cos(dLon); 
     double By = Math.Cos(lat2) * Math.Sin(dLon); 
     double lat3 = Math.Atan2(Math.Sin(lat1) + Math.Sin(lat2), Math.Sqrt((Math.Cos(lat1) + Bx) * (Math.Cos(lat1) + Bx) + By * By)); 
     double lon3 = lon1 + Math.Atan2(By, Math.Cos(lat1) + Bx); 

     lat3_OUT = lat3; 
     lon3_OUT = lon3; 
    } 

다음은 출력 예입니다.

lat1 37.7977008 
lat2 37.798392  
lon1 -122.1637914  
lon2 -122.161464  
lat3 0.65970036060147585 
lon3 -2.1321400763480485 

Lat3 및 Lon3을 참조하십시오.

감사합니다.

답변

2

당신의 출력이, 그것은 라디안에있는 것을 제외하고 당신이 기대는을 학위 올바른지 나타 납니까? 예상 출력을 충족 시키려면 라디안에서 도로 변환해야 할 수도 있습니다.

-(2.1321400763480485 radians) = -122.162628 degrees 
0.65970036060147585 radians = 37.7980464 degrees 

Jon Martin과 IanDotKelly가 언급 한 대원 알고리즘을 이미 사용하고있는 것 같습니다.

+0

그건 의미가 있습니다. 여전히 솔루션과 같이 보이지만 유닛 문제입니다. 결과는 라디안으로 표시되며 영업 이익은 예상 수준입니다. – Chris

+0

이것입니다! ... 나는 Radian에서 Degres로 변환했고 완벽하게 작동했습니다! ... 감사합니다! – dmd733

0

나는 큰 원 거리를 의미한다고 생각합니다.

만약 그렇다면,이 질문은 here입니다. 위대한 용어를 모를 경우에는 찾기가 어려울 지 모르지만.

+0

OP가 이미 원 - 원 거리 알고리즘을 사용하고있는 것 같습니다. – Chris