7

Google Geocoding API has serious limitations (2,500 requests per day) and we always get a limit error. Their business license costs $10,000 and it is too expensive for us.
Service should work with different languages and different countries.
Service should verify address and return lat/lng. The addresses could be a strings with different formats.

We are ready to pay for such service and RESTful API is preferable.

j0k
  • 22,600
  • 28
  • 79
  • 90
Oleg Dats
  • 3,933
  • 9
  • 38
  • 61
  • another service http://batchgeo.com/ – Oleg Dats Apr 01 '12 at 10:46
  • Can you clarify a little? Are you looking for US addresses? Are trying to verify that an address exists and then geocode it? Or do you just want to find out where the address "would be" IF it were to exit (address approximation).? – Jeffrey Apr 10 '12 at 16:51
  • @Jeffrey I have little bit updated. What else are you interested in ? – Oleg Dats Apr 12 '12 at 11:40

5 Answers5

5

Have you looked into Nominatim? You can roll your own over OpenStreetMaps data, or you can send requests to OpenStreetMaps or MapQuest. Possible downsides include the CC license (requires attribution, may or may not be a problem for you) and the verification issue (data is almost entirely crowdsourced, so inaccuracies do happen). Upsides include less restrictive usage policy, frequent updates, worldwide coverage, and of course, you can't beat the price.

See 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>
Hugolpz
  • 17,296
  • 26
  • 100
  • 187
Cameron
  • 1,675
  • 11
  • 12
5

I worked at SmartyStreets and what you describe is their core domain.

You might be interested in LiveAddress which transforms addresses into lat/lon and can process thousands of requests per second. It's geo-distributed across 3 data centers and has a RESTful endpoint. You can do up to 100 addresses per request. There's also a list processing version if you have an Excel or CSV file or something like that.

The highest price tag is $10k, but it gives you unlimited lookups for a year.

Some sample code is at https://github.com/smartystreets/LiveAddressSamples.

Their license agreement has no such restrictions to limit your usage. Dbaseman is right: you're getting limit errors because it's a violation of the TOS (unless you get a business license from them, but even then the addresses are "best guess" -- not standardized and verified like with a CASS-Certified service. That's something to keep in mind).

Matt
  • 22,721
  • 17
  • 71
  • 112
  • Should I specify coutry, city, address as request parameters explicitly ? Can SmartyStreets parse different formats and languages like google can ? For example 'Львів, вул. Вірменська, 35' – Oleg Dats Apr 02 '12 at 12:57
  • 1
    Currently we only support US addresses (in whatever language they are). To be processed, a request must contain a **street address** and a **city/state/zip** (*any combination of those 3*). If you can't split them up, there *is* a way to to process addresses without having the different parts separated. [The algorithm for that is described here](http://smartystreets.com/answers/questions/318/can-i-verify-a-freeform-address-with-your-service). Keep in mind that while Google is more flexible, its purpose is very different: to approximate addresses, not validate them. – Matt Apr 03 '12 at 19:51
  • 1
    UPDATE: This is a bit delayed here, but you no longer have to separate the parts of a single-line address manually. LiveAddress does it for you. – Matt Oct 01 '12 at 03:59
  • Does SmartyStreets support reverse-geocoding (i.e. lat, long --> street address)? – stackoverflowuser2010 Jan 24 '14 at 01:03
  • @stackoverflowuser2010 As of right now, we just do forward geocoding from an address. – Matt Jan 24 '14 at 02:34
  • @Matt: Do you know of any solution/company that does bulk reverse-geocoding for the same prices? – stackoverflowuser2010 Jan 24 '14 at 04:23
  • @stackoverflowuser2010 http://www.datasciencetoolkit.org/ can turn coordinates into political boundaries, but not down to the address level... I don't know of others in your price range at this time. Maybe keep an eye on geocod.io. – Matt Jan 24 '14 at 16:29
  • @OlegDats SmartyStreets just started offering international verification, which include the ability to verify in different languages, including special characters. – camiblanch Aug 12 '15 at 17:18
1

No there isn't, and if you look into their licensing, it is explicitly designed to prevent you from using their service like that. Basically, you are only meant to use it if

  1. an end-user initiates each request to the API, and
  2. your service is free.

They also prohibit you from saving/caching results of their service to a database. Google makes it easy to prototype using their tools, but once you start to scale up you are going to pay (not so different from M$ in that regard).

McGarnagle
  • 101,349
  • 31
  • 229
  • 260
0

Following options may suite you

  1. GeoNames
  2. Gisgraphy
  3. GeoCoder

I directly communicated with Google about Google Maps licensing issue. Unfortunately they don't realize that great market share being lost due to the cost.

ABH
  • 3,391
  • 23
  • 26
0

just try this YUI

Usage Limits

Per application limit (identified by your Access Key): 100,000 calls per day

Per IP limits: /v1/public/: 1,000 calls per hour; /v1/yql/: 10,000 calls per hour

ZIP / Postal Code + Country to Geo Coordinates

Community
  • 1
  • 1
Chandru velan
  • 136
  • 1
  • 3
  • 21