Хей, мне интересно, как выработать расстояние между двумя почтовыми кодами с помощью PHP и Google Maps Api.
Любой получил какую-либо идею или ссылки на примеры.
Предполагая, что вы ищете географическое расстояние , сначала вам нужно получить широту и долготу ваших двух почтовых индексов с помощью служб геокодирования на сервере Google Maps, как показано в следующем примере:
$url = 'http://maps.google.com/maps/geo?q=EC3M,+UK&output=csv&sensor=false'; $data = @file_get_contents($url); $result = explode(",", $data); echo $result[0]; // status code echo $result[1]; // accuracy echo $result[2]; // latitude echo $result[3]; // longitude
Затем вы можете рассчитать расстояние между координатами двух ваших почтовых индексов, используя реализацию расстояния по большому кругу, такую как:
Обратите внимание, что серверная служба геокодирования может использоваться только совместно с отображением результатов на карте Google; результаты геокодирования, не отображая их на карте, запрещены ограничениями лицензии на использование API Карт Google .
ОБНОВИТЬ:
Если вы ищете расстояние для поездки вместо географического расстояния, обратите внимание на то, что на данный момент не существует документально подтвержденного и утвержденного метода для доступа к API-интерфейсам Google Maps Directions через HTTP-запрос на стороне сервера.
Тем не менее, недокументированный метод, который возвращает вывод JSON, следующий:
http://maps.google.com/maps/nav?q=from:London%20to:Dover
Это вернет вам направление движения, а также общее расстояние в формате JSON: "meters":122977
.
Формат параметра q
должен быть from:xxx%20to:yyy
. Замените xxx и yyy начальным и конечным точками соответственно. Вместо полных адресов вы можете использовать координаты широты и долготы:
http://maps.google.com/maps/nav?q=from:51.519894,-0.105667%20to:51.129079,1.306925
Обратите внимание, что не только это недокументировано, но также может нарушать ограничения 10.1 и 10.5 Условий использования API Карт Google .
Вы также можете быть заинтересованы в проверке следующих связанных статей:
Не знаю, изменил ли V3 API что-нибудь, но я использовал это довольно долго и все еще работает:
От и до каждый выражается как широта, долгота (адрес, вероятно, будет работать, я уверен, что я попробовал, но не помню, и у меня были координаты в любом случае)
$base_url = 'http://maps.googleapis.com/maps/api/directions/xml?sensor=false'; $xml = simplexml_load_file("$base_url&origin=$from&destination=$to"); $distance = (string)$xml->route->leg->distance->text; $duration = (string)$xml->route->leg->duration->text
Основываясь на ответе Даниэля, вы можете использовать API геокодирования Google для легкости автомобильного, общественного транспорта, пешеходных и велосипедных расстояний:
$postcode1='W1J0DB'; $postcode2='W23UW'; $result = array(); $url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$postcode1&destinations=$postcode2&mode=bicycling&language=en-EN&sensor=false"; $data = @file_get_contents($url); $result = json_decode($data, true); print_r($result);
Обязательно замените & mode = bicycling на ваш предпочтительный параметр:
Взгляните на список рассылки здесь:
http://groups.google.com/group/Google-Maps-API/browse_thread/thread/71e6aa2c3de66127
Как только вы решите, хотите ли вы провести прямую линию или расстояние до него, вы можете легко вычислить ее. Вам не нужно использовать PHP, но есть примеры.
Посмотрите также на это:
API Карт Google – это JavaScript, а не PHP. Чтобы достичь желаемого, переведите 2 почтовых кода в координаты LatLang и используйте функцию distanceFrom
чтобы найти расстояние между ними.
Взгляните на эту статью для примера кода.