2010-03-05 4 views
10

J'ai fait une application qui obtient un tableau d'adresses à partir d'un service Web et je veux les cartographier. Je sais qu'Apple a laissé ceci dehors dans MapKit, en incluant seulement un Geocoder inversé. Je me demandais quelle était la meilleure façon d'aborder ce problème. Service Web? API Google Maps (Comment fonctionnent les clés API?)? CloudMade?Meilleur service de géocodage pour les développeurs iPhone

Quelle est votre opinion sur quel service est le plus rapide, le plus facile à utiliser et le moins cher (j'espère gratuit)?

Répondre

5

L'API Google Maps version 3 ne nécessite plus de clé API.

Lire ceci: http://blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/

+0

Merci beaucoup! Je n'ai jamais su que la nouvelle version est sortie.J'ai enfin trouvé une bonne solution – conradev

+0

Y at-il un moyen de géocoder plusieurs adresses en une seule requête? J'ai un tableau d'endroits dont j'ai besoin pour mapper, et le nombre de places peut monter dans les années 50. Je continue d'obtenir l'erreur pour "trop ​​de requêtes" après le e autour de la dixième – conradev

+0

Je ne suis pas sûr à ce sujet. Je pense que vous devez explorer l'API Google Maps concernant plusieurs demandes. Je doute qu'ils acceptent les demandes subséquentes. Mais, ils peuvent avoir une méthode pour accepter plusieurs adresses. Je suggère de contacter Google pour votre problème. –

1

J'utilise un "WebService reposant" pour le géocodage inverse en utilisant Google Maps et une fois que je reçois les coordonnées, je les stocke dans SQLite pour référence ultérieure. Le service renvoie une chaîne JSON que j'analyse plus tard dans l'iPhone.

Quelque chose comme:

// Initialize call to REST Webservice 
- (void) initCall 
{ 
    // Service 
    RESTClient *client = [[[RESTClient alloc] initWithDelegate:self] autorelease]; 
    NSString *serviceHost = @"http://www.site.com/service/maps"; 
    [client get:serviceHost]; 
    [serviceHost release]; 
} 

- (void)RESTRequestDidSucceed:(RESTClient*)sender 
{ 

     // Search 
    NSString *data = [[[NSString alloc] init] autorelease]; 
    data = [[NSString alloc] initWithData:sender.receivedData encoding:NSUTF8StringEncoding]; 

    // Now you have the DATA in and NSString which you can pass as an argument to a method 
    // something like 

} 
5

IANAL, mais si l'application vous construisez sera libre, alors je crois que vous pouvez utiliser l'API Google Maps gratuitement. Il est limité à 15 000 demandes de géocodage par jour, mais selon les docs, c'est lié à l'IP, pas à la clé de l'API. Vous pouvez obtenir une clé API immediately - aucune approbation requise. (Si votre application ne sera pas disponible gratuitement, vous devrez vous inscrire à Google Maps Premier.)

GMaps dispose désormais d'un geocoding API over HTTP basé sur REST (auparavant, vous deviez utiliser leur API JavaScript, qui était un douleur sur iPhone). Il peut revenir en JSON, ce qui est trivial à analyser en utilisant TouchJSON si vous avez besoin des données supplémentaires, ou CSV, ce qui sera encore plus facile si tout ce dont vous avez besoin est lat/lon. Ainsi, vous pouvez simplement créer un objet qui se conforme au MKAnnotation protocol qui va chercher le JSON/CSV de l'API en utilisant un NSURLConnection ou ASIHTTPRequest, l'analyser, et retourner la variable Point comme propriété coordinate et construire votre MapView comme requis.

+0

Ce n'est pas tout à fait vrai avec les opérateurs mobiles, ils utilisent souvent la passerelle/proxy qui apporte enfin le * * même IP ** pour des milliers d'utilisateurs, qui dans les zones urbaines très peuplées comme Paris, France, dépasse les limites de Google ... et vers 17h, 503 erreurs pour de nombreux utilisateurs ... –

0

Selon Google et Yahoo, leurs services de géocodage respectifs ne permettent pas de « stockage pour une utilisation future. » Sauf si j'ai mal compris, vous ne pouvez pas stocker les résultats de la requête dans une quelconque forme de base de données. Sinon, il serait vraiment facile de simplement Google (maintenant 50 000 demandes par jour).

4

utiliser l'API d'Apple géocodage pour cette

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/UsingGeocoders/UsingGeocoders.html

« La classe CLGeocoder fournit des services de conversion entre une coordonnée (spécifiée en latitude et longitude) et la représentation conviviale de cette coordination. Un utilisateur La représentation conviviale de la coordonnée comprend généralement les informations sur la rue, la ville, l'état et le pays correspondant à l'emplacement donné, mais elle peut également contenir un point d'intérêt pertinent, des repères ou d'autres informations d'identification. Objet de prise de vue fonctionnant avec un service basé sur le réseau pour rechercher des informations de repère pour les coordonnées spécifiées ue

Pour utiliser un objet géocodeur, créez-le et appelez l'une de ses méthodes de géocodage direct ou inverse pour lancer la requête. Les demandes de géocodage inverse prennent une latitude et une longitude et trouvent une adresse lisible par l'utilisateur. Les requêtes de géocodage vers l'avant prennent une adresse lisible par l'utilisateur et trouvent la valeur de latitude et de longitude correspondante. Les demandes de géocodage vers l'avant peuvent également renvoyer des informations supplémentaires sur l'emplacement spécifié, tel qu'un point d'intérêt ou un bâtiment à cet emplacement. Pour les deux types de demande, les résultats sont renvoyés à l'aide d'un objet CLPlacemark.Dans le cas des demandes avant-géocodage, plusieurs objets placemark peuvent être retournés si les informations fournies a donné plusieurs emplacements possibles. »

CLGeoCoder geocoder = [[CLGeocoder alloc] init]; 
[geocoder geocodeAddressString:@"1 Infinite Loop" 
    completionHandler:^(NSArray* placemarks, NSError* error){ 
     for (CLPlacemark* aPlacemark in placemarks) 
     { 
      // Process the placemark. 
     } 
}]; 
+0

Merci pour l'indice, je me sens beaucoup plus à l'aise pour utiliser CLGeoCoder au lieu de l'approche Google Maps '3ème partie'! – Raffael

Questions connexes