【发布时间】:2017-08-04 02:08:00
【问题描述】:
我需要发现哪个是主列表中更接近的项目,其项目具有纬度和经度。我遇到了这个脚本,我用来返回以公里为单位的距离......但返回的项目不是更近的项目......有人知道它为什么不起作用吗?非常感谢! 我正在使用 xamarin 表单 c# 我的英语不太好,抱歉。
public static Loja EncontraLojaPerto(List<Loja> lojaList, double lat1,
double lon1, char unit)
{
Loja lojaProxima = new Loja();
double distAuxiliar = -1;
foreach (var item in lojaList)
{
double lat2 = Convert.ToDouble(item.latitude.Replace('.',','));
double lon2 = Convert.ToDouble(item.longitude.Replace('.',','));
Func<double, double> deg2Rad = (x) => (x * (Math.PI / 180));
Func<double, double> rad2Deg = (x) => (x / Math.PI * 180.0);
var theta = lon1 - lon2;
var dist = Math.Sin(deg2Rad(lat1)) * Math.Sin(deg2Rad(lat2)) + Math.Cos(deg2Rad(lat1)) * Math.Cos(deg2Rad(lat2)) * Math.Cos(deg2Rad(theta));
dist = Math.Acos(dist);
dist = rad2Deg(dist);
dist = dist * 60 * 1.1515;
switch (unit)
{
case 'K':
dist = dist * 1.609344;
break;
case 'N':
dist = dist * 0.8684;
break;
}
//verificando se essa pode ser a distância menor
int retval = distAuxiliar.CompareTo(dist);
if (retval > 0 || distAuxiliar.Equals(-1))
{
distAuxiliar = dist;
lojaProxima = item;
}
}
return lojaProxima;
}
我一直在寻找答案并找到了答案:在这里,在巴西,我们使用 ',' 而不是 '.'和 '。'而不是','......然后,我的网络服务给我一个带有'。'的数字当我需要一个','时,我用.Replace替换'。',但是,当我使用它时,数字会改变它的字符数量(如果它是123.4300现在它是123,43)......当我使用了替换,数字有效,但 foreach 从未完成,我从未到达“返回”行...
【问题讨论】:
-
您是否尝试过调试它?对于列表中的每个项目,验证距离计算是否返回正确的值。然后,一旦您验证了这一点,找出距离比较返回错误项目的原因。
-
我现在正在做..
-
我使用了其他的 iternet 代码,结果总是相同的错误项目...我认为这种方法有一些我不知道的地方
-
或者我的实现(if)是错误的]
-
尝试改用 Double.Parse - 它可以让您更好地控制格式和语言环境
标签: c# xamarin geolocation distance