Как отобразить выпадающую информацию, отсортированную по местоположению GPS в Objective C на iPhone - PullRequest
2 голосов
/ 12 мая 2009

Есть ли простой способ отобразить отсортированный выпадающий список на iPhone по «ближайшему к текущему местоположению»?

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

Это будет быстро? Или мне придется предварительно сортировать (перед тем, как выбрать выпадающий список) в фоновом режиме?

Ответы [ 3 ]

2 голосов
/ 12 мая 2009

Вы можете отсортировать массив, используя одно из сообщений sortedArrayUsing ... для вашего массива местоположений.

Предполагая, что каждое из ваших местоположений представлено с помощью CLLocation, вы можете использовать 'getDistanceFrom:' CLLocation с текущим местоположением в качестве аргумента как части сортировки.

1 голос
/ 12 мая 2009

Зависит от количества городов в вашей базе данных. Если это много, то вы можете использовать методы предварительного сокращения, чтобы ограничить область поиска, например, использовать предварительно рассчитанные «зоны» или ограничить поиск «городами размером X или больше» и т. Д. Поскольку города не перемещаются и численность и численность не меняются внезапно, подумайте, как вы можете выполнить как можно больше предварительных расчетов.

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

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

В связанной заметке ниже приведен список формул для расчета расстояний между геоинформациями: http://www.movable -type.co.uk / scripts / latlong.html

1 голос
/ 12 мая 2009

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

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

О, и если у вас есть точки данных в NSArray, посмотрите на sortedArrayUsingSelector: и sortedArrayUsingFunction: context:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...