Как быстро геокодировать адреса в CSV-файле с помощью Bing Maps

Я создаю приложение, которое позволяет пользователю загружать файл CSV и получать адрес, считанный из каждой строки и геокодированный.

Первоначально я пытался сделать это с помощью Google Map API. Но после некоторых исследований я обнаружил, что API карты Google имеет много ограничений. Например, вы можете делать только 2500 запросов в день, а также для каждого запроса вам нужна задержка.

Это код, который я написал до сих пор:

<script src="http://maps.googleapis.com/maps/api/js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<table width="600">
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">

<tr>
<td width="20%">Select file</td>
<td width="80%"><input type="file" name="file" id="file" /></td>
</tr>

<tr>
<td>Submit</td>
<td><input type="submit" name="submit" /></td>
</tr>

</form>
</table>

<?php
if ( isset($_POST["submit"]) ) {

if ( isset($_FILES["file"])) {

//if there was an error uploading the file
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";

}
else {
//Print file details
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
$name = $_FILES['file']['name'];
$ext = strtolower(end(explode('.', $_FILES['file']['name'])));
$type = $_FILES['file']['type'];
$tmpName = $_FILES['file']['tmp_name'];

// check the file is a csv
if($ext === 'csv'){
if(($handle = fopen($tmpName, 'r')) !== FALSE) {
// necessary if a large csv file
set_time_limit(0);
$row = 1;
while((($data = fgetcsv($handle, 1000, ',')) !== FALSE) && $row!=10) {
// number of fields in the csv
$col_count = count($data);
$address=implode(",",$data);
$geocode=file_get_contents("http://maps.google.com/maps/api/geocode/json?address=".$address."&sensor=false");
print_r($geocode);
$output= json_decode($geocode);

$lat = $output->results[0]->geometry->location->lat;
$lng = $output->results[0]->geometry->location->lng;
sleep(1);
print_r($address);
echo "------".$lat."----".$lng;
echo "<br/>";
$row++;
}
fclose($handle);
}

}
}
} else {
echo "No file selected <br />";
}
}
?>

У меня вопрос, как я могу сделать это с помощью API Bing Maps.

Вот пример файла CSV:

https://drive.google.com/open?id=0Bx3FBqTEy_0MaHp1QVhiNkVTLU0

-2

Решение

Bing Maps не ограничивает количество запросов, которые вы делаете в день, однако существуют ограничения при использовании сервиса в соответствии с бесплатными условиями использования. Веб-приложения ограничены 125 000 транзакций в год.

С Bing Maps есть три способа сделать геокодирование. Первый способ — использовать службу на основе REST, аналогичную той, которую вы используете в Google Maps. Вы можете найти документацию по этой услуге здесь: https://msdn.microsoft.com/en-us/library/ff701711.aspx

Я также рекомендую взглянуть на документ с рекомендациями, если вы используете этот сервис: https://msdn.microsoft.com/en-us/library/dn894107.aspx

Вы также можете найти несколько советов по использованию этого сервиса в PHP здесь: https://msdn.microsoft.com/en-us/library/ff817004.aspx

Второй метод, который вы можете использовать для геокодирования, это использовать модуль поиска, который есть в Bing Maps. Модуль поиска охватывает службы REST и представляет их как простую в использовании библиотеку JavaScript. https://msdn.microsoft.com/en-us/library/hh868062.aspx

Третий вариант — использовать Bing Spatial Data Services и пакетно геокодировать ваши данные. Если у вас большие наборы данных, это сервис для использования. Вы можете передать до 200 000 строк данных за один запрос. Эта служба поддерживает формат файла CSV, которому вы, вероятно, сможете легко соответствовать. Однако, если вы пользуетесь услугой в соответствии с бесплатными условиями использования, вы ограничены 50 строками данных. https://msdn.microsoft.com/en-us/library/ff701733.aspx

Вот некоторая информация о том, как использовать этот сервис в PHP: https://msdn.microsoft.com/en-us/library/ff817006.aspx

Есть несколько вещей, которые нужно знать при использовании любой из этих услуг. Во-первых, вы можете использовать данные только с Bing Maps. Вы не можете геокодировать данные с помощью сервисов Bing Maps, а затем отображать координаты в Google Maps или любой другой картографической платформе, которая не использует Bing Maps.

Во-вторых, Bing Maps позволяет вам сохранять результаты геокодера. Стандартная оптимизация, которая используется в большинстве приложений, состоит из данных геокодирования заранее. Это уменьшило бы необходимость повторного геокодирования данных каждый раз, когда они необходимы. Теперь, в вашем случае, похоже, что любой сможет загрузить файл CSV. Вы можете геокодировать все строки по требованию, но это сгенерирует много транзакций и, вероятно, приведет к быстрому достижению лимита бесплатных условий использования. Другой вариант — сохранить результаты в базе данных, а затем при геокодировании ваших данных проверить базу данных перед отправкой запроса в Bing Maps. Это спасет вас от повторного геокодирования любых данных.

Также полезно знать об ограничении скорости. Базовые аккаунты (бесплатные аккаунты) подлежат ограничению. Это происходит, когда ваша учетная запись выполняет большое количество запросов в течение очень короткого периода времени или когда серверы сильно загружены из основных учетных записей. Что происходит, что некоторые запросы будут возвращаться с пустыми ответами. Заголовок ответа будет иметь флаг, который указывает, что запрос был ограничен. Вы можете найти документацию здесь: https://msdn.microsoft.com/en-us/library/ff701703.aspx

Наконец, если вы просто хотите увидеть свои данные на карте, и они не обязательно должны быть в Интернете. Взгляните на Power Map для Excel 2013 и выше. Вы сможете взять свой CSV и просмотреть его на карте за считанные минуты без необходимости писать какой-либо код. Вот несколько полезных ресурсов на Power Map:

https://www.microsoft.com/en-us/download/details.aspx?id=38395

https://support.office.com/en-us/article/Get-started-with-Power-Map-88A28DF6-8258-40AA-B5CC-577873FB0F4A

0

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

Других решений пока нет …

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