diff options
author | CoprDistGit <infra@openeuler.org> | 2023-04-10 09:14:50 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-04-10 09:14:50 +0000 |
commit | b2f44bfb5e9ca1c712da5f80b1f1bfc225693cde (patch) | |
tree | 41e176fd993c47ef3d7a3d8b6a813900a1cb768f | |
parent | ce71d22653daad8dcb579185c27e3bb077248859 (diff) |
automatic import of python-geocoder
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-geocoder.spec | 753 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 755 insertions, 0 deletions
@@ -0,0 +1 @@ +/geocoder-1.38.1.tar.gz diff --git a/python-geocoder.spec b/python-geocoder.spec new file mode 100644 index 0000000..2e1cb8a --- /dev/null +++ b/python-geocoder.spec @@ -0,0 +1,753 @@ +%global _empty_manifest_terminate_build 0 +Name: python-geocoder +Version: 1.38.1 +Release: 1 +Summary: Geocoder is a simple and consistent geocoding library. +License: The MIT License +URL: https://github.com/DenisCarriere/geocoder +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/ea/0b/2ea440270c1efb7ac73450cb704344c8127f45dabff0bea48711dc9dd93a/geocoder-1.38.1.tar.gz +BuildArch: noarch + + +%description +<!-- TOC --> +- [Overview](#overview) +- [A glimpse at the API](#a-glimpse-at-the-api) + - [Forward](#forward) + - [Multiple results](#multiple-results) + - [Reverse](#reverse) + - [House Addresses](#house-addresses) + - [IP Addresses](#ip-addresses) + - [Bounding Box](#bounding-box) +- [Command Line Interface](#command-line-interface) +- [Providers](#providers) +- [Installation](#installation) + - [PyPi Install](#pypi-install) + - [GitHub Install](#github-install) + - [Snap Install](#snap-install) +- [Feedback](#feedback) +- [Contribution](#contribution) + - [Documenting](#documenting) + - [Coding](#coding) +- [ChangeLog](#changelog) +<!-- /TOC --> +## Overview +Many 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. +```python +>>> import requests +>>> 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 +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.latlng +(37.3860517, -122.0838511) +``` +## A glimpse at the API +Many properties are available once the geocoder object is created. +### Forward +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.geojson +>>> g.json +>>> g.wkt +>>> g.osm +``` +### Multiple queries ('batch' geocoding) +```python +>>> import geocoder +>>> g = geocoder.mapquest(['Mountain View, CA', 'Boulder, Co'], method='batch') +>>> for result in g: +('Mountain View', [37.39008, -122.08139]) +('Boulder', [40.015831, -105.27927]) +``` +### Multiple results +```python +>>> import geocoder +>>> g = geocoder.geonames('Mountain View, CA', maxRows=5) +>>> print(len(g)) +5 +>>> for result in g: +Mountain View ['37.38605', '-122.08385'] +Mountain View Elementary School ['34.0271', '-117.59116'] +Best Western Plus Mountainview Inn and Suites ['51.79516', '-114.62793'] +Best Western Mountainview Inn ['49.3338', '-123.1446'] +Mountain View Post Office ['37.393', '-122.07774'] +``` +> The providers currently supporting multiple results are listed in the table [below](#providers). +### Reverse +```python +>>> g = geocoder.google([45.15, -75.14], method='reverse') +>>> g.city +>>> g.state +>>> g.state_long +>>> g.country +>>> g.country_long +``` +### House Addresses +```python +>>> g = geocoder.google("453 Booth Street, Ottawa ON") +>>> g.housenumber +>>> g.postal +>>> g.street +>>> g.street_long +``` +### IP Addresses +```python +>>> g = geocoder.ip('199.7.157.0') +>>> g = geocoder.ip('me') +>>> g.latlng +>>> g.city +``` +### Bounding Box +Accessing the JSON & GeoJSON attributes will be different +```python +>>> 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 +```bash +$ geocode "Ottawa, ON" >> ottawa.geojson +$ geocode "Ottawa, ON" \ + --provide google \ + --out geojson \ + --method geocode +``` +## Providers +| Provider | Optimal | Usage Policy | Multiple results | Reverse | Proximity | Batch | +|:-------------------------------|:----------|:--------------------------------|:-----------------|:--------|:----------|:------| +| [ArcGIS][ArcGIS] | World | | yes | yes | | | +| [Baidu][Baidu] | China | API key | | yes | | | +| [Bing][Bing] | World | API key | yes | yes | | yes | +| [CanadaPost][CanadaPost] | Canada | API key | yes | | | | +| [FreeGeoIP][FreeGeoIP] | World | | | | | | +| [Gaode][Gaode] | China | API key | | yes | | | +| [Geocoder.ca][Geocoder.ca] (Geolytica) | CA & US | Rate Limit | | | | | +| [GeocodeFarm][GeocodeFarm] | World | [Policy][GeocodeFarm-Policy] | yes | yes | | | +| [GeoNames][GeoNames] | World | Username | yes | | yes | | +| [GeoOttawa][GeoOttawa] | Ottawa | | yes | | | | +| [Gisgraphy][Gisgraphy] | World | API key | yes | yes | yes | | +| [Google][Google] | World | Rate Limit, [Policy][G-Policy] | yes | yes | yes | | +| [HERE][HERE] | World | API key | yes | yes | | | +| [IPInfo][IPInfo] | World | Rate Limit, [Plans][IP-Plans] | | | | | +| [Komoot][Komoot] (OSM powered) | World | | yes | yes | | | +| [LocationIQ][LocationIQ] | World | API Key | yes | yes | | | +| [Mapbox][Mapbox] | World | API key | yes | yes | yes | | +| [MapQuest][MapQuest] | World | API key | yes | yes | | yes | +| [~~Mapzen~~][Mapzen] | Shutdown | API key | yes | yes | | | +| [MaxMind][MaxMind] | World | | | | | | +| [OpenCage][OpenCage] | World | API key | yes | yes | | | +| [OpenStreetMap][OpenStreetMap] | World | [Policy][OpenStreetMap-Policy] | yes | yes | | | +| [Tamu][Tamu] | US | API key | | | | | +| [TGOS][TGOS] | Taiwan | | | | | | +| [TomTom][TomTom] | World | API key | yes | | | | +| [USCensus][USCensus] | US | | | yes | | yes | +| [What3Words][What3Words] | World | API key | | yes | | | +| [Yahoo][Yahoo] | World | | | | | | +| [Yandex][Yandex] | Russia | | yes | yes | | | +## Installation +### PyPi Install +To install Geocoder, simply: +```bash +$ pip install geocoder +``` +### GitHub Install +Installing the latest version from Github: +```bash +$ git clone https://github.com/DenisCarriere/geocoder +$ cd geocoder +$ python setup.py install +``` +### Snap Install +To install the stable geocoder [snap](https://snapcraft.io) in any of the [supported Linux distros](https://snapcraft.io/docs/core/install): +```bash +$ sudo snap install geocoder +``` +If you want to help testing the latest changes from the master branch, you can install it from the edge channel: +```bash +$ sudo snap install geocoder --edge +``` +The installed snap will be updated automatically every time a new version is pushed to the store. +## Feedback +Please feel free to give any feedback on this module. +Speak up on Twitter [@DenisCarriere](https://twitter.com/DenisCarriere) and tell me how you use this Python Geocoder. New updates will be pushed to Twitter Hashtags [#python](https://twitter.com/search?q=%23python). +## Contribution +If you find any bugs or any enhancements to recommend please send some of your comments/suggestions to the [Github Issues Page](https://github.com/DenisCarriere/geocoder/issues). +Some way to contribute, from the most generic to the most detailed: +### Documenting +If you are not comfortable with development, you can still contibute 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 provider +- review documentation for command line +If you miss any feature, just create an issue accordingly. Be sure to describe clearly your use case, and to provide links to the correct sources. +### Coding +- add support for a new provider. _Documentation TBD_, starting point possible with [wip_guide](https://geocoder.readthedocs.io/wip_guide.html). +- extend methods for an existing support, i.e support an additionnal API). _Documentation TBD_ +- extend support of an existing API, i.e, support more (json) fields from the response, or more parameters. _Documentation TBD_ +## ChangeLog +See [CHANGELOG.md](./CHANGELOG.md) +[TGOS]: http://geocoder.readthedocs.org/providers/TGOS.html +[Mapbox]: http://geocoder.readthedocs.org/providers/Mapbox.html +[Google]: http://geocoder.readthedocs.org/providers/Google.html +[G-Policy]: https://developers.google.com/maps/documentation/geocoding/usage-limits +[Bing]: http://geocoder.readthedocs.org/providers/Bing.html +[LocationIQ]: http://geocoder.readthedocs.org/providers/LocationIQ.html +[OpenStreetMap]: http://geocoder.readthedocs.org/providers/OpenStreetMap.html +[OpenStreetMap-Policy]: https://operations.osmfoundation.org/policies/nominatim/ +[HERE]: http://geocoder.readthedocs.org/providers/HERE.html +[TomTom]: http://geocoder.readthedocs.org/providers/TomTom.html +[MapQuest]: http://geocoder.readthedocs.org/providers/MapQuest.html +[OpenCage]: http://geocoder.readthedocs.org/providers/OpenCage.html +[Yahoo]: http://geocoder.readthedocs.org/providers/Yahoo.html +[ArcGIS]: http://geocoder.readthedocs.org/providers/ArcGIS.html +[Yandex]: http://geocoder.readthedocs.org/providers/Yandex.html +[Geocoder.ca]: http://geocoder.readthedocs.org/providers/Geocoder-ca.html +[Baidu]: http://geocoder.readthedocs.org/providers/Baidu.html +[GeoOttawa]: http://geocoder.readthedocs.org/providers/GeoOttawa.html +[FreeGeoIP]: http://geocoder.readthedocs.org/providers/FreeGeoIP.html +[MaxMind]: http://geocoder.readthedocs.org/providers/MaxMind.html +[Mapzen]: https://mapzen.com/blog/shutdown +[What3Words]: http://geocoder.readthedocs.org/providers/What3Words.html +[CanadaPost]: http://geocoder.readthedocs.org/providers/CanadaPost.html +[GeoNames]: http://geocoder.readthedocs.org/providers/GeoNames.html +[IPInfo]: http://geocoder.readthedocs.org/providers/IPInfo.html +[Tamu]: http://geoservices.tamu.edu/Services/Geocode/WebService/ +[GeocodeFarm]: https://geocode.farm/ +[GeocodeFarm-Policy]: https://geocode.farm/geocoding/free-api-documentation/ +[Gaode]: http://geocoder.readthedocs.org/providers/.html +[IP-Plans]: http://ipinfo.io/pricing +[Komoot]: http://photon.komoot.de +[USCensus]: https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html +[Gisgraphy]: https://premium.gisgraphy.com/ + +%package -n python3-geocoder +Summary: Geocoder is a simple and consistent geocoding library. +Provides: python-geocoder +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-geocoder +<!-- TOC --> +- [Overview](#overview) +- [A glimpse at the API](#a-glimpse-at-the-api) + - [Forward](#forward) + - [Multiple results](#multiple-results) + - [Reverse](#reverse) + - [House Addresses](#house-addresses) + - [IP Addresses](#ip-addresses) + - [Bounding Box](#bounding-box) +- [Command Line Interface](#command-line-interface) +- [Providers](#providers) +- [Installation](#installation) + - [PyPi Install](#pypi-install) + - [GitHub Install](#github-install) + - [Snap Install](#snap-install) +- [Feedback](#feedback) +- [Contribution](#contribution) + - [Documenting](#documenting) + - [Coding](#coding) +- [ChangeLog](#changelog) +<!-- /TOC --> +## Overview +Many 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. +```python +>>> import requests +>>> 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 +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.latlng +(37.3860517, -122.0838511) +``` +## A glimpse at the API +Many properties are available once the geocoder object is created. +### Forward +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.geojson +>>> g.json +>>> g.wkt +>>> g.osm +``` +### Multiple queries ('batch' geocoding) +```python +>>> import geocoder +>>> g = geocoder.mapquest(['Mountain View, CA', 'Boulder, Co'], method='batch') +>>> for result in g: +('Mountain View', [37.39008, -122.08139]) +('Boulder', [40.015831, -105.27927]) +``` +### Multiple results +```python +>>> import geocoder +>>> g = geocoder.geonames('Mountain View, CA', maxRows=5) +>>> print(len(g)) +5 +>>> for result in g: +Mountain View ['37.38605', '-122.08385'] +Mountain View Elementary School ['34.0271', '-117.59116'] +Best Western Plus Mountainview Inn and Suites ['51.79516', '-114.62793'] +Best Western Mountainview Inn ['49.3338', '-123.1446'] +Mountain View Post Office ['37.393', '-122.07774'] +``` +> The providers currently supporting multiple results are listed in the table [below](#providers). +### Reverse +```python +>>> g = geocoder.google([45.15, -75.14], method='reverse') +>>> g.city +>>> g.state +>>> g.state_long +>>> g.country +>>> g.country_long +``` +### House Addresses +```python +>>> g = geocoder.google("453 Booth Street, Ottawa ON") +>>> g.housenumber +>>> g.postal +>>> g.street +>>> g.street_long +``` +### IP Addresses +```python +>>> g = geocoder.ip('199.7.157.0') +>>> g = geocoder.ip('me') +>>> g.latlng +>>> g.city +``` +### Bounding Box +Accessing the JSON & GeoJSON attributes will be different +```python +>>> 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 +```bash +$ geocode "Ottawa, ON" >> ottawa.geojson +$ geocode "Ottawa, ON" \ + --provide google \ + --out geojson \ + --method geocode +``` +## Providers +| Provider | Optimal | Usage Policy | Multiple results | Reverse | Proximity | Batch | +|:-------------------------------|:----------|:--------------------------------|:-----------------|:--------|:----------|:------| +| [ArcGIS][ArcGIS] | World | | yes | yes | | | +| [Baidu][Baidu] | China | API key | | yes | | | +| [Bing][Bing] | World | API key | yes | yes | | yes | +| [CanadaPost][CanadaPost] | Canada | API key | yes | | | | +| [FreeGeoIP][FreeGeoIP] | World | | | | | | +| [Gaode][Gaode] | China | API key | | yes | | | +| [Geocoder.ca][Geocoder.ca] (Geolytica) | CA & US | Rate Limit | | | | | +| [GeocodeFarm][GeocodeFarm] | World | [Policy][GeocodeFarm-Policy] | yes | yes | | | +| [GeoNames][GeoNames] | World | Username | yes | | yes | | +| [GeoOttawa][GeoOttawa] | Ottawa | | yes | | | | +| [Gisgraphy][Gisgraphy] | World | API key | yes | yes | yes | | +| [Google][Google] | World | Rate Limit, [Policy][G-Policy] | yes | yes | yes | | +| [HERE][HERE] | World | API key | yes | yes | | | +| [IPInfo][IPInfo] | World | Rate Limit, [Plans][IP-Plans] | | | | | +| [Komoot][Komoot] (OSM powered) | World | | yes | yes | | | +| [LocationIQ][LocationIQ] | World | API Key | yes | yes | | | +| [Mapbox][Mapbox] | World | API key | yes | yes | yes | | +| [MapQuest][MapQuest] | World | API key | yes | yes | | yes | +| [~~Mapzen~~][Mapzen] | Shutdown | API key | yes | yes | | | +| [MaxMind][MaxMind] | World | | | | | | +| [OpenCage][OpenCage] | World | API key | yes | yes | | | +| [OpenStreetMap][OpenStreetMap] | World | [Policy][OpenStreetMap-Policy] | yes | yes | | | +| [Tamu][Tamu] | US | API key | | | | | +| [TGOS][TGOS] | Taiwan | | | | | | +| [TomTom][TomTom] | World | API key | yes | | | | +| [USCensus][USCensus] | US | | | yes | | yes | +| [What3Words][What3Words] | World | API key | | yes | | | +| [Yahoo][Yahoo] | World | | | | | | +| [Yandex][Yandex] | Russia | | yes | yes | | | +## Installation +### PyPi Install +To install Geocoder, simply: +```bash +$ pip install geocoder +``` +### GitHub Install +Installing the latest version from Github: +```bash +$ git clone https://github.com/DenisCarriere/geocoder +$ cd geocoder +$ python setup.py install +``` +### Snap Install +To install the stable geocoder [snap](https://snapcraft.io) in any of the [supported Linux distros](https://snapcraft.io/docs/core/install): +```bash +$ sudo snap install geocoder +``` +If you want to help testing the latest changes from the master branch, you can install it from the edge channel: +```bash +$ sudo snap install geocoder --edge +``` +The installed snap will be updated automatically every time a new version is pushed to the store. +## Feedback +Please feel free to give any feedback on this module. +Speak up on Twitter [@DenisCarriere](https://twitter.com/DenisCarriere) and tell me how you use this Python Geocoder. New updates will be pushed to Twitter Hashtags [#python](https://twitter.com/search?q=%23python). +## Contribution +If you find any bugs or any enhancements to recommend please send some of your comments/suggestions to the [Github Issues Page](https://github.com/DenisCarriere/geocoder/issues). +Some way to contribute, from the most generic to the most detailed: +### Documenting +If you are not comfortable with development, you can still contibute 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 provider +- review documentation for command line +If you miss any feature, just create an issue accordingly. Be sure to describe clearly your use case, and to provide links to the correct sources. +### Coding +- add support for a new provider. _Documentation TBD_, starting point possible with [wip_guide](https://geocoder.readthedocs.io/wip_guide.html). +- extend methods for an existing support, i.e support an additionnal API). _Documentation TBD_ +- extend support of an existing API, i.e, support more (json) fields from the response, or more parameters. _Documentation TBD_ +## ChangeLog +See [CHANGELOG.md](./CHANGELOG.md) +[TGOS]: http://geocoder.readthedocs.org/providers/TGOS.html +[Mapbox]: http://geocoder.readthedocs.org/providers/Mapbox.html +[Google]: http://geocoder.readthedocs.org/providers/Google.html +[G-Policy]: https://developers.google.com/maps/documentation/geocoding/usage-limits +[Bing]: http://geocoder.readthedocs.org/providers/Bing.html +[LocationIQ]: http://geocoder.readthedocs.org/providers/LocationIQ.html +[OpenStreetMap]: http://geocoder.readthedocs.org/providers/OpenStreetMap.html +[OpenStreetMap-Policy]: https://operations.osmfoundation.org/policies/nominatim/ +[HERE]: http://geocoder.readthedocs.org/providers/HERE.html +[TomTom]: http://geocoder.readthedocs.org/providers/TomTom.html +[MapQuest]: http://geocoder.readthedocs.org/providers/MapQuest.html +[OpenCage]: http://geocoder.readthedocs.org/providers/OpenCage.html +[Yahoo]: http://geocoder.readthedocs.org/providers/Yahoo.html +[ArcGIS]: http://geocoder.readthedocs.org/providers/ArcGIS.html +[Yandex]: http://geocoder.readthedocs.org/providers/Yandex.html +[Geocoder.ca]: http://geocoder.readthedocs.org/providers/Geocoder-ca.html +[Baidu]: http://geocoder.readthedocs.org/providers/Baidu.html +[GeoOttawa]: http://geocoder.readthedocs.org/providers/GeoOttawa.html +[FreeGeoIP]: http://geocoder.readthedocs.org/providers/FreeGeoIP.html +[MaxMind]: http://geocoder.readthedocs.org/providers/MaxMind.html +[Mapzen]: https://mapzen.com/blog/shutdown +[What3Words]: http://geocoder.readthedocs.org/providers/What3Words.html +[CanadaPost]: http://geocoder.readthedocs.org/providers/CanadaPost.html +[GeoNames]: http://geocoder.readthedocs.org/providers/GeoNames.html +[IPInfo]: http://geocoder.readthedocs.org/providers/IPInfo.html +[Tamu]: http://geoservices.tamu.edu/Services/Geocode/WebService/ +[GeocodeFarm]: https://geocode.farm/ +[GeocodeFarm-Policy]: https://geocode.farm/geocoding/free-api-documentation/ +[Gaode]: http://geocoder.readthedocs.org/providers/.html +[IP-Plans]: http://ipinfo.io/pricing +[Komoot]: http://photon.komoot.de +[USCensus]: https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html +[Gisgraphy]: https://premium.gisgraphy.com/ + +%package help +Summary: Development documents and examples for geocoder +Provides: python3-geocoder-doc +%description help +<!-- TOC --> +- [Overview](#overview) +- [A glimpse at the API](#a-glimpse-at-the-api) + - [Forward](#forward) + - [Multiple results](#multiple-results) + - [Reverse](#reverse) + - [House Addresses](#house-addresses) + - [IP Addresses](#ip-addresses) + - [Bounding Box](#bounding-box) +- [Command Line Interface](#command-line-interface) +- [Providers](#providers) +- [Installation](#installation) + - [PyPi Install](#pypi-install) + - [GitHub Install](#github-install) + - [Snap Install](#snap-install) +- [Feedback](#feedback) +- [Contribution](#contribution) + - [Documenting](#documenting) + - [Coding](#coding) +- [ChangeLog](#changelog) +<!-- /TOC --> +## Overview +Many 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. +```python +>>> import requests +>>> 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 +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.latlng +(37.3860517, -122.0838511) +``` +## A glimpse at the API +Many properties are available once the geocoder object is created. +### Forward +```python +>>> import geocoder +>>> g = geocoder.google('Mountain View, CA') +>>> g.geojson +>>> g.json +>>> g.wkt +>>> g.osm +``` +### Multiple queries ('batch' geocoding) +```python +>>> import geocoder +>>> g = geocoder.mapquest(['Mountain View, CA', 'Boulder, Co'], method='batch') +>>> for result in g: +('Mountain View', [37.39008, -122.08139]) +('Boulder', [40.015831, -105.27927]) +``` +### Multiple results +```python +>>> import geocoder +>>> g = geocoder.geonames('Mountain View, CA', maxRows=5) +>>> print(len(g)) +5 +>>> for result in g: +Mountain View ['37.38605', '-122.08385'] +Mountain View Elementary School ['34.0271', '-117.59116'] +Best Western Plus Mountainview Inn and Suites ['51.79516', '-114.62793'] +Best Western Mountainview Inn ['49.3338', '-123.1446'] +Mountain View Post Office ['37.393', '-122.07774'] +``` +> The providers currently supporting multiple results are listed in the table [below](#providers). +### Reverse +```python +>>> g = geocoder.google([45.15, -75.14], method='reverse') +>>> g.city +>>> g.state +>>> g.state_long +>>> g.country +>>> g.country_long +``` +### House Addresses +```python +>>> g = geocoder.google("453 Booth Street, Ottawa ON") +>>> g.housenumber +>>> g.postal +>>> g.street +>>> g.street_long +``` +### IP Addresses +```python +>>> g = geocoder.ip('199.7.157.0') +>>> g = geocoder.ip('me') +>>> g.latlng +>>> g.city +``` +### Bounding Box +Accessing the JSON & GeoJSON attributes will be different +```python +>>> 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 +```bash +$ geocode "Ottawa, ON" >> ottawa.geojson +$ geocode "Ottawa, ON" \ + --provide google \ + --out geojson \ + --method geocode +``` +## Providers +| Provider | Optimal | Usage Policy | Multiple results | Reverse | Proximity | Batch | +|:-------------------------------|:----------|:--------------------------------|:-----------------|:--------|:----------|:------| +| [ArcGIS][ArcGIS] | World | | yes | yes | | | +| [Baidu][Baidu] | China | API key | | yes | | | +| [Bing][Bing] | World | API key | yes | yes | | yes | +| [CanadaPost][CanadaPost] | Canada | API key | yes | | | | +| [FreeGeoIP][FreeGeoIP] | World | | | | | | +| [Gaode][Gaode] | China | API key | | yes | | | +| [Geocoder.ca][Geocoder.ca] (Geolytica) | CA & US | Rate Limit | | | | | +| [GeocodeFarm][GeocodeFarm] | World | [Policy][GeocodeFarm-Policy] | yes | yes | | | +| [GeoNames][GeoNames] | World | Username | yes | | yes | | +| [GeoOttawa][GeoOttawa] | Ottawa | | yes | | | | +| [Gisgraphy][Gisgraphy] | World | API key | yes | yes | yes | | +| [Google][Google] | World | Rate Limit, [Policy][G-Policy] | yes | yes | yes | | +| [HERE][HERE] | World | API key | yes | yes | | | +| [IPInfo][IPInfo] | World | Rate Limit, [Plans][IP-Plans] | | | | | +| [Komoot][Komoot] (OSM powered) | World | | yes | yes | | | +| [LocationIQ][LocationIQ] | World | API Key | yes | yes | | | +| [Mapbox][Mapbox] | World | API key | yes | yes | yes | | +| [MapQuest][MapQuest] | World | API key | yes | yes | | yes | +| [~~Mapzen~~][Mapzen] | Shutdown | API key | yes | yes | | | +| [MaxMind][MaxMind] | World | | | | | | +| [OpenCage][OpenCage] | World | API key | yes | yes | | | +| [OpenStreetMap][OpenStreetMap] | World | [Policy][OpenStreetMap-Policy] | yes | yes | | | +| [Tamu][Tamu] | US | API key | | | | | +| [TGOS][TGOS] | Taiwan | | | | | | +| [TomTom][TomTom] | World | API key | yes | | | | +| [USCensus][USCensus] | US | | | yes | | yes | +| [What3Words][What3Words] | World | API key | | yes | | | +| [Yahoo][Yahoo] | World | | | | | | +| [Yandex][Yandex] | Russia | | yes | yes | | | +## Installation +### PyPi Install +To install Geocoder, simply: +```bash +$ pip install geocoder +``` +### GitHub Install +Installing the latest version from Github: +```bash +$ git clone https://github.com/DenisCarriere/geocoder +$ cd geocoder +$ python setup.py install +``` +### Snap Install +To install the stable geocoder [snap](https://snapcraft.io) in any of the [supported Linux distros](https://snapcraft.io/docs/core/install): +```bash +$ sudo snap install geocoder +``` +If you want to help testing the latest changes from the master branch, you can install it from the edge channel: +```bash +$ sudo snap install geocoder --edge +``` +The installed snap will be updated automatically every time a new version is pushed to the store. +## Feedback +Please feel free to give any feedback on this module. +Speak up on Twitter [@DenisCarriere](https://twitter.com/DenisCarriere) and tell me how you use this Python Geocoder. New updates will be pushed to Twitter Hashtags [#python](https://twitter.com/search?q=%23python). +## Contribution +If you find any bugs or any enhancements to recommend please send some of your comments/suggestions to the [Github Issues Page](https://github.com/DenisCarriere/geocoder/issues). +Some way to contribute, from the most generic to the most detailed: +### Documenting +If you are not comfortable with development, you can still contibute 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 provider +- review documentation for command line +If you miss any feature, just create an issue accordingly. Be sure to describe clearly your use case, and to provide links to the correct sources. +### Coding +- add support for a new provider. _Documentation TBD_, starting point possible with [wip_guide](https://geocoder.readthedocs.io/wip_guide.html). +- extend methods for an existing support, i.e support an additionnal API). _Documentation TBD_ +- extend support of an existing API, i.e, support more (json) fields from the response, or more parameters. _Documentation TBD_ +## ChangeLog +See [CHANGELOG.md](./CHANGELOG.md) +[TGOS]: http://geocoder.readthedocs.org/providers/TGOS.html +[Mapbox]: http://geocoder.readthedocs.org/providers/Mapbox.html +[Google]: http://geocoder.readthedocs.org/providers/Google.html +[G-Policy]: https://developers.google.com/maps/documentation/geocoding/usage-limits +[Bing]: http://geocoder.readthedocs.org/providers/Bing.html +[LocationIQ]: http://geocoder.readthedocs.org/providers/LocationIQ.html +[OpenStreetMap]: http://geocoder.readthedocs.org/providers/OpenStreetMap.html +[OpenStreetMap-Policy]: https://operations.osmfoundation.org/policies/nominatim/ +[HERE]: http://geocoder.readthedocs.org/providers/HERE.html +[TomTom]: http://geocoder.readthedocs.org/providers/TomTom.html +[MapQuest]: http://geocoder.readthedocs.org/providers/MapQuest.html +[OpenCage]: http://geocoder.readthedocs.org/providers/OpenCage.html +[Yahoo]: http://geocoder.readthedocs.org/providers/Yahoo.html +[ArcGIS]: http://geocoder.readthedocs.org/providers/ArcGIS.html +[Yandex]: http://geocoder.readthedocs.org/providers/Yandex.html +[Geocoder.ca]: http://geocoder.readthedocs.org/providers/Geocoder-ca.html +[Baidu]: http://geocoder.readthedocs.org/providers/Baidu.html +[GeoOttawa]: http://geocoder.readthedocs.org/providers/GeoOttawa.html +[FreeGeoIP]: http://geocoder.readthedocs.org/providers/FreeGeoIP.html +[MaxMind]: http://geocoder.readthedocs.org/providers/MaxMind.html +[Mapzen]: https://mapzen.com/blog/shutdown +[What3Words]: http://geocoder.readthedocs.org/providers/What3Words.html +[CanadaPost]: http://geocoder.readthedocs.org/providers/CanadaPost.html +[GeoNames]: http://geocoder.readthedocs.org/providers/GeoNames.html +[IPInfo]: http://geocoder.readthedocs.org/providers/IPInfo.html +[Tamu]: http://geoservices.tamu.edu/Services/Geocode/WebService/ +[GeocodeFarm]: https://geocode.farm/ +[GeocodeFarm-Policy]: https://geocode.farm/geocoding/free-api-documentation/ +[Gaode]: http://geocoder.readthedocs.org/providers/.html +[IP-Plans]: http://ipinfo.io/pricing +[Komoot]: http://photon.komoot.de +[USCensus]: https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html +[Gisgraphy]: https://premium.gisgraphy.com/ + +%prep +%autosetup -n geocoder-1.38.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-geocoder -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.38.1-1 +- Package Spec generated @@ -0,0 +1 @@ +360f693a51f7ea4b4078f9ef96222ee8 geocoder-1.38.1.tar.gz |