私はビングマップを持っていて、2つのポイント:Point1、Point2と私はこれらの2つのポイント間の距離を計算したいですか?それは可能ですか?そして、point1とpoint2の間、およびpoint2の近くのパスの3分の2に円を配置したい場合、どうすればそれを作成できますか?
4 に答える
Microsoft には、Haversine 式を使用するGeoCoordinate.GetDistanceTo Methodがあります。
私にとって、他の実装では、距離が小さすぎると NaN が返されます。組み込み関数で問題が発生したことはまだありません。
この問題を解決する方法については、 HaversineまたはVincentyの公式を参照してください。
次のコードは、haversines の方法を使用して距離を取得します。
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
}
ここで情報が載っている良いサイトを見つけることができます。
より正確な結果が必要な場合や、いくつかの数学操作 (円を回転楕円体/投影図に変換するなど) を実行したい場合は、(再) 投影および計算操作に地理ライブラリを使用できます。DotSpatialまたはSharpMapとそこにあるサンプル/ユニットテスト/ソースを見てください...これはあなたの問題を解決するのに役立つかもしれません.
とにかく、測地線距離と方位がわかっている場合は、結果のターゲット位置 (円の中心) がどこにあるかを計算することもできます。たとえば、Vincenty のアルゴリズムの「直接問題」を参照してください。Silverlight/.net の便利なアルゴリズムの実装もいくつかあります。
質問をGIS Stackexchangeに投稿することも検討してください。彼らはあなたのような GIS 関連の問題について議論します。ポイントからの緯度経度 x マイルを計算するための質問(既に全体の距離を知っているので) を参照するか、距離の計算に関する議論を参照してください。この質問は、特定の距離で線上に点を描く方法の問題に関連しており、ほぼ同じです (中心と半径が必要なため)。
もう 1 つのオプションは、Bing マップも表示できるArcGIS API for Silverlightを使用することです。これはオープン ソースであり、そこで必要なことを学ぶことができます (または、SDK に既に存在するため、それらを使用するだけです)。サンプル内の「ユーティリティの例」タブを参照してください。
すでに述べたように、このページを見て、問題に関する詳細情報を入手してください。そこには、指定された距離と開始点からの方位によって目的地を計算するための数式、Javascript コード、および Excel のサンプルがあります (見出しを参照)。
コードを C# の世界に "変換" することは難しくありません。