2010-03-05 18 views
10

Bir web hizmetinden adresler dizisi alan bir uygulama yaptım ve bunları haritalamak istiyorum. Apple'ın bunu sadece bir ters Coğrafi kodlayıcı dahil olmak üzere MapKit'te bıraktığını biliyorum. Bu soruna en iyi şekilde yaklaşmanın ne olduğunu merak ediyordum. İnternet servisi? Google Haritalar API'sı (API anahtarları nasıl çalışır?)? CloudMade?iPhone Geliştiricileri İçin En İyi Geocoding Hizmeti

Hangi hizmetin en hızlı, kullanımı en kolay ve en ucuz olduğu hakkındaki düşünceleriniz nelerdir (umarım ücretsiz)?

cevap

5

Google Maps API sürüm 3 artık bir API anahtarı gerektirmiyor.

bunu okuyun: http://blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/

+0

Çok teşekkürler! Yeni versiyonun çıkıp çıkmadığını asla bilemezdim.Nihayet iyi bir çözüm buldum – conradev

+0

Tek bir istekte birden fazla adresin coğrafi olarak kodlanması var mıdır? Haritaya ihtiyacım olan bir yerim var ve yerlerin sayısı elliler.Ondan sonra "çok fazla sorgu" hatası alıyorum onuncu bir – conradev

+0

etrafında emin değilim. Birden çok istekle ilgili olarak Google Haritalar API'sını keşfetmeniz gerektiğini düşünüyorum. Sonraki talepleri kabul edeceğinden şüpheliyim. Ancak, birden çok adresi kabul etmek için bir yöntemi olabilir. Sorununuz için Google ile iletişime geçmenizi öneririz. –

1

Google Haritalar'ı kullanarak Ters Coğrafi Kodlama için "Restful WebService" kullanıyorum ve koordinatları aldıktan sonra bunları daha sonra başvurmak üzere SQLite'de saklıyorum. Hizmet, daha sonra iPhone'da ayrıştırdığım bir JSON dizesini döndürür. gibi

şey:

// 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 ama oluşturmakta olduğunuz uygulama ücretsiz olacak eğer, o zaman ücretsiz olarak Google Maps API kullanabilirsiniz inanıyoruz. Günlük olarak 15.000 coğrafi kodlama isteği ile sınırlıdır, ancak dokümanlara göre bu API anahtarına değil IP'ye bağlıdır. Bir API anahtarı immediately alabilirsiniz - onay gerekli değil. (Uygulamanız ücretsiz olarak kullanılabilir durumda değilse, o zaman Google Haritalar Premier'e kaydolmanız gerekir.)

GMaps artık REST tabanlı geocoding API over HTTP (eskiden Javascript API'sini kullanmak zorunda kaldınız) iPhone'da ağrı. Ekstra veriye ihtiyacınız varsa, TouchJSON kullanarak ayrıştırmanın önemsiz olduğu JSON'da geri dönebilir ya da ihtiyacınız olan tek şey varsa daha kolay olacak olan CSV. Yani, yalnızca NSON/CSV'yi bir NSURLConnection veya ASIHTTPRequest kullanarak API'dan getirecek ve Point değişkenini coordinate özelliği olarak döndürecek ve MapView'inizi gerektiği gibi oluşturacak olan MKAnnotation protocol ile uyumlu bir nesne oluşturabilirsiniz.

+0

mobil taşıyıcılar ile tamamen doğru değil Yani, genellikle ağ geçidi/nihayet getiriyor vekiller * kullanmak * Aynı IP ** binlerce kullanıcı için, nerede olursam, Paris, Fransa, Google sınırları üzerinden geçiyor gibi kalabalık şehirlerde ... ve 5 civarında, birçok kullanıcı için 503 hataları ... –

0

hem Google ve Yahoo göre, kendi coğrafi kodlama hizmetleri için izin VERMEYİN "ileride kullanmak üzere depolama." Yanlış anlaşılmadıkça, sorgu sonuçlarını herhangi bir veritabanı biçiminde depolayamazsınız. Aksi takdirde, sadece Google’a (şimdi günde 50.000 istek) gerçekten kolay olurdu. Bu

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

"CLGeocoder sınıf için

4

Kullanım Elma Geocoding API koordinat (enlem ve boylam olarak belirtilir) ve bunun kullanıcı dostu temsil koordinat. Bir kullanıcı arasında dönüştürmek için hizmet vermektedir Koordinatın dostça temsili, tipik olarak, verilen yere karşılık gelen sokak, şehir, eyalet ve ülke bilgisinden oluşur, ancak aynı zamanda ilgili bir ilgi noktası, yer işaretleri veya diğer tanımlayıcı bilgiler içerebilir. Belirtilen koordinat valı için yer işareti bilgilerini aramak için ağ tabanlı bir hizmet ile çalışan atış nesnesi ue.

Bir coğrafi kod nesnesi kullanmak için, onu oluşturun ve isteği başlatmak için ileri veya geri coğrafi kodlama yöntemlerinden birini çağırın. Ters coğrafi kodlama istekleri, enlem ve boylam değerlerini alır ve kullanıcı tarafından okunabilen bir adres bulur. Forward-geocoding istekleri, kullanıcı tarafından okunabilir bir adres alır ve ilgili enlem ve boylam değerini bulur. İleriye doğru coğrafi kodlama istekleri, söz konusu yerdeki ilgi alanı veya bina gibi belirtilen yerle ilgili ek bilgiler de verebilir. Her iki istek türü için, sonuçlar bir CLPlacemark nesnesi kullanılarak döndürülür.Sağlanan bilgiler Birden çok olası yerleri vermiştir eğer ileriye coğrafi kodlama istekleri durumunda, birden işareti nesneleri döndürülebilir."

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

İpucu için teşekkürler, '3rd party' Google Maps yaklaşımı yerine CLGeoCoder kullanmak daha rahat hissediyorum! – Raffael

İlgili konular