Есть ли способ сделать пакетное геокодирование (получить широту / долготу по адресу и наоборот)?

Google Geocoding API имеет серьезные ограничения (2500 запросов в день), и мы всегда получаем ошибку предела. Их бизнес-лицензия стоит 10 000 долларов, и это слишком дорого для нас.
Сервис должен работать с разными языками и разными странами.
Сервис должен проверить адрес и вернуть лат / лнг. Адреса могут быть строками с разными форматами.

Мы готовы платить за такой сервис, и RESTful API предпочтительнее.

5 ответов

Вы смотрели в Номинатим? Вы можете перебирать свои собственные данные OpenStreetMaps или отправлять запросы в OpenStreetMaps или MapQuest. Возможные недостатки включают в себя лицензию CC (требует указания авторства, может или не может быть проблемой для вас) и проблему проверки (данные почти полностью краудсорсинг, поэтому неточности случаются). Плюсы включают менее ограничительную политику использования, частые обновления, всемирный охват и, конечно, вы не можете побить цену.

Смотрите https://jsfiddle.net/4hzzrws5/

var Data =[
{address: "17 rue de l'Abreuvoir. Nantilly. 28260 La Chaussée d'Ivry"},
{address: "52 rue Ernestine 95100 Argenteuil"},
{address: "3 allée Baudelaire 59139 Wattignies"},
{address: "165, Petit chemin d'aix   13320  Bouc Bel Air"},
{address: "54 avenue Yolande d'Aragon 49100 ANGERS"},
{address: "John Doe, Le Rouho Guidel 56520"},
{address: "51100"},
{address: "21 rue du Docteur Gallet - 74000 Annecy"},
{address: "4 Impasse des Cigales, 26500 Bourg lès Valence"},
{address: "83140 SIX FOURS LES PLAGES"},
{address: "35 cours Vitton 69006 Lyon"},
{address: "7 rue lallier 75009"},
{address: "Paul Michel, Villa Pétricciù,Ghjassu Pétricciù, 20221.CERVIONE"}
]

var cityAndCountry = function(res){
  var osmObj= res[0].address,
      city=osmObj.town || osmObj.city || osmObj.county || '',
      country=osmObj.country || '',
      iso2 =osmObj.country_code || '';
  var out = [ city, country, iso2];
  return out
}
var latAndLon = function(res){
  var lat= res[0].lat,
    lon= res[0].lon;
  var out = [lat,lon];
  return out
}

var queryOsm = function(url) {
  $.getJSON(url, function (data) { 
    data.length==0? 
      console.log(["","",""],data)
     :console.log(cityAndCountry(data),latAndLon(data),data);
  });
}

var delayedPing = function (i,data) {
  // console.log(i, data.length)
  var d = data[data.length-i];
  if(d.address){ 
   // placeAddressOnMap(gc, d.address, d.service||"", d.customer||"")
    var url = 'https://nominatim.openstreetmap.org/search/'+d.address+'?format=json&addressdetails=1&limit=1';
    queryOsm(url)
  } else { console.log(["","","",d.address]) }
  var delay = 1000+200*Math.random();
  if (--i > 0) { setTimeout(function () { delayedPing(i,data); }, delay); }
}

delayedPing(Data.length,Data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Я работал на SmartyStreets, и вы описываете их основной домен.

Возможно, вас заинтересует LiveAddress, который преобразует адреса в широты и долготы и может обрабатывать тысячи запросов в секунду. Он географически распределен по 3 центрам обработки данных и имеет конечную точку RESTful. Вы можете сделать до 100 адресов за запрос. Существует также версия для обработки списка, если у вас есть файл Excel или CSV или что-то в этом роде.

Самый высокий ценник составляет 10 тысяч долларов, но он дает вам неограниченные поиски в течение года.

Пример кода приведен по адресу https://github.com/smartystreets/LiveAddressSamples.

Их лицензионное соглашение не имеет таких ограничений для ограничения вашего использования. Dbaseman прав: вы получаете предельные ошибки, потому что это нарушение TOS (если только вы не получаете бизнес-лицензию от них, но даже в этом случае адреса являются "наиболее точными" - они не стандартизированы и не проверены, как в CASS-Certified Service) Это то, что нужно иметь в виду).

Нет, нет, и если вы посмотрите на их лицензирование, оно явно разработано, чтобы помешать вам использовать их услуги таким образом. В основном, вы должны использовать его, только если

  1. конечный пользователь инициирует каждый запрос к API, и
  2. Ваш сервис бесплатный.

Они также запрещают вам сохранять / кэшировать результаты их обслуживания в базе данных. Google упрощает создание прототипов с помощью своих инструментов, но как только вы начнете увеличивать масштаб, вы будете платить (не сильно отличаясь от M$ в этом отношении).

просто попробуйте это YUI

Пределы использования

Лимит на приложение (определяется вашим ключом доступа): 100000 звонков в день

Лимиты на IP: /v1/public/: 1000 звонков в час; /v1/yql/: 10000 звонков в час

Почтовый индекс + Страна к географическим координатам

Следующие опции могут подойти вам

  1. GeoNames
  2. Gisgraphy
  3. Geocoder

Я напрямую связался с Google по вопросу лицензирования Карт Google. К сожалению, они не понимают, что большая доля рынка теряется из-за стоимости.

Другие вопросы по тегам