Я использую Bing Maps API для геокодирования адресов. Я взял пример с этой страницы https://msdn.microsoft.com/en-us/library/ff817004.aspx это был процесс на основе формы, в котором вы должны представить адрес, чтобы получить долготу и широту. Теперь передо мной лежит требование: я бы хотел вручную указать адреса на странице PHP и получить долготу и широту. Это не происходит. Это то, что мы попробовали на данный момент:
$key=key;
$baseURL = "http://dev.virtualearth.net/REST/v1/Locations";
$query ="Rajalakshmi Mill Road, Singanallur";
$findURL = $baseURL."/".$query."?output=xml&key=Aukd2ilaNJexSjdSjdkoGr26cpoqaVUhOg0MbDTZtfPGClozardCt_1iRscSm5Xo";
$output = file_get_contents($findURL);
$response = new SimpleXMLElement($output);
// Extract and pring latitude and longitude coordinates from results
$latitude = $response->ResourceSets->ResourceSet->Resources->Location->Point->Latitude;
$longitude = $response->ResourceSets->ResourceSet->Resources->Location->Point->Longitude;
$longitude = $response->ResourceSets->ResourceSet->Resources->Location->Point->Longitude;
$address = $response->ResourceSets->ResourceSet->Resources->Location->Address->FormattedAddress->State;
echo "Latitude: ".$latitude."<br>";
echo "Longitude: ".$longitude."<br>";
echo $address1;
Что мне делать?
Глядя на страницу MSDN, я вижу, что вы должны сделать это перед отправкой в запросе,
$query = str_ireplace(" ","%20",$_POST['query']);
API требует, чтобы вы вручную заменили символ пробела на %20
, Вы также можете использовать url_encode как более безопасный вариант.
Другие варианты включают использование curl, как предложено @Domenik Reitzner.
$ch = curl_init();
// Set query data here with the URL
curl_setopt($ch, CURLOPT_URL, $findURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$content = trim(curl_exec($ch));
curl_close($ch);
$response = new SimpleXMLElement($content);
Обновить:
Я только что увидел обновление вашего ответа, и вы включили в него URL, когда я пытался получить к нему доступ, это был результат.
Кстати, я рекомендую вам удалить свои учетные данные и сгенерировать новые, а также не забудьте в следующий раз не публиковать свои ключи API онлайн.
Обновление 2
Нашел проблему, baseUrl должен быть
http://dev.virtualearth.net/REST/v1/Locations
вместо
http://dev.virtualearth.net/REST/v1/Routes
Код в вашем вопросе имеет правильный URL, но полученная ошибка имеет неправильный URL.
Это результат, который я получаю при запросе http://dev.virtualearth.net/REST/v1/Locations/Rajalakshmi%20Mill%20Road,%20Singanallur,%20Coimbatore?output=xml&key=YOURAPIKEY
Вот что я получаю в ответ с предоставленной ссылкой:
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/search/local/ws/rest/v1">
<Copyright>
Copyright © 2018 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.
</Copyright>
<BrandLogoUri>
http://dev.virtualearth.net/Branding/logo_powered_by.png
</BrandLogoUri>
<StatusCode>400</StatusCode>
<StatusDescription>Bad Request</StatusDescription>
<AuthenticationResultCode>ValidCredentials</AuthenticationResultCode>
<ErrorDetails>
<string>One or more parameters are not valid.</string>
<string>
travelMode: This parameter value has an invalid format.
</string>
</ErrorDetails>
<TraceId>
dea21427b82347128fc5f7012bda5592|DB40060630|7.7.0.0
</TraceId>
<ResourceSets/>
</Response>
Что возвращает меня к ожидаемому формату URL:
http://dev.virtualearth.net/REST/v1/Locations/countryRegion/adminDistrict/postalCode/locality/addressLine?key=yourBingMapsKey