マッピングを行うために C# スクリプトに取り組んでいます。私は、緯度と経度、距離、および回転角度が与えられる場所で作業している関数を 1 つ持っています。
次に、渡された距離の幅を持つ長方形を作成します (長さは他の何かに依存します)。この正方形は、その中心に緯度と経度の点があり、0 から任意の角度で回転します-360.
渡される double の距離は、フィートまたはメートルのいずれかであり、単位は isMetric ブール値を使用して決定されます。
私が信じている問題は、私が使用している数式に関係していると思われます。これは、4 つの点から正方形を描画すると、正方形のサイズが大きすぎるためです。同様に、角度 0.0 を渡すと、回転角度が 45 度に設定されるようです。
これが私がこれまでに持っているものです:
パラメータ: 緯度、経度 (10 進形式)、(倍) 距離、(倍) 角度
double diagonal = Math.Sqrt(Math.Pow((distance / 2), 2) * 2); //a^2 + b^2 = d^2
if (isMetric) //Convert meters to km.
{
diagonal = diagonal / 1000;
}
else //Convert feet to km.
{
diagonal = diagonal * 0.0003048;
}
MessageBox.Show("Diagonal: " + diagonal, "DEBUG"); //DEBUG
double pt1_lat = latDistance(diagonal * Math.Sin(angle), latitude);
double pt1_long = longDistance(diagonal * Math.Cos(angle), latitude, longitude);
double pt2_lat = latDistance(diagonal * Math.Cos(angle), latitude);
double pt2_long = longDistance(-diagonal * Math.Sin(angle), latitude, longitude);
double pt3_lat = latDistance(-diagonal * Math.Sin(angle), latitude);
double pt3_long = longDistance(-diagonal * Math.Cos(angle), latitude, longitude);
double pt4_lat = latDistance(-diagonal * Math.Cos(angle), latitude);
double pt4_long = longDistance(diagonal * Math.Sin(angle), latitude, longitude);
残りの方法は次のとおりです。
private double latDistance(double distance, double latitude)
{
return latitude + degToRad(distance / EARTH_RADIUS);
}
private double longDistance(double distance, double latitude, double longitude)
{
return longitude + degToRad(distance / EARTH_RADIUS / Math.Cos(latitude));
}
private double degToRad(double degrees)
{
return (degrees * Math.PI) / 180;
}
public double radToDeg(double radians)
{
return (180.0 * radians) / Math.PI;
}
どんな助けでも大歓迎です:)