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