W firmie używamy do tego celu GMaps API, ale ono ma czasem dziwne cuda (w rodzaju: nie znajduje miejscowości gdy się poda powiat, a bez powiatu - znajduje). Ale nie w postaci klasy w PHP, ale w JS tylko, przez PHP jest tylko wstawiany adres z bazy danych do skryptu.
Coś takiego tam jest:
var geocoder;
var trial = 1;
var strict = true;
var map;
var address1 = "Poznań, Wielkopolskie, Poland";
var address2 = "Wilda, Poznań, Poland";
var address3 = "Wilda, Wielkopolskie, Poland";
// Create new geocoding object
geocoder = new GClientGeocoder();
// Retrieve location information, pass it to addToMap()
geocoder.getLocations(address2, addToMap);
// This function adds the point to the map
function addToMap(response)
{
// if everything is OK
if (response.Status.code == 200)
{
// retrieve the first object
place = response.Placemark[0];
// TODO: placemark accuracy, many placemarks
// http://code.google.com/intl/pl/apis/maps/documentation/services.html#Geocoding_Structured
// Retrieve the latitude and longitude
var point = new GLatLng(place.Point.coordinates[1],
place.Point.coordinates[0]);
// Center the map on this point
if (strict)
map.setCenter(point, 14);
else
map.setCenter(point, 12);
// add a marker
map.addOverlay(new GMarker(point, icon));
}
else
{
// so there's a problem with query or Google Maps
alert('Przepraszamy, w systemie map wystąpił błąd, który uniemożliwił pokazanie mapy dla tej nieruchomości. Postaramy się go poprawić jak najszybciej. Przepraszamy za utrudnienia.');
}
}
Tak w rzeczywistości to w tym kodzie jest jeszcze sprawdzanie alternatywnych wersji adresu, gdy się nie uda znaleźć za pierwszym razem, a gdy się nie uda nic znaleźć to po prostu jest centrowanie mapy na powiecie - ale to już można sobie dostosować do swoich potrzeb na podstawie dokumentacji.
Plus w dokumentacji jest coś o dokładności tych "placemarks", gdy zostanie znalezione więcej niż 1 obiekt o takiej nazwie - ja wybieram tutaj pierwszy, w zasadzie powinno się wybierać ten najbardziej pasujący - http://code.google.com/intl/pl/apis/maps/documentation/services.html#Geocoding_Structured. Ogólnie na tej stronie hasło "geocoding".