Проверьте, содержит ли прямоугольник координат CLLocationCoordinate2D

Я использую специальный Map SDK для iOS и добавляю на карту пользовательскую форму. Форма всегда разного размера, и это может быть круг, квадрат, звезда и т. д. Суть в том, что она всегда динамична при каждом запуске приложения.

После добавления этой фигуры на карту я могу получить доступ к ее свойству overlayBounds, которое описывается как: 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.


person user3344977    schedule 11.09.2015    source источник


Ответы (1)


Ваше описание кажется намного сложнее, чем сам вопрос. Итак, если я правильно понимаю, ваш вопрос заключается только в том, чтобы проверить, находится ли точка внутри прямоугольника, описанного в overlayBounds.

У вас есть только 2 точки, так как этого достаточно, чтобы определить прямоугольник. Таким образом, NE и SW — это две точки, в которых две другие принимаются как (NE.x, SE.y) и (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);

Что-то вроде этого должно помочь.

Теперь, если вы пытаетесь проверить, находится ли точка внутри самой формы, это действительно зависит от того, как определена ваша форма. Если это какая-то форма аналитического представления, вы можете найти какой-то метод, уже созданный для вас, чтобы вернуть значение, но если нет, то ваш лучший способ, скорее всего, будет рисовать фигуру на каком-то холсте и проверять цвет холста в нужном вам месте. чек. В любом случае более серьезной проблемой здесь является преобразование точки и прямоугольника в декартову систему координат. Если это так, просто добавьте комментарий, и я постараюсь помочь вам в этом...

person Matic Oblak    schedule 12.09.2015