14

Given that the mapkit doesn't provide forward geocoding functionality today, can anyone provide help on how I can i use a search bar to return a latitude and longitude coordinate from a user inputted address today. If someone can provide sample code that would be great.

7 Answers7

32

iOS 5 now allows for forward Geocoding:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/UsingGeocoders/UsingGeocoders.html#//apple_ref/doc/uid/TP40009497-CH4-SW5

I hope this helps!

syedfa
  • 2,801
  • 1
  • 41
  • 74
  • 2
    With iOS6 this will probably be the only usable solution (besides possibly Yahoo) as I doubt Google will be happy with you overlaying Google geocoding data on an Apple map... – Kendall Helmstetter Gelner Jun 19 '12 at 19:17
  • @KendallHelmstetterGelner I think Google would be fine with this, but Apple?...perhaps not. – DataGraham Sep 10 '12 at 13:25
  • 1
    It's Google's TOS that prevents it. https://developers.google.com/maps/documentation/geocoding/#Limits (no Google geocoding data displayed on non-Google maps). Apple doesn't care where you get the data for things you overlay on a map. Now that Apple is not using Google for map data there are no restrictions on how you can use MapKit. – Kendall Helmstetter Gelner Sep 10 '12 at 19:04
26

I've created a forward geocoding API for Google's geocoding server. Check out my blogpost: http://blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/

brainjam
  • 18,863
  • 8
  • 57
  • 82
Merrimack
  • 1,736
  • 14
  • 12
  • Needs to be updated to the new Google Geocoding API (for instance, no API key is needed now). Besides that, does great job. Thanks @Merrimack. http://code.google.com/apis/maps/documentation/geocoding/ – DenTheMan Jun 07 '11 at 20:14
  • Thanks DenTheMan, however the API does support both V2 and V3 (latest with no API key). Has been that way since the first release. – Merrimack Jun 10 '11 at 09:26
  • Link in answer is dead - *404 Not Found*. – Pang Mar 12 '18 at 09:13
15

I have created SVGeocoder, a simple forward and reverse geocoder class for iOS. It uses the Google Geocoding API as well and returns an MKPlacemark.

This is how you geocode an address string:

NSString *addressString = @"3245 St-Denis, Montreal"
SVGeocoder *geocodeRequest = [[SVGeocoder alloc] initWithAddress:addressString];
[geocodeRequest setDelegate:self];
[geocodeRequest startAsynchronous];

And you reverse geocode an CLLocationCoordinate2D object like this:

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(45.54181, -73.62928);
SVGeocoder *rGeocoderRequest = [[SVGeocoder alloc] initWithCoordinate:coordinate];
[rGeocoderRequest setDelegate:self];
[rGeocoderRequest startAsynchronous];

The SVGeocoderDelegate offers these 2 methods:

- (void)geocoder:(SVGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark;
- (void)geocoder:(SVGeocoder *)geocoder didFailWithError:(NSError *)error;
samvermette
  • 40,269
  • 27
  • 112
  • 144
3

I have done some small work on forward and reverse geocoding using CLGeocoder in iOS5 CoreLocation framework on github hope it help you. https://github.com/Mangesh20/geocoding

mangesh
  • 574
  • 4
  • 16
2

It's a known issue with the current version of MapKit. File a bugreport and dupe #6628720 so they make fixing it a priority.

In the meantime, there are forward Geocoding APIs from Google Maps, via Yahoo Placemaker, or Cloudmade.

Ramin
  • 13,343
  • 3
  • 33
  • 35
2

There is also a framework here: https://github.com/tylerhall/CoreGeoLocation

Comment from docs: An Objective GeoCoder and Reverse Geocoder wrapping around Yahoo's Geocoding services or Google's Geo APIs primarily.

RefuX
  • 490
  • 5
  • 11
1

There is no such functionality in MapKit. The best you can do is to call a third party web service. Google has some APIs to do this and so had Yahoo I think. Both have restrictions on commercial use though, so read the agreement.

Stefan Arentz
  • 34,311
  • 8
  • 67
  • 88