计算距离并检查距离后,如何访问纬度和经度



我有一个点列表,称为交集。此列表的顺序如下:

latitudePoint1,longitudePoint1,latitudePoint2,longitudePoint2,latitudePoint3,longitudePoint3,...

使得同一点的纬度和经度具有不同的索引。我计算这些点到一个固定点的距离,然后我需要检查其中哪一个点最接近该固定点(硬编码(。我试图用下面的评论更好地解释一切:

List<double> distanciasOcorrenciaIntersecao = new List<double>();
for (int i = 0; i <= intersect.Count(); i++)
{
//get latitude
double intLat = intersect[2 * i];
//get longitude
double intLong = intersect[2 * i + 1];
//calculates the distance between the fixed point and the point of the list intersect
var distancia = GetDistance(FixedLatitude, FixedLongitude, intLat.ToString(), 
intLong.ToString());
//Add the latitude and longitude and long as the distance calulated to another list 
distanciasOcorrenciaIntersecao.Add(intLat);
distanciasOcorrenciaIntersecao.Add(intLong);
distanciasOcorrenciaIntersecao.Add(distancia);

}

现在我需要检查添加到列表distanceiasOcorrenciaIntersecao中的哪一个距离更接近固定点,然后返回与该距离相关的纬度和经度。

以下是我迄今为止所做的:

for (int j = 0; j <= distanciasOcorrenciaIntersecao.Count(); j++) 
{
// I need to at least have two point in the intersect list, 
// meaning  4 elements, latitude1,longitude1,latitude2,longitude2
if (intersect.Count() >= 4)
{
if (distanciasOcorrenciaIntersecao[3 * j + 2]     
< distanciasOcorrenciaIntersecao[3 * j + 5])
{
//....?
}
}
}
}

我不确定这是否是解决这个问题的最佳方法,但如果有人知道更好的方法,请帮忙。谢谢

List<double> distanciasOcorrenciaIntersecao = new List<double>();

for (int i = 0; i <= intersect.Count(); i++)
{

double intLat = intersect[2 * i];
double intLong = intersect[2 * i + 1];

var distancia = GetDistance(ocorrencia.Latitude, ocorrencia.Longitude, intLat.ToString(), intLong.ToString());

distanciasOcorrenciaIntersecao.Add(intLat);
distanciasOcorrenciaIntersecao.Add(intLong);
distanciasOcorrenciaIntersecao.Add(distancia);

}
double minimum = 0;
int index = 0;
int j = 2;
for ( j = 2; j <= distanciasOcorrenciaIntersecao.Count()-3; j+=3) 
{

if (intersect.Count() >= 4)
{
if (j == 2)
{
if (distanciasOcorrenciaIntersecao[j] < distanciasOcorrenciaIntersecao[j + 3])
{
minimum = distanciasOcorrenciaIntersecao[j];
index = j;
}
else
{
minimum = distanciasOcorrenciaIntersecao[j + 3];
index = j + 3;
}
}
else
{
if (minimum > distanciasOcorrenciaIntersecao[j + 3])
{
minimum = distanciasOcorrenciaIntersecao[j + 3];
index = j + 3;
}
}
}
}

您可以使用ValueTuple和LINQ来简化以下操作:

var distanciasOcorrenciaIntersecao = new List<(double lat, double lon, double dist)>();
if (intersect.Count() > 2) {
for (int i = 0; i < intersect.Count(); i += 2) {
//get latitude
double intLat = intersect[i];
//get longitude
double intLong = intersect[i + 1];
//calculates the distance between the fixed point and the point of the list intersect
var distancia = GetDistance(FixedLatitude, FixedLongitude, intLat.ToString(), intLong.ToString());
//Add the latitude and longitude and long as the distance calculated to another list
distanciasOcorrenciaIntersecao.Add((intLat, intLong, distancia));
}

var (closestLat, closestLon, closestDist) = distanciasOcorrenciaIntersecao.OrderBy(doi => doi.dist).First();
}

最新更新