MKCoordinateSpanを作成する必要があります。これは約500メートルです。
MKCoordinateSpanコンストラクターに渡す値を計算するにはどうすればよいですか?
プログラミング(Obj-C、.Net)言語での回答は問題ありません。
もう1つの方法は、MapKitのMKCoordinateRegionMakeWithDistance
関数を使用することです。
MKCoordinateRegion rgn = MKCoordinateRegionMakeWithDistance(
CLLocationCoordinate2DMake(someLatitude, someLongitude), 500, 500);
MKCoordinateSpan
はrgn.span
にあります。
高い精度が必要な場合を除いて、近似を使用するとはるかに簡単になります。最初の問題は、500メートルを表す緯度の割合を見つけることです。緯度はどの場所でも一定で、約111 kmなので、簡単です。したがって、500メートルは.0045度の緯度です。
経度の長さはあなたがどこにいるかによって変わるので、それからそれは難しくなります。それはで近似することができます
ここで、アルファは地球の赤道半径、6,378,137 km、b/aは0.99664719(すべてのGPSデバイスで使用されているWGC84回転楕円体モデルで使用されている定数)であり、 ここで、phiは緯度です。
幸運にも南緯37.783度のメルボルンにいると想像してみてください。ここでは北か南かは関係ありません。ベータは37.6899であることがわかり、残りの部分は、縦方向の角度が88kmになるように解決されます。したがって、500メートルは.0057度です。
メルボルンの結果-MKCoordinateSpan melbourne500MeterSpan = MKCoordinateSpanMake(.0045, .0057);
あなたはあなたの答えとあなたのコードをチェックすることができます このオンライン計算機で
wiki記事 経度については、これについてさらに詳しく説明しています(そしてここに画像のソースがあります)
コード:
#define EARTH_EQUATORIAL_RADIUS (6378137.0)
#define WGS84_CONSTANT (0.99664719)
#define degreesToRadians(x) (M_PI * (x) / 180.0)
// accepts decimal degrees. Convert from HMS first if that's what you have
double spanOfMetersAtDegreeLongitude(double degrees, double meters) {
double tanDegrees = tanf(degreesToRadians(degrees));
double beta = tanDegrees * WGS84_CONSTANT;
double lengthOfDegree = cos(atan(beta)) * EARTH_EQUATORIAL_RADIUS * M_PI / 180.0;
double measuresInDegreeLength = lengthOfDegree / meters;
return 1.0 / measuresInDegreeLength;
}