API-интерфейс BING Maps REST с использованием переполнения стека

Я использую 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;

Что мне делать?

0

Решение

Глядя на страницу 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, когда я пытался получить к нему доступ, это был результат.

XML

Кстати, я рекомендую вам удалить свои учетные данные и сгенерировать новые, а также не забудьте в следующий раз не публиковать свои ключи 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

ответ

2

Другие решения

Вот что я получаю в ответ с предоставленной ссылкой:

<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
0

По вопросам рекламы [email protected]