Programmatisch/erstellen Sie Manuell eine MKPlacemark/CLPlacemark

Problem

Habe ich eine Reihe von Ortsmarken (Land, Stadt, usw.) und einer Lat/Lon-pair-Mädchen. Ich möchte dies verwenden, um erstellen Sie eine MKPlacemark Objekt.


Diskussion

Scheint es, dass diese Klasse kann nur erstellt werden, indem

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary

deren docs Staat Staaten

Können Sie erstellen Ortsmarke Objekte manuell für Entitäten, für die Sie bereits haben-Adress-Informationen, wie Kontakte im Adressbuch. Erstellen einer Ortsmarke Objekt explizit vermeidet die Notwendigkeit, für die Abfrage der reverse geocoder-Objekt für die gleichen Informationen.

Perfekt! Ich habe bereits reverse-geocodiert und vermeiden wollen, dass eine solche Abfrage. Was kann ich hinzufügen, um das Wörterbuch?

Für eine Liste von Zeichenfolgen, die Sie verwenden können, für die die Schlüssel dieses dictionary finden Sie in der "Address-Eigenschaft" Konstanten in ABPerson Referenz. Alle Schlüssel sollten auf der obersten Ebene des Wörterbuchs.

Zeigt die entsprechenden Schlüssel

const ABPropertyID kABPersonAddressProperty;
const CFStringRef kABPersonAddressStreetKey;
const CFStringRef kABPersonAddressCityKey;
const CFStringRef kABPersonAddressStateKey;
const CFStringRef kABPersonAddressZIPKey;
const CFStringRef kABPersonAddressCountryKey;
const CFStringRef kABPersonAddressCountryCodeKey;

Dieses fällt ziemlich kurz, die Basis-Eigenschaften für ein MKPlacemark:

Zugriff auf die Standortdaten

  • location-Eigenschaft

Zugriff auf die Ortsmarke Attribute

  • name-Eigenschaft
  • addressDictionary Eigenschaft
  • ISOcountryCode Eigenschaft
  • Land Eigentum
  • postalCode Eigenschaft
  • administrativeArea Eigenschaft
  • subAdministrativeArea Eigenschaft
  • Lokalität Immobilien
  • subLocality Eigenschaft
  • Durchgangsstraße Eigenschaft
  • subThoroughfare Eigenschaft
  • region-Eigenschaft

Zugriff Auf Geographische Informationen

  • inlandWater Eigenschaft
  • Ozean-Eigenschaft

Zugriff Auf Landmark Informationen

  • areasOfInterest Eigenschaft

Glücklicherweise die aktuelle header-Datei für MKPlacemark ist Superklasse, sagt etwas über die Adresse dictionary:

//address dictionary properties

@property (nonatomic, readonly) NSString *name; //eg. Apple Inc.

@property (nonatomic, readonly) NSString *thoroughfare; //street address, eg. 1 Infinite Loop

@property (nonatomic, readonly) NSString *subThoroughfare; //eg. 1

@property (nonatomic, readonly) NSString *locality; //city, eg. Cupertino

@property (nonatomic, readonly) NSString *subLocality; //neighborhood, common name, eg. Mission District

@property (nonatomic, readonly) NSString *administrativeArea; //state, eg. CA

@property (nonatomic, readonly) NSString *subAdministrativeArea; //county, eg. Santa Clara

@property (nonatomic, readonly) NSString *postalCode; //zip code, eg. 95014

@property (nonatomic, readonly) NSString *ISOcountryCode; //eg. US

@property (nonatomic, readonly) NSString *country; //eg. United States

@property (nonatomic, readonly) NSString *inlandWater; //eg. Lake Tahoe

@property (nonatomic, readonly) NSString *ocean; //eg. Pacific Ocean

@property (nonatomic, readonly) NSArray *areasOfInterest; //eg. Golden Gate Park

So, ich erstelle ein Wörterbuch und dann pass es so:

return [[[MKPlacemark alloc] initWithCoordinate:aLocation.coordinate addressDictionary:addressDictionary] autorelease];

Leider, nach allem, Selbstbeobachtung zeigt, dass die Informationen nicht haften:

NSLog(@"placemark %@ from %@", placemark, addressDictionary);
NSLog(@"has %@", placemark.thoroughfare);

Drucke

2012-01-31 20:14:22.545 [15450:1403] placemark <+___,-___> +/- 0.00m from {
administrativeArea = __;
postalCode = _____;
subAdministrativeArea = ___;
subThoroughfare = __;
thoroughfare = "_____";
}
2012-01-31 20:14:22.545[15450:1403] has (null)

Abschluss

So, ich bin am Ende hier. Hat jemand herausgefunden, wie man erstellen Sie Ihre eigenen MKPlacemark? Danke.

  • Ihre addressDictionary sieht leer. Was ist, wenn Sie NSLog es vor der return-Anweisung? (Fwiw, ich in der Regel don ' T alloc, init, autorelease und wieder alle in der gleichen Anweisung. Es ist einfacher zu Debuggen, wenn Sie brechen Sie in separaten Anweisungen.)
  • Erneut den Blick auf die debug-Ausgabe - das Wörterbuch ist definitiv zeigt 5 Werte (ich unkenntlich gemacht, die Werte). Wie man Werte in eine MKPlacemark ist das zentrale problem. Danke!
  • Ah, ich sehe. Hast du auch schwärzen die Ortsmarkierung? Wie sieht das in der debugger vor zurück, das von der Methode?
  • Nur die gps-Koordinaten. Was sinnvoll ist sollte klar sein: eine Ortsmarke erstellt. Das Wörterbuch hat Werte. Die daraus resultierende Ortsmarke ist leer. Vielleicht das Wörterbuch braucht spezielle Tasten? Oder gibt es eine andere Methode zur Erstellung der Ortsmarke?
  • Wow, ich war GERADE versucht zu tun, die exakt das gleiche und laufen in das gleiche problem! In meinem Fall habe ich eine BSKmlResult (mit freundlicher Genehmigung von der ausgezeichneten BSForwardGeocoder, als ich noch Unterstützung iOS 4, sonst würd ich verwenden CLGeocoder). Ich machte eine Klasse Erweiterung auf MKPlacemark und versuchte dabei im wesentlichen die gleiche Sache, aber ohne Erfolg. 🙁
InformationsquelleAutor SG1 | 2012-02-01
Schreibe einen Kommentar