距離によって既知の位置からの点の座標を求めると軸受用Geoalgorithm
-
22-08-2019 - |
質問
私はGoogleが境界を示すパスオーバーレイで地図を表示するには、静的APIをマッピングし使用するようにしたいと思います。
静的APIは、ポリゴンをサポートしていないので、私はパスを使用して境界線を描画することでこれを回避するつもりAFAICTます。
は、私は間の直線(パス)を描画する点を決定する必要があり、これを行うために、私は地理的位置(即ちWGS84座標)を既知点から所定の方位及び距離を返すアルゴリズムをしたいと思います。
誰もがこのようなアルゴリズムに私を指すことができます。好ましくはC#で、他の言語では許容される?
解決 5
この(ここを発見avform.htm#LL
の):の点は{緯度、経度}は点1からTC半径上にdの距離である場合:の
lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
IF (cos(lat)=0)
lon=lon1 // endpoint a pole
ELSE
lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
ENDIF
ラジアルはラジアンあるいは度になりますか?
の編集の
ラジアン=度* PI / 180
他のヒント
Iではなくラジアンの入力/出力として度を使用して、実装され、C#でそれをテスト
static readonly double FullCircleDegrees = 360d;
static readonly double HalfCircleDegrees = FullCircleDegrees / 2d;
static readonly double DegreesToRadians = Math.PI / HalfCircleDegrees;
static readonly double RadiansToDegrees = 1 / DegreesToRadians;
public LatLng GetPointGivenRadialAndDistance(LatLng center, double radius, double azimuth)
{
var lat1 = center.Lat * DegreesToRadians;
var lng1 = center.Lng * DegreesToRadians;
var lat = Math.Asin( (Math.Sin(lat1) * Math.Cos(radius)) + Math.Cos(lat1) * Math.Sin(radius) * Math.Cos(azimuth * DegreesToRadians));
var lng = 0d;
if (Math.Cos(lat) == 0)
{
lng = lng1;
}
else
{
lng = ((lng1 + Math.PI - Math.Asin(Math.Sin(azimuth * DegreesToRadians) * Math.Sin(radius) / Math.Cos(lat1))) % (2 * Math.PI)) - Math.PI;
}
return new LatLng(lat * RadiansToDegrees, lng * RadiansToDegrees);
}
あなたはKMLファイルにポリゴンを描画し、その後のGoogleマップでKMLを表示することができます。
<のhref = "http://maps.google.com/maps?f=q&hl=en&q=http%3A%2F%2Fkmlscribe.googlepages.com%2FSamplesInMaps.kml&ie=UTF8&ll=36.879621,-53.4375&spn= 103.772916,208.476563&Z = 2&OM = 1" のrel = "nofollowをnoreferrer Googleのキャンパス">ここでは(GoogleのKMLサンプルから)にマップするGoogleでKMLののチェック " - コンテンツ内のポリゴン" のセクションをます。
(と思う)で、私が知っているすべての言語で、ラジアン。私はあなたのコード例がないWGS84に、球をもとに、あなたに座標を与えていると考えていることに注意してください。ここでは、座標システム間で変換するための Javaコードがにいます。