Exemplo n.º 1
0
        private Tuple <int, double> searchLinkComponent(List <LinkData> linkList, double latitude, double longitude)
        {
            double minDist = 255;


            int    tempNum    = 0;
            string tempLinkId = null;
            double offset     = 0;

            //各リンクセグメントに対して
            for (int i = 0; i < linkList.Count; i++)
            {
                TwoDimensionalVector linkStartEdge = new TwoDimensionalVector(linkList[i].START_LAT, linkList[i].START_LONG);
                TwoDimensionalVector linkEndEdge   = new TwoDimensionalVector(linkList[i].END_LAT, linkList[i].END_LONG);
                TwoDimensionalVector GPSPoint      = new TwoDimensionalVector(latitude, longitude);

                //線分内の最近傍点を探す
                TwoDimensionalVector matchedPoint = TwoDimensionalVector.nearest(linkStartEdge, linkEndEdge, GPSPoint);

                //最近傍点との距離
                double tempDist = TwoDimensionalVector.distance(GPSPoint, matchedPoint);


                //リンク集合の中での距離最小を探す
                if (tempDist < minDist)
                {
                    minDist = tempDist;

                    tempNum    = linkList[i].NUM;
                    tempLinkId = linkList[i].LINK_ID;

                    offset = HubenyDistanceCalculator.CalcHubenyFormula(linkList[i].START_LAT, linkList[i].START_LONG, latitude, longitude);
                }
            }

            return(new Tuple <int, double>(tempNum, offset));
        }
 public static double CalcDistance(double latitudeFirst, double longitudeFirst, double latitudeSecond, double longitudeSecond)
 {
     //ヒュベニの公式で距離を計算
     return(HubenyDistanceCalculator.CalcHubenyFormula(latitudeFirst, longitudeFirst, latitudeSecond, longitudeSecond));
 }