Есть ли способ сделать пакетное геокодирование (получить широту / долготу по адресу и наоборот)?
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) Это то, что нужно иметь в виду).
Нет, нет, и если вы посмотрите на их лицензирование, оно явно разработано, чтобы помешать вам использовать их услуги таким образом. В основном, вы должны использовать его, только если
- конечный пользователь инициирует каждый запрос к API, и
- Ваш сервис бесплатный.
Они также запрещают вам сохранять / кэшировать результаты их обслуживания в базе данных. Google упрощает создание прототипов с помощью своих инструментов, но как только вы начнете увеличивать масштаб, вы будете платить (не сильно отличаясь от M$ в этом отношении).
Пределы использования
Лимит на приложение (определяется вашим ключом доступа): 100000 звонков в день
Лимиты на IP: /v1/public/: 1000 звонков в час; /v1/yql/: 10000 звонков в час