Package: geocoder-compensa
Python GeocoderSimple and consistent geocoding library written in Python.Table of contentOverviewA glimpse at the APIForwardMultiple resultsReverseHouse AddressesIP AddressesBounding BoxCommand Line InterfaceProvidersInstallationPyPi InstallGitHub InstallSnap InstallFeedbackContributionDocumentingCodingChangeLogOverviewMany online providers such as Google & Bing have geocoding services,
these providers do not include Python libraries and have different
JSON responses between each other.It can be very difficult sometimes to parse a particular geocoding provider
since each one of them have their own JSON schema.Here is a typical example of retrieving a Lat & Lng from Google using Python,
things shouldn't be this hard.>>>importrequests>>>url='https://maps.googleapis.com/maps/api/geocode/json'>>>params={'sensor':'false','address':'Mountain View, CA'}>>>r=requests.get(url,params=params)>>>results=r.json()['results']>>>location=results[0]['geometry']['location']>>>location['lat'],location['lng'](37.3860517,-122.0838511)Now lets use Geocoder to do the same task>>>importgeocoder>>>g=geocoder.google('Mountain View, CA')>>>g.latlng(37.3860517,-122.0838511)A glimpse at the APIMany properties are available once the geocoder object is created.Forward>>>importgeocoder>>>g=geocoder.google('Mountain View, CA')>>>g.geojson>>>g.json>>>g.wkt>>>g.osmMultiple queries ('batch' geocoding)>>>importgeocoder>>>g=geocoder.mapquest(['Mountain View, CA','Boulder, Co'],method='batch')>>>forresulting:...print(result.address,result.latlng)...('Mountain View',[37.39008,-122.08139])('Boulder',[40.015831,-105.27927])Multiple results>>>importgeocoder>>>g=geocoder.geonames('Mountain View, CA',maxRows=5)>>>print(len(g))5>>>forresulting:...print(result.address,result.latlng)...MountainView['37.38605','-122.08385']MountainViewElementarySchool['34.0271','-117.59116']BestWesternPlusMountainviewInnandSuites['51.79516','-114.62793']BestWesternMountainviewInn['49.3338','-123.1446']MountainViewPostOffice['37.393','-122.07774']The providers currently supporting multiple results are listed in the tablebelow.Reverse>>>g=geocoder.google([45.15,-75.14],method='reverse')>>>g.city>>>g.state>>>g.state_long>>>g.country>>>g.country_longHouse Addresses>>>g=geocoder.google("453 Booth Street, Ottawa ON")>>>g.housenumber>>>g.postal>>>g.street>>>g.street_longIP Addresses>>>g=geocoder.ip('199.7.157.0')>>>g=geocoder.ip('me')>>>g.latlng>>>g.cityBounding BoxAccessing the JSON & GeoJSON attributes will be different>>>g=geocoder.google("Ottawa")>>>g.bbox{"northeast":[45.53453,-75.2465979],"southwest":[44.962733,-76.3539158]}>>>g.geojson['bbox'][-76.3539158,44.962733,-75.2465979,45.53453]>>>g.southwest[44.962733,-76.3539158]Command Line Interface$geocode"Ottawa, ON">>ottawa.geojson
$geocode"Ottawa, ON"\--providegoogle\--outgeojson\--methodgeocodeProvidersProviderOptimalUsage PolicyMultiple resultsReverseProximityBatchArcGISWorldyesyesBaiduChinaAPI keyyesBingWorldAPI keyyesyesyesCanadaPostCanadaAPI keyyesFreeGeoIPThis API endpoint is deprecated and will stop working on July 1st, 2018.WorldRate Limit,PolicyGaodeChinaAPI keyyesGeocoder.ca(Geolytica)CA & USRate LimitGeocodeFarmWorldPolicyyesyesGeoNamesWorldUsernameyesyesGeoOttawaOttawayesGisgraphyWorldAPI keyyesyesyesGoogleWorldRate Limit,PolicyyesyesyesHEREWorldAPI keyyesyesIPInfoWorldRate Limit,PlansKomoot(OSM powered)WorldyesyesLocationIQWorldAPI KeyyesyesMapboxWorldAPI keyyesyesyesMapQuestWorldAPI keyyesyesyesMapzenShutdownAPI keyyesyesMaxMindWorldOpenCageWorldAPI keyyesyesOpenStreetMapWorldPolicyyesyesTamuUSAPI keyTGOSTaiwanTomTomWorldAPI keyyesUSCensusUSyesyesWhat3WordsWorldAPI keyyesYahooWorldYandexRussiayesyesInstallationPyPi InstallTo install Geocoder, simply:$pipinstallgeocoder
...GitHub InstallInstalling the latest version from Github:$gitclonehttps://github.com/DenisCarriere/geocoder
...
$cdgeocoder
$pythonsetup.pyinstall
...Snap InstallTo install the stable geocodersnapin any of thesupported Linux distros:$sudosnapinstallgeocoder
...If you want to help testing the latest changes from the master branch, you can install it from the edge channel:$sudosnapinstallgeocoder--edge
...The installed snap will be updated automatically every time a new version is pushed to the store.FeedbackPlease feel free to give any feedback on this module.Speak up on Twitter@DenisCarriereand tell me how you use this Python Geocoder. New updates will be pushed to Twitter Hashtags#python.ContributionIf you find any bugs or any enhancements to recommend please send some of your comments/suggestions to theGithub Issues Page.Some way to contribute, from the most generic to the most detailed:DocumentingIf you are not comfortable with development, you can still contribute with the documentation.review the documentation of a specific provider. Most of the time they are lacking details...review the parameters for a specific method, compared to what is supported by the providerreview documentation for command lineIf you miss any feature, just create an issue accordingly. Be sure to describe your use case clearly, and to provide links to the correct sources.Codingadd support for a new provider.Documentation TBD, starting point possible withwip_guide.extend methods for an existing support, i.e support an additionnal API).Documentation TBDextend support of an existing API, i.e, support more (json) fields from the response, or more parameters.Documentation TBDChangeLogSeeCHANGELOG.md