簡體   English   中英

檢查坐標矩形是否包含CLLocationCoordinate2D

[英]Check if coordinate rectangle contains CLLocationCoordinate2D

我正在使用iOS專用的Map SDK,並且正在向地圖添加自定義形狀。 形狀始終是不同的大小,可以是圓形,正方形,星形等。要點是,只要運行應用程序,它就始終是動態的。

在將此形狀添加到地圖后,我可以訪問它的名為overlayBounds的屬性, This property contains the smallest rectangle that completely encompasses the overlay.描述為: This property contains the smallest rectangle that completely encompasses the overlay.

overlay是我要添加到地圖的形狀。

每當CLLocationManager生成位置更新時,我都要檢查並查看最新坐標是否在該形狀的overlayBounds屬性內。

訪問overlayBounds ,它具有ne屬性和sw屬性。 這兩個都是CLLocationCoordinate2D's

因此,如果overlayBounds由兩個CLLocationCoordinate2D's組成,並且CLLocationManager始終在更新用戶的位置並為我提供最新的坐標( CLLocationCoordinate2D ),如何檢查最近的坐標是否在overlayBounds

經過大量研究后,我僅發現一個可行的解決方案: https : //stackoverflow.com/a/30434618/3344977

但是這個答案假設我的overlayBounds屬性只有4個坐標( CLLocationCoordinate2D's ),而我只有2個。

您的描述似乎比實際問題難得多。 因此,如果我正確地獲得了此信息,那么您的問題只是檢查該點是否位於overlayBounds描述的矩形內。

您只有2個點,因為它足以定義一個矩形。 因此NESW是接收其他兩個點的兩個點,分別是(NE.x, SE.y)(SE.x, NE.y) 這樣,您可以使用鏈接的答案,也可以簡單地構造MKMapRect ,其來源為NE ,大小為SE-NE 因此,在這種情況下,您可以簡單地使用MKMapRectMake然后使用MKMapRectContainsPoint 但是,當按SE-NE計算尺寸時,請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);

這樣的事情應該可以解決問題。

現在,如果您要檢查點是否在形狀本身內部,則實際上取決於形狀的定義方式。 如果這是某種形式的解析表示形式,則可能會發現已經為您返回值的某種方法,但是如果沒有,那么最好的拍攝方法很可能是將形狀繪制到某些畫布上並在您需要的位置檢查畫布的顏色校驗。 無論如何,這里最大的問題是將點和矩形轉換為笛卡爾坐標系。 如果是這樣,那么只需添加一條評論,我會盡力幫助您...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM