2012-04-16 2 views
2

Приложение My iPad извлекает географические объекты из базы данных. В этой базе данных некоторые объекты имеют одинаковую долготу/широту. Как следствие, в MkMapView я добавляю несколько MKPinAnnotation с тем же Lat/Long. К сожалению, только один отображается, я полагаю, это последний, который я добавил.Как отобразить несколько MKPinAnnotation с той же широтой/долготой?

Как я могу использовать только один объект MKPinAnnotation (для данной координаты), и когда пользователь нажимает на него, я покажу MKPinAnnotation для каждого объекта, использующего одни и те же координаты? Что-то похожее на то, что сделано Google Maps/Google Earth, вы нажимаете на главный Pin, а затем на несколько Pin.

Любая помощь будет оценена по достоинству.

Sébastien.

ответ

4

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

В любом случае, я бы предложил изменить координаты так, чтобы их можно было видеть отдельно. Что вы можете сделать, так это найти все контакты, которые очень близки друг к другу, используя метод distanceFromLocation: CLLocation. Как только вы обнаружите, что есть несколько контактов, которые являются небольшим расстоянием (скажем < 0,01) друг от друга, вы можете изменить их координаты, прежде чем добавлять их на карту. Вы можете заставить их сформировать небольшой круг вокруг фактической точной координат, причем угол вокруг круга определяется количеством в этом кластере (например, для 4 контактов, поместите их на 0, 90, 180, 270 градусов). Или вы можете изменить широту только на очень небольшую величину, чтобы штыри отображались друг на друга в вертикальной линии.

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

После того, как контакты были разделены таким образом, пользователю будет легко нажать на отдельные контакты.

Я не совсем уверен, как Google Maps/Google Earth справится с этой проблемой - не могли бы вы описать ее или предоставить скриншот? Или укажите некоторые условия поиска, которые могут привести к его возникновению. Но, надеюсь, вышеизложенные идеи дадут вам что-то попробовать.

+0

Ваша идея хорошая, и ее можно применить к моей проблеме, особенно к кругу. Благодаря! – sebastien

1

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

Я создал полезный элемент управления для группировки соседних контактов (также для контактов с одинаковой координатой) на MKMapView, так как у меня были те же проблемы пару раз. Он называется OCMapView. Он может объединить аннотацию для вас, но вам придется реализовывать анимацию на пользовательском прикосновении самостоятельно.