지저귀다! 새로운 위치를 계산하는 그런 기능을
public class LatLonAlt
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Altitude { get; set; }
}
: - 솔루션 ... 우선 간단한 클래스
을 발견 그런
public static HelpersModel.LatLonAlt CalculateDerivedPosition(HelpersModel.LatLonAlt source, double range, double bearing)
{
double latA = Convert.ToDouble(source.Latitude) * (Math.PI/180);
double lonA = Convert.ToDouble(source.Longitude) * (Math.PI/180);
double angularDistance = range/6371;
double trueCourse = bearing * (Math.PI/180);
double lat = Math.Asin(
Math.Sin(latA) * Math.Cos(angularDistance) +
Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse));
double dlon = Math.Atan2(
Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA),
Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat));
double lon = ((lonA + dlon + Math.PI) % (Math.PI * 2)) - Math.PI;
HelpersModel.LatLonAlt results = new HelpersModel.LatLonAlt();
results.Latitude = lat * (180/Math.PI);
results.Longitude = lon * (180/Math.PI);
results.Altitude = source.Altitude;
return results;
}
을, 그리고 내가이 더 잘 할 수있는 것을 알고있다. 하지만 지금은 작동합니다 ...
병마개와 똑바로 넓이를 작동시키는 2 가지 기능 :
public static HelpersModel.LatLonAlt FindBottomLeftExtent(HelpersModel.LatLonAlt startpoint)
{
// first move left
HelpersModel.LatLonAlt movedleft = CalculateDerivedPosition(startpoint, 72.42, 270);
// move down
HelpersModel.LatLonAlt moveddown = CalculateDerivedPosition(movedleft, 72.42, 180);
return moveddown;
}
public static HelpersModel.LatLonAlt FindTopRightExtent(HelpersModel.LatLonAlt startpoint)
{
// first move right
HelpersModel.LatLonAlt movedright = CalculateDerivedPosition(startpoint, 72.42, 90);
// move up
HelpersModel.LatLonAlt movedup = CalculateDerivedPosition(movedright, 72.42, 0);
return movedup;
}
HTH! Trev
특정 계산을 여러 번 반복하고 있기 때문에, 당신이 유용 명확성을 위해, 그들에 대한 상수를 정의 할 찾을 수 있습니다 - 예를 들어 DegreesToRadians''와'인 Math.PI/180'를 교체합니다. –
@AdrianWragg Im on it! –