2016-07-22 13 views
2

So arbeite ich an einem Projekt, das viele Anwendungen enthält, die Anmerkungen um eine Karte überall legen. Die Anmerkung, (die ein benutzerdefiniertes Bild mit einem viel größeren Kreis Bereich) erscheint auf dem Bildschirm und im Idealfall würde ich für einen Benutzer mag sein:Wie man einen Benutzer erkennt, ist im Bereich einer Anmerkung

  1. benachrichtigen, wenn sie im Bereich von einer Kommentierung sind und
  2. nicht erlaubt werden, eine andere Anmerkung im Bereich eines anderen zu sperren, wenn die kreisförmigen Stifte durch überlappen, sagen wir, mehr als 25%

ich denke, das eine ziemlich einzigartige Frage und sollte für jemanden Spaß um mit zu helfen, also viel Spaß! Danke an alle!

+1

Als allgemeine Zeiger, schauen nach oben GeoFencing – LuigiPower

+1

Oder, genauer gesagt, mit MapKit, siehe [Geografische Regionen überwachen] (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW2) im _Location and Maps Programming Guide._ Hinweis, ich glaube, es gibt eine endliche Anzahl von Regionen, die Sie gleichzeitig überwachen können, aber es ist ein möglicher Ansatz. Aber die richtige Lösung, wie sie von anderen diskutiert wird, ist wahrscheinlich, nur "CLLocation" 'distanceFromLocation' Methode zu verwenden. – Rob

+0

Danke, dass du in @Rob geläutet hast. Ich schaue mir das jetzt an! – Ethan

Antwort

4

können Sie prüfen, den Abstand von jeder Anmerkung durch Verfolgen eine Linie zwischen ihnen

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 

Diese Methode misst den Abstand zwischen den beiden Standorten verwenden, die die Krümmung der Erde folgt. Der sich ergebende Bogen ist eine glatte Kurve und berücksichtigt keine spezifischen Höhenänderungen zwischen den beiden Standorten.

Weitere Details finden Link

+0

@ user154248 Aktualisiert – AtWork

+0

Hmmm das kann funktionieren. Das Problem ist, dass alle Annotationskoordinaten von einem Server kommen. Dies würde bedeuten, dass es keine konstante zweite Menge von Koordinaten geben würde, um die Entfernung mit zu messen. Ich frage mich, ob dies in irgendeine Art von Scanner angepasst werden kann, um nach Anmerkungen nur auf dem Bildschirm zu suchen. – Ethan

+0

Sie können einen Kreis mit einem beliebigen Bereich zeichnen, den Sie zuerst festlegen möchten, markieren Sie den Mittelpunkt und jedes Mal, wenn Sie ein neues Standortobjekt vom Server erhalten, übergeben Sie es in der oben genannten Methode mit Ihrem zentralen Standortobjekt und Serverstandortobjekt. _ ** CLLocationDistance distance = [centerInitialLocation distanceFromLocation: serverLocation]; ** _ – AtWork

1

Try this:

let location = CLLocation(latitude: 1, longitude: 1)//Or user's location 
let distance = location.distance(from: anotherLocation) 

Edit:

Wie in den Kommentaren erwähnt, erhalten Sie einen Punkt gleich weit schaffen wollte. Ich schlage vor, manuell zu tun:

Subtrahieren Sie den Standort der Annotation vom Standort des Benutzers. Dann addieren Sie Ihre Entfernung zurück zu der ursprünglichen. Zum Beispiel:

der Standort des Nutzers = (1, 1)

Die Lage des Annotations = (3, 2)

Höhenunterschied wären 2

Horizontal Unterschied sei 1

Dann

:

(3 + 2, 2 + 1)

Ihr Ergebnis: (5, 3)

Jetzt würden Sie zwei Punkte haben (die Sie gerade erstellt haben und die Position des Benutzers) an jedem Ende mit einem Mittelpunkt (original Anmerkung)

+0

Ich denke, Ort und Entfernung müssten var sein, und ich frage mich, ob ich den Abstand einer Annotation innerhalb der Standortkoordinaten zuzüglich einer Toleranz mit einem bestimmten wiederverwendbaren Bezeichner einstellen kann? Könnte sein? – Ethan

+0

Sie brauchen sie nicht zu vars. Dies wird jedes Mal aufgerufen, wenn Sie den Speicherort aktualisieren (locationDidUpdate-Methode). Ich habe meine Frage basierend auf dem neuen Punkt bearbeitet. – penatheboss

Verwandte Themen