在计算距离并仔细检查距离后,如何获得纬度和经度?

问题描述

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

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);

                
            }

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

这是我到目前为止所做的:

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,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();
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...