Как реализовать собственный инструмент поиска чертежей, используемый в приложении Realtor для iPad? - PullRequest
5 голосов
/ 24 мая 2011

Приложение Realtor для iPad проделало очень хорошую работу по внедрению пользовательского инструмента рисования поверх mapkit, который они используют для запроса области для домов.Я знаком с mapkit и связанными с ним классами, но я не знаю, как я мог сделать какой-нибудь нестандартный рисунок пальцем и заставить его преобразовать в геопространственный запрос.Как это сделать?

1 Ответ

1 голос
/ 14 марта 2013

Я не уверен, как далеко вы проделали это с этим, но ваш основной алгоритм должен выглядеть так:

  • Нарисуйте многоугольник поверх вашей карты, затем переведитекоординаты этого многоугольника для «сопоставления» координат.Для этого вам, вероятно, потребуется прослушать жесты в представлении, отличном от экземпляра MKMapKit.Из-за моих ограниченных знаний об обработке сенсорных событий в MapKit вам может потребоваться наложение другого прозрачного вида на карту, когда вы хотите рисовать, поэтому сенсорные события не будут проходить в MapKit (если это имеет смысл).Вы используете палец для сжатия, масштабирования, панорамирования, и вам не понадобятся эти функции, если вы пытаетесь рисовать.В этом представлении вы нарисуете фигуру, обводящую палец пользователя, а затем переведете точки, нарисованные в точки карты.

    Документы показывают, что вы можете преобразовать точки экрана в точки карты, используя метод convertPoint:toCoordinateFromView: в MKMapView.,

    Проверьте эту ссылку для получения информации о том, что: Проблемы с преобразованием пользовательских координат MapKit в экранные координаты

    В этом посте содержится ссылка, которая может помочь вам при рисовании многоугольника: Чтобы нарисовать многоугольник на карте Google с помощью каркаса MapKit

  • После того, как вы нарисовали свой многоугольник, вы захотите «пространственно» запросить данные.Вы можете сделать это несколькими способами.Локально на устройстве или через веб-сервис возможны два варианта.Если ваши данные являются локальными для устройства, вам придется выполнить картографическую математику на вашем устройстве.Вам также необходимо убедиться, что ваши точечные данные (X, Y) находятся в той же проекции и координатном пространстве, что и информация вашего полигона.Математика пересечения полигонов относительно проста, когда ваши проекции и системы координат совпадают.

    Вот ссылка, которая может помочь вам с математикой.

    https://math.stackexchange.com/questions/237/how-do-you-determine-if-a-point-sits-inside-a-polygon

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

Это довольно высокий уровень, я знаю, но это должно быть все, что вам нужно сделать.

Другое соображение: если ваши данные пространственно включены с помощью пространственного объекта, скомпилированного для SQLite на вашем устройстве или SQL Server Spatial на вашем сервере.Вы должны иметь возможность запрашивать данные, используя эти данные многоугольника.Однако вам придется правильно отформатировать запрос.

Наконец, я бы посоветовал вам взглянуть на ESRI SDK для iOS.ESRI предоставляет инструменты для рисования и черчения из коробки.Его не слишком сложно использовать, но есть один недостаток: вам нужно изучить новый API:

http://resources.arcgis.com/en/communities/runtime-ios-sdk/

...