计算bing贴图中两点之间的距离

时间:2012-04-16 14:08:59

标签: c#-4.0 silverlight-4.0 bing-maps

我有一张bing地图,还有两点: Point1,Point2和我想计算这两点之间的距离?那可能吗? 如果我想在point1和point2之间以及point2附近的路径的三分之一处放一个圆圈......我该怎么做呢?

4 个答案:

答案 0 :(得分:12)

Microsoft有GeoCoordinate.GetDistanceTo Method,它使用Haversine公式。

对我来说,其他实现返回的NaN距离太小。我还没有遇到内置函数的任何问题。

答案 1 :(得分:10)

请参阅Haversine或更好的Vincenty公式,了解如何解决此问题。

以下代码使用hasrsines方法来获取距离:

public double GetDistanceBetweenPoints(double lat1, double long1, double lat2, double long2)
    {
        double distance = 0;

        double dLat = (lat2 - lat1) / 180* Math.PI;
        double dLong = (long2 - long1) / 180 * Math.PI;

        double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2)
                    + Math.Cos(lat1 / 180* Math.PI) * Math.Cos(lat2 / 180* Math.PI) 
                    * Math.Sin(dLong/2) * Math.Sin(dLong/2);
        double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

        //Calculate radius of earth
        // For this you can assume any of the two points.
        double radiusE = 6378135; // Equatorial radius, in metres
        double radiusP = 6356750; // Polar Radius

        //Numerator part of function
        double nr = Math.Pow(radiusE * radiusP * Math.Cos(lat1 / 180 * Math.PI), 2);
        //Denominator part of the function
        double dr = Math.Pow(radiusE * Math.Cos(lat1 / 180 * Math.PI), 2)
                        + Math.Pow(radiusP * Math.Sin(lat1 / 180 * Math.PI), 2);
        double radius = Math.Sqrt(nr / dr);

        //Calculate distance in meters.
        distance = radius * c;
        return distance; // distance in meters
    }

您可以找到一个包含信息here的好网站。

答案 2 :(得分:2)

如果您需要更准确的结果或想要进行一些数学运算(例如将圆形转换为sperioid /投影),您可以使用地理库进行(重新)投影和计算操作。看一下DotSpatialSharpMap以及那里的样本/单位测试/来源......这可能有助于解决您的问题。

无论如何,如果您知道geodesic distancebearing,您还可以计算出结果目标位置(圆圈的中心)的位置,例如请参阅Vincenty's算法的“直接问题”。以下是silverlight / .net

的一些useful algorithm implementations

您也可以考虑在GIS Stackexchange发布您的问题。他们讨论像你这样的GIS相关问题。请查看calculating lat long x-miles from point的问题(因为您现在已经了解了整个距离)或查看有关distance calculations的讨论。这个问题与问题how to draw a point on a line in a given distance有关,几乎相同(因为你需要一个中心和半径)。

另一种选择是使用ArcGIS API for Silverlight,它也可以显示Bing地图。它是开源的,你可以在那里学习你需要的东西(或者只是使用它们,因为它们已经存在于SDK中)。请参阅示例中的“实用程序示例”选项卡。

答案 3 :(得分:0)

正如我已经提到的:看看this page以获取有关您问题的更多信息。在那里你会找到一个公式,Javascript代码和一个Excel样本,用于按给定距离计算目标点并从起点开始(参见那里的标题)。

将代码“转换”为c#-world应该并不困难。