1

iOS 用の特別な Map SDK を使用しており、マップにカスタム シェイプを追加しています。形状は常に異なるサイズであり、円、四角、星などの可能性があります。ポイントは、アプリが実行されるたびに常に動的であるということです.

このシェイプをマップに追加した後、次のようにoverlayBounds記述されているプロパティにアクセスできます。This property contains the smallest rectangle that completely encompasses the overlay.

overlay、マップに追加する私の形状です。

によって位置の更新が生成されるたびに、CLLocationManager最新の座標がoverlayBounds形状のそのプロパティ内にあるかどうかを確認したいと思います。

にアクセスするとoverlayBoundsneプロパティとプロパティがありswます。これらはどちらもあくまでCLLocationCoordinate2D's

overlayBoundsが 2 つで構成されていてCLLocationCoordinate2D'sCLLocationManagerが常にユーザーの位置を更新し、最新の座標 ( CLLocationCoordinate2D) を提供している場合、その最新の座標が 内にあるかどうかを確認するにはどうすればよいoverlayBoundsですか?

多くの調査を行った後、私はこれがうまくいく可能性のある解決策を1つだけ見つけました: https://stackoverflow.com/a/30434618/3344977

overlayBoundsしかし、その答えは、私のプロパティには4つの座標( )があると仮定していますCLLocationCoordinate2D's.2つしかありません.

4

1 に答える 1

2

あなたの説明は、実際の質問よりもはるかに難しいようです。したがって、これを正しく取得している場合、質問は、ポイントが で説明されている長方形の内側にあるかどうかを確認することだけですoverlayBounds

長方形を定義するのに十分なので、2 つの点しかありません。したがってNE、 とSWは、他の 2 つが(NE.x, SE.y)ととして受信される 2 つのポイント(SE.x, NE.y)です。これにより、リンクした回答を使用するかMKMapRect、原点がどこにありNE、サイズがどこにあるかを単純に構築できますSE-NE。したがって、この場合、単純に を使用MKMapRectMakeしてから使用することができますMKMapRectContainsPoint。ただし、サイズを計算するときは注意してSE-NEください。負の結果が生じる可能性があるため、サイズに度数を追加する必要があります。つまり、180 からx(緯度) と 360 からy(経度) です...

MKMapRect rect = MKMapRectMake(NE.latitude, NE.longitude, SE.latitude-NE.latitude, SE.longitude-NE.longitude);
if(rect.width < .0) rect.width += 180.0;
if(rect.height < .0) rect.height += 360.0;
BOOL pointInside = MKMapRectContainsPoint(rect, pointOnMap);

このようなものがうまくいくはずです。

ポイントが形状自体の内側にあるかどうかを確認しようとしている場合、実際には形状がどのように定義されているかに依存します。これが何らかの形式の分析表現である場合、値を返すために既に作成されたメソッドが見つかるかもしれませんが、そうでない場合は、キャンバスに形状を描画し、必要な場所でキャンバスの色を確認するのが最善の方法です。小切手。いずれにせよ、ここでのより大きな問題は、点と四角形をデカルト座標系に変換することです。その場合は、コメントを追加してください。私はそれについてお手伝いします...

于 2015-09-12T06:50:49.933 に答える