私はアンドロイドに精通していません。ここでは、C#の方法は、2つの場所のペア間の距離を計算する。距離が半径2マイル以内の場合は、そのステーションを選択します。
はい、5000x200 = 1,000,000までループする必要がありますが、かなり高速です。
私は助けてくれることを願っています。
decimal distance = CalculateDistance(stationLatitude, stationLongitude, routeLatitude, routeLongitude);
private static double ToRadian(double val)
{
return (Math.PI/180) * val;
}
private static double ToXAxis(decimal lat, decimal lng)
{
return (Math.Cos(4 * (4 * Math.Atan2(1, 5) - Math.Atan2(1, 239))/180 * (double)lat) *
Math.Cos(4 * (4 * Math.Atan2(1, 5) - Math.Atan2(1, 239))/180 * (double)lng));
}
private static double ToYAxis(decimal lat, decimal lng)
{
return (Math.Cos(4 * (4 * Math.Atan2(1, 5) - Math.Atan2(1, 239))/180 * (double)lat) *
Math.Sin(4 * (4 * Math.Atan2(1, 5) - Math.Atan2(1, 239))/180 * (double)lng));
}
private static double ToZAxis(decimal lat)
{
return Math.Sin(4 * (4 * Math.Atan2(1, 5) - Math.Atan2(1, 239))/180 * (double)lat);
}
private static decimal CalculateDistance(decimal lat1, decimal lng1, decimal lat2, decimal lng2)
{
double cntXAxis = Math.Cos(ToRadian((double) lat1))*Math.Cos(ToRadian((double) lng1));
double cntYAxis = Math.Cos(ToRadian((double) lat1))*Math.Sin(ToRadian((double) lng1));
double cntZAxis = Math.Sin(ToRadian((double) lat1));
return (decimal) (3961*Math.Acos(ToXAxis(lat2, lng2)*cntXAxis + ToYAxis(lat2, lng2)*cntYAxis + ToZAxis(lat2)*cntZAxis));
}
出典
2012-01-16 20:25:04
Win