diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..067da57 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: ci +on: + push: + branches: + - master + - main + - documentation-mkdocs +permissions: + contents: write +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.x + - uses: actions/cache@v2 + with: + key: ${{ github.ref }} + path: .cache + - run: pip install mkdocs-material + - run: mkdocs gh-deploy --remote-branch gh-pages --force \ No newline at end of file diff --git a/.gitignore b/.gitignore index b0e3907..7545116 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ node_modules npm-debug.log .DS_Store + +.idea/ +.venv/ \ No newline at end of file diff --git a/README.md b/README.md index 609e2db..1ca628e 100644 --- a/README.md +++ b/README.md @@ -31,36 +31,36 @@ Here is where you can find all documentation for the [Pelias geocoder](https://g ### Core Features and API Documentation #### Endpoint descriptions -- [Forward geocoding](search.md) (**/v1/search**) to find a place by searching for an address or name -- [Reverse geocoding](reverse.md) (**/v1/reverse**) to find what is located at a certain coordinate location -- [Autocomplete](autocomplete.md) (**/v1/autocomplete**) to give real-time result suggestions without having to type the whole location -- [Structured Geocoding](structured-geocoding.md) (**/v1/search/structured**) (*beta*) to find a place with data already separated into housenumber, street, city, etc -- [Place endpoint](place.md) (**/v1/place**) for details on a place returned from a previous query +- [Forward geocoding](site/documentation/search.md) (**/v1/search**) to find a place by searching for an address or name +- [Reverse geocoding](site/documentation/reverse.md) (**/v1/reverse**) to find what is located at a certain coordinate location +- [Autocomplete](site/documentation/autocomplete.md) (**/v1/autocomplete**) to give real-time result suggestions without having to type the whole location +- [Structured Geocoding](site/documentation/structured-geocoding.md) (**/v1/search/structured**) (*beta*) to find a place with data already separated into housenumber, street, city, etc +- [Place endpoint](site/documentation/place.md) (**/v1/place**) for details on a place returned from a previous query -_Not sure which Endpoint to use? We have a [page](search-workflows.md) for that_ +_Not sure which Endpoint to use? We have a [page](site/documentation/search-workflows.md) for that_ #### Query parameters and options -- [Global coverage with prioritized local results](search.md#prioritize-results-by-proximity) -- [Language support](language-codes.md) for seeing results in different languages +- [Global coverage with prioritized local results](site/documentation/search.md#prioritize-results-by-proximity) +- [Language support](site/documentation/language-codes.md) for seeing results in different languages #### Response Properties -- [Full list of response properties](response.md) -- [Confidence scores, match\_types and other tools for determining result quality](result_quality.md) +- [Full list of response properties](site/documentation/response.md) +- [Confidence scores, match\_types and other tools for determining result quality](site/documentation/result-quality.md) ### Data Sources -- [Pelias data sources](data-sources.md) +- [Pelias data sources](site/documentation/data-sources.md) ### Running your own Pelias -- [Getting started](getting_started_install.md) Start here if you're looking to install Pelias -- [Pelias from scratch](pelias_from_scratch.md) More in-depth instructions for installing Pelias -- [Full planet build considerations](full_planet_considerations.md) Special information on running a full planet Pelias build -- [Service descriptions](services.md) A description of all the Pelias services, and when they are used -- [Software Requirements](requirements.md) A list of all software requirements for Pelias +- [Getting started](site/documentation/getting-started-install.md) Start here if you're looking to install Pelias +- [Pelias from scratch](site/documentation/pelias-from-scratch.md) More in-depth instructions for installing Pelias +- [Full planet build considerations](site/documentation/full-planet-considerations.md) Special information on running a full planet Pelias build +- [Service descriptions](site/documentation/services.md) A description of all the Pelias services, and when they are used +- [Software Requirements](site/documentation/requirements.md) A list of all software requirements for Pelias ### Pelias project development -- [Release notes](release-notes.md). See notable changes in Pelias over time -- [Development roadmap](development/roadmap.md). Plans for future improvements to Pelias. Read this to see what's coming and how you can help +- [Release notes](site/release-notes.md). See notable changes in Pelias over time +- [Development roadmap](site/development/roadmap.md). Plans for future improvements to Pelias. Read this to see what's coming and how you can help ### Misc -- [Glossary of common terms](glossary.md) +- [Glossary of common terms](site/documentation/glossary.md) diff --git a/installing.md b/installing.md deleted file mode 100644 index ccfcde0..0000000 --- a/installing.md +++ /dev/null @@ -1 +0,0 @@ -See our installation guides list at [https://github.com/pelias/documentation/blob/master/getting_started_install.md](https://github.com/pelias/documentation/blob/master/getting_started_install.md) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..1befd6b --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,99 @@ +site_name: Pelias Geocoder +docs_dir: site +site_dir: generated +theme: + name: material + font: + text: Inter + code: JetBrains Mono + logo: assets/Pelias-Logo_horizontal_secondary.png + favicon: assets/favicon_64x64.png + features: + - navigation.instant + - navigation.tracking + - navigation.tabs + - navigation.tabs.sticky + - navigation.sections + - navigation.top + - toc.follow + - search.suggest + - search.highlight + - content.tabs.link + - content.code.annotation + - content.code.copy + - navigation.footer + palette: + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/weather-sunny + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/weather-night + name: Switch to light mode + +extra_css: + - stylesheets/extra.css + +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/pelias/ + - icon: fontawesome/brands/twitter + link: https://twitter.com/pelias_geocoder + - icon: fontawesome/brands/gitter + link: https://gitter.im/pelias/pelias + +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - admonition + - footnotes + - pymdownx.details + - pymdownx.superfences + - pymdownx.mark + - attr_list + +nav: + - Pelias: + - "index.md" + - "fun-facts.md" + - Documentation: + - 'documentation/index.md' + - Getting Started: 'documentation/getting-started-install.md' + - Add Search to a Map: 'documentation/add-search-to-a-map.md' + - Forward Geocoding: 'documentation/search.md' + - Reverse Geocoding: 'documentation/reverse.md' + - Autocomplete: 'documentation/autocomplete.md' + - Structured Geocoding: 'documentation/structured-geocoding.md' + - Place Endpoint: 'documentation/place.md' + - Search Workflows: 'documentation/search-workflows.md' + - Search Response: 'documentation/response.md' + - Result Quality: 'documentation/result-quality.md' + - Searching Address: 'documentation/addresses.md' + - Data Sources: 'documentation/data-sources.md' + - Pelias from Scratch: 'documentation/pelias-from-scratch.md' + - Full Planet Build: 'documentation/full-planet-considerations.md' + - Language Support: 'documentation/language-codes.md' + - Requirements: 'documentation/requirements.md' + - Pelias Services: 'documentation/services.md' + - CORS: 'documentation/use-cors.md' + - HTTP status codes: 'documentation/http-status-codes.md' + - Glossary: 'documentation/glossary.md' + - Development: + - Repository List: 'development/repository-list.md' + - Roadmap: 'development/roadmap.md' + - Code of Conduct: 'development/code-of-conduct.md' + - Contribute: 'contributing.md' + - Release Notes: 'release-notes.md' + - Get an API Key: 'https://geocode.earth/' + +copyright: Pelias is a free open source project. \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1f8b2e0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,64 @@ +attrs==22.1.0 +build==0.10.0 +CacheControl==0.12.11 +certifi==2022.9.24 +cffi==1.15.1 +charset-normalizer==2.1.1 +cleo==2.0.1 +click==8.1.3 +colorama==0.4.6 +crashtest==0.4.1 +cryptography==37.0.4 +distlib==0.3.6 +dulwich==0.21.3 +filelock==3.8.0 +ghp-import==2.1.0 +html5lib==1.1 +idna==3.4 +installer==0.7.0 +jaraco.classes==3.2.3 +jeepney==0.8.0 +Jinja2==3.1.2 +jsonschema==4.16.0 +keyring==23.9.3 +lockfile==0.12.2 +Markdown==3.3.7 +MarkupSafe==2.1.2 +mergedeep==1.3.4 +mkdocs==1.4.2 +mkdocs-material==9.1.6 +mkdocs-material-extensions==1.1.1 +more-itertools==8.14.0 +msgpack==1.0.4 +packaging==22.0 +pexpect==4.8.0 +pipenv==2023.3.20 +pkginfo==1.9.6 +platformdirs==2.5.2 +poetry==1.4.2 +poetry-core==1.5.2 +poetry-plugin-export==1.3.0 +ptyprocess==0.7.0 +pycparser==2.21 +Pygments==2.15.0 +pymdown-extensions==9.11 +pyproject_hooks==1.0.0 +pyrsistent==0.18.1 +python-dateutil==2.8.2 +PyYAML==6.0 +pyyaml_env_tag==0.1 +rapidfuzz==2.13.7 +regex==2023.3.23 +requests==2.28.1 +requests-toolbelt==0.9.1 +SecretStorage==3.3.3 +shellingham==1.5.0 +six==1.16.0 +tomli==2.0.1 +tomlkit==0.11.5 +trove-classifiers==2022.12.22 +urllib3==1.26.12 +virtualenv==20.21.0 +virtualenv-clone==0.5.7 +watchdog==3.0.0 +webencodings==0.5.1 diff --git a/site/CNAME b/site/CNAME new file mode 100644 index 0000000..af6c84b --- /dev/null +++ b/site/CNAME @@ -0,0 +1 @@ +pelias-demo-unaffiliated.adhadse.com \ No newline at end of file diff --git a/site/assets/Pelias-Logo_horizontal_secondary.png b/site/assets/Pelias-Logo_horizontal_secondary.png new file mode 100644 index 0000000..32c3e4f Binary files /dev/null and b/site/assets/Pelias-Logo_horizontal_secondary.png differ diff --git a/site/assets/favicon_64x64.png b/site/assets/favicon_64x64.png new file mode 100644 index 0000000..e4c5c86 Binary files /dev/null and b/site/assets/favicon_64x64.png differ diff --git a/site/assets/images/Pelias Architecture.png b/site/assets/images/Pelias Architecture.png new file mode 100644 index 0000000..456af0e Binary files /dev/null and b/site/assets/images/Pelias Architecture.png differ diff --git a/images/basic-webmap.png b/site/assets/images/basic-webmap.png similarity index 100% rename from images/basic-webmap.png rename to site/assets/images/basic-webmap.png diff --git a/images/boundary_london.png b/site/assets/images/boundary_london.png similarity index 100% rename from images/boundary_london.png rename to site/assets/images/boundary_london.png diff --git a/images/developer-console.png b/site/assets/images/developer-console.png similarity index 100% rename from images/developer-console.png rename to site/assets/images/developer-console.png diff --git a/images/focus_point.png b/site/assets/images/focus_point.png similarity index 100% rename from images/focus_point.png rename to site/assets/images/focus_point.png diff --git a/site/assets/images/forward-geocoding.gif b/site/assets/images/forward-geocoding.gif new file mode 100644 index 0000000..ab050da Binary files /dev/null and b/site/assets/images/forward-geocoding.gif differ diff --git a/images/geocoder-address-search.png b/site/assets/images/geocoder-address-search.png similarity index 100% rename from images/geocoder-address-search.png rename to site/assets/images/geocoder-address-search.png diff --git a/images/geocoder-blank-tab.png b/site/assets/images/geocoder-blank-tab.png similarity index 100% rename from images/geocoder-blank-tab.png rename to site/assets/images/geocoder-blank-tab.png diff --git a/images/geocoder-search-icon.png b/site/assets/images/geocoder-search-icon.png similarity index 100% rename from images/geocoder-search-icon.png rename to site/assets/images/geocoder-search-icon.png diff --git a/site/assets/images/interpolation/120px-Logo_by_hind_128x128.png b/site/assets/images/interpolation/120px-Logo_by_hind_128x128.png new file mode 100644 index 0000000..70dfb22 Binary files /dev/null and b/site/assets/images/interpolation/120px-Logo_by_hind_128x128.png differ diff --git a/site/assets/images/interpolation/192-finborough-rd-tags.png b/site/assets/images/interpolation/192-finborough-rd-tags.png new file mode 100644 index 0000000..bacc84e Binary files /dev/null and b/site/assets/images/interpolation/192-finborough-rd-tags.png differ diff --git a/site/assets/images/interpolation/192-finborough-rd.png b/site/assets/images/interpolation/192-finborough-rd.png new file mode 100644 index 0000000..8377745 Binary files /dev/null and b/site/assets/images/interpolation/192-finborough-rd.png differ diff --git a/site/assets/images/interpolation/Housenumber_example_kms_2.png b/site/assets/images/interpolation/Housenumber_example_kms_2.png new file mode 100644 index 0000000..27ffb65 Binary files /dev/null and b/site/assets/images/interpolation/Housenumber_example_kms_2.png differ diff --git a/site/assets/images/interpolation/JrBdQ.png b/site/assets/images/interpolation/JrBdQ.png new file mode 100644 index 0000000..6629231 Binary files /dev/null and b/site/assets/images/interpolation/JrBdQ.png differ diff --git a/site/assets/images/interpolation/earls-court-51-node-tags.png b/site/assets/images/interpolation/earls-court-51-node-tags.png new file mode 100644 index 0000000..94efda4 Binary files /dev/null and b/site/assets/images/interpolation/earls-court-51-node-tags.png differ diff --git a/site/assets/images/interpolation/earls-court-51-node.png b/site/assets/images/interpolation/earls-court-51-node.png new file mode 100644 index 0000000..14886b4 Binary files /dev/null and b/site/assets/images/interpolation/earls-court-51-node.png differ diff --git a/site/assets/images/interpolation/earls-court-51-way-tags.png b/site/assets/images/interpolation/earls-court-51-way-tags.png new file mode 100644 index 0000000..fad6bb5 Binary files /dev/null and b/site/assets/images/interpolation/earls-court-51-way-tags.png differ diff --git a/site/assets/images/interpolation/earls-court-51-way.png b/site/assets/images/interpolation/earls-court-51-way.png new file mode 100644 index 0000000..3d9eda1 Binary files /dev/null and b/site/assets/images/interpolation/earls-court-51-way.png differ diff --git a/site/assets/images/interpolation/earls-court-square.png b/site/assets/images/interpolation/earls-court-square.png new file mode 100644 index 0000000..5024066 Binary files /dev/null and b/site/assets/images/interpolation/earls-court-square.png differ diff --git a/site/assets/images/interpolation/golden-gate-park.png b/site/assets/images/interpolation/golden-gate-park.png new file mode 100644 index 0000000..08a8368 Binary files /dev/null and b/site/assets/images/interpolation/golden-gate-park.png differ diff --git a/site/assets/images/interpolation/oa-extract.png b/site/assets/images/interpolation/oa-extract.png new file mode 100644 index 0000000..7d9f22a Binary files /dev/null and b/site/assets/images/interpolation/oa-extract.png differ diff --git a/site/assets/images/interpolation/oresund-bridge.png b/site/assets/images/interpolation/oresund-bridge.png new file mode 100644 index 0000000..cc9f7bb Binary files /dev/null and b/site/assets/images/interpolation/oresund-bridge.png differ diff --git a/site/assets/images/interpolation/osm-interpolation-coverage.png b/site/assets/images/interpolation/osm-interpolation-coverage.png new file mode 100644 index 0000000..b44ddf7 Binary files /dev/null and b/site/assets/images/interpolation/osm-interpolation-coverage.png differ diff --git a/site/assets/images/interpolation/osm-interpolation-tag.png b/site/assets/images/interpolation/osm-interpolation-tag.png new file mode 100644 index 0000000..3dd4bf5 Binary files /dev/null and b/site/assets/images/interpolation/osm-interpolation-tag.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-1-tags.png b/site/assets/images/interpolation/osm-street-multiple-1-tags.png new file mode 100644 index 0000000..fc5a7e6 Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-1-tags.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-1.png b/site/assets/images/interpolation/osm-street-multiple-1.png new file mode 100644 index 0000000..948a34e Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-1.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-2-tags.png b/site/assets/images/interpolation/osm-street-multiple-2-tags.png new file mode 100644 index 0000000..d61aa3f Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-2-tags.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-2.png b/site/assets/images/interpolation/osm-street-multiple-2.png new file mode 100644 index 0000000..0f073d8 Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-2.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-3-tags.png b/site/assets/images/interpolation/osm-street-multiple-3-tags.png new file mode 100644 index 0000000..a8920ad Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-3-tags.png differ diff --git a/site/assets/images/interpolation/osm-street-multiple-3.png b/site/assets/images/interpolation/osm-street-multiple-3.png new file mode 100644 index 0000000..2e80e55 Binary files /dev/null and b/site/assets/images/interpolation/osm-street-multiple-3.png differ diff --git a/site/assets/images/interpolation/osm-street-simple-tags.png b/site/assets/images/interpolation/osm-street-simple-tags.png new file mode 100644 index 0000000..c39c320 Binary files /dev/null and b/site/assets/images/interpolation/osm-street-simple-tags.png differ diff --git a/site/assets/images/interpolation/osm-street-simple.png b/site/assets/images/interpolation/osm-street-simple.png new file mode 100644 index 0000000..fc35781 Binary files /dev/null and b/site/assets/images/interpolation/osm-street-simple.png differ diff --git a/site/assets/images/interpolation/search-conflation-problem.png b/site/assets/images/interpolation/search-conflation-problem.png new file mode 100644 index 0000000..231a207 Binary files /dev/null and b/site/assets/images/interpolation/search-conflation-problem.png differ diff --git a/site/assets/images/interpolation/search-conflation-problem2.png b/site/assets/images/interpolation/search-conflation-problem2.png new file mode 100644 index 0000000..6f2be68 Binary files /dev/null and b/site/assets/images/interpolation/search-conflation-problem2.png differ diff --git a/site/assets/images/interpolation/search-conflation-problem3.png b/site/assets/images/interpolation/search-conflation-problem3.png new file mode 100644 index 0000000..8becd29 Binary files /dev/null and b/site/assets/images/interpolation/search-conflation-problem3.png differ diff --git a/site/assets/images/interpolation/tiger-interpolation-basics.png b/site/assets/images/interpolation/tiger-interpolation-basics.png new file mode 100644 index 0000000..dafd2fb Binary files /dev/null and b/site/assets/images/interpolation/tiger-interpolation-basics.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-node1-tags.png b/site/assets/images/interpolation/wetherby-mansions-node1-tags.png new file mode 100644 index 0000000..84d9c06 Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-node1-tags.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-node1.png b/site/assets/images/interpolation/wetherby-mansions-node1.png new file mode 100644 index 0000000..97cedd1 Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-node1.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-node2-tags.png b/site/assets/images/interpolation/wetherby-mansions-node2-tags.png new file mode 100644 index 0000000..6053d41 Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-node2-tags.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-node2.png b/site/assets/images/interpolation/wetherby-mansions-node2.png new file mode 100644 index 0000000..bec694c Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-node2.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-way-tags.png b/site/assets/images/interpolation/wetherby-mansions-way-tags.png new file mode 100644 index 0000000..d03268f Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-way-tags.png differ diff --git a/site/assets/images/interpolation/wetherby-mansions-way.png b/site/assets/images/interpolation/wetherby-mansions-way.png new file mode 100644 index 0000000..b2e4768 Binary files /dev/null and b/site/assets/images/interpolation/wetherby-mansions-way.png differ diff --git a/images/overlapping_boundaries.gif b/site/assets/images/overlapping_boundaries.gif similarity index 100% rename from images/overlapping_boundaries.gif rename to site/assets/images/overlapping_boundaries.gif diff --git a/site/assets/images/reverse-geocoding.gif b/site/assets/images/reverse-geocoding.gif new file mode 100644 index 0000000..1cfa278 Binary files /dev/null and b/site/assets/images/reverse-geocoding.gif differ diff --git a/images/world_all.png b/site/assets/images/world_all.png similarity index 100% rename from images/world_all.png rename to site/assets/images/world_all.png diff --git a/images/world_circle.png b/site/assets/images/world_circle.png similarity index 100% rename from images/world_circle.png rename to site/assets/images/world_circle.png diff --git a/images/world_country.png b/site/assets/images/world_country.png similarity index 100% rename from images/world_country.png rename to site/assets/images/world_country.png diff --git a/images/world_rect.png b/site/assets/images/world_rect.png similarity index 100% rename from images/world_rect.png rename to site/assets/images/world_rect.png diff --git a/site/contributing.md b/site/contributing.md new file mode 100644 index 0000000..a60ef73 --- /dev/null +++ b/site/contributing.md @@ -0,0 +1,53 @@ +Pelias can't succeed without contributions from community members like you! Contributions come in many different shapes and sizes. In this file we provide guidance around two of the most common types of contributions: opening issues and opening pull requests. + +# Community Values + +We ask that you are respectful when contributing to Pelias or engaging with our community. As a community, we appreciate the fact that contributors might be approaching the project from a different perspective and background. We hope that beginners as well as advanced users will be able to use and contribute back to Pelias. We want to encourage contributions and feedback from all over the world, which means that English might not be a contributor's native language, and sometimes we may encounter cultural differences. Contructive disagreements can be essential to moving a project forward, but disrespectful language or behavior will not be tolerated. + +Above all, be patient, be respectful, and be kind! + +# Submitting Issues + +All issues for Pelias are housed in the [pelias/pelias](https://github.com/pelias/pelias) repo. Before opening an issue, be sure to search the repository to see if someone else has asked your question before. If not, go ahead and [open a new issue](https://github.com/pelias/pelias/issues/new). + +## Submitting technical bugs + +When submitting bug reports, please be sure to give us as much context as possible so that we can reproduce the error you encountered. Be sure to include: +- System conditons (OS, browser, etc) +- Steps to reproduce +- Expected outcome +- Actual outcome +- Screenshots, if applicable +- Code that exposes the bug, if you have it (such as a failing test or a barebones script) + +## Submitting issues around search result quality + +It's important to get feedback about the quality of local search results. When it comes to things like address structure, capitalization, and spelling errors, your local knowledge will make it easier for us to understand the problem. When submitting issues be sure to include: +- Where in the world you were searching +- Your search query +- Your expected result +- Your actual result + + +# Pull Requests Welcome! + +## Project standards overview + +Pelias has several miscellaneous standards: + +- we use [JSHint](http://jshint.com/docs/) for linting +- we use [Github Actions](https://github.com/) for continuous integration +- we use [Winston](https://www.npmjs.com/package/winston) for logging +- we *love* tests, especially when written with [tape](https://github.com/substack/tape) +- we use [semver](http://semver.org/) for package versioning +- we *loosely* use [JSDoc](http://usejsdoc.org/index.html) for documenting code, as described [here](in_code_documentation_guidelines.md) + +`jshint` and any unit tests in a project will be automatically invoked when you commit to an existing project; make +sure they exit successfully! + +## Active contributors + +We'll gladly invite active contributors to become members of the [Pelias organization](https://github.com/pelias). New +members will gain direct write permissions, *and with great power comes great responsibility*. To ensure that any new +repositories that you create conform to Pelias standards, we developed [pelias-init](https://github.com/pelias/init), a +simple project generator that will initialize all of the boilerplate needed to get started on something new. \ No newline at end of file diff --git a/site/development/code-of-conduct.md b/site/development/code-of-conduct.md new file mode 100644 index 0000000..c7d46d4 --- /dev/null +++ b/site/development/code-of-conduct.md @@ -0,0 +1,73 @@ +# Contributor Code of Conduct + +This code of conduct outlines our expectations for participants within the **Pelias** community, as well as steps to reporting unacceptable behavior. We are committed to providing a welcoming and inspiring community for all and expect our code of conduct to be honored. Anyone who violates this code of conduct may be banned from the community. + +Our open source community strives to: + +* **Be friendly and patient.** +* **Be welcoming**: We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability. +* **Be considerate**: Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and colleagues, and you should take those consequences into account when making decisions. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language. +* **Be respectful**: Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. It’s important to remember that a community where people feel uncomfortable or threatened is not a productive one. +* **Be careful in the words that we choose**: we are a community of professionals, and we conduct ourselves professionally. Be kind to others. Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. +* **Try to understand why we disagree**: Disagreements, both social and technical, happen all the time. It is important that we resolve disagreements and differing views constructively. Remember that we’re different. The strength of our community comes from its diversity, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to err and blaming each other doesn’t get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes. + +## Definitions + +Harassment includes, but is not limited to: + +- Offensive comments related to gender, gender identity and expression, sexual orientation, disability, mental illness, neuro(a)typicality, physical appearance, body size, race, age, regional discrimination, political or religious affiliation +- Unwelcome comments regarding a person’s lifestyle choices and practices, including those related to food, health, parenting, drugs, and employment +- Deliberate misgendering. This includes deadnaming or persistently using a pronoun that does not correctly reflect a person's gender identity. You must address people by the name they give you when not addressing them by their username or handle +- Physical contact and simulated physical contact (eg, textual descriptions like “*hug*” or “*backrub*”) without consent or after a request to stop +- Threats of violence, both physical and psychological +- Incitement of violence towards any individual, including encouraging a person to commit suicide or to engage in self-harm +- Deliberate intimidation +- Stalking or following +- Harassing photography or recording, including logging online activity for harassment purposes +- Sustained disruption of discussion +- Unwelcome sexual attention, including gratuitous or off-topic sexual images or behaviour +- Pattern of inappropriate social contact, such as requesting/assuming inappropriate levels of intimacy with others +- Continued one-on-one communication after requests to cease +- Deliberate “outing” of any aspect of a person’s identity without their consent except as necessary to protect others from intentional abuse +- Publication of non-harassing private communication + +Our open source community prioritizes marginalized people’s safety over privileged people’s comfort. We will not act on complaints regarding: + +- ‘Reverse’ -isms, including ‘reverse racism,’ ‘reverse sexism,’ and ‘cisphobia’ +- Reasonable communication of boundaries, such as “leave me alone,” “go away,” or “I’m not discussing this with you” +- Refusal to explain or debate social justice concepts +- Communicating in a ‘tone’ you don’t find congenial +- Criticizing racist, sexist, cissexist, or otherwise oppressive behavior or assumptions + + +### Diversity Statement + +We encourage everyone to participate and are committed to building a community for all. Although we will fail at times, we seek to treat everyone both as fairly and equally as possible. Whenever a participant has made a mistake, we expect them to take responsibility for it. If someone has been harmed or offended, it is our responsibility to listen carefully and respectfully, and do our best to right the wrong. + +Although this list cannot be exhaustive, we explicitly honor diversity in age, gender, gender identity or expression, culture, ethnicity, language, national origin, political beliefs, profession, race, religion, sexual orientation, socioeconomic status, and technical ability. We will not tolerate discrimination based on any of the protected +characteristics above, including participants with disabilities. + +### Reporting Issues + +If you experience or witness unacceptable behavior—or have any other concerns—please report it by contacting us via **team@pelias.io**. All reports will be handled with discretion. In your report please include: + +- Your contact information. +- Names (real, nicknames, or pseudonyms) of any individuals involved. If there are additional witnesses, please +include them as well. Your account of what occurred, and if you believe the incident is ongoing. If there is a publicly available record (e.g. a mailing list archive or a public IRC logger), please include a link. +- Any additional information that may be helpful. + +After filing a report, a representative will contact you personally, review the incident, follow up with any additional questions, and make a decision as to how to respond. If the person who is harassing you is part of the response team, they will recuse themselves from handling your incident. If the complaint originates from a member of the response team, it will be handled by a different member of the response team. We will respect confidentiality requests for the purpose of protecting victims of abuse. + +### Attribution & Acknowledgements + +We all stand on the shoulders of giants across many open source communities. We'd like to thank the communities and projects that established code of conducts and diversity statements as our inspiration: + +* [Django](https://www.djangoproject.com/conduct/reporting/) +* [Python](https://www.python.org/community/diversity/) +* [Ubuntu](http://www.ubuntu.com/about/about-ubuntu/conduct) +* [Contributor Covenant](http://contributor-covenant.org/) +* [Geek Feminism](http://geekfeminism.org/about/code-of-conduct/) +* [Citizen Code of Conduct](http://citizencodeofconduct.org/) + + +_This text was adopted from the [Open Code of Conduct](http://todogroup.org/opencodeofconduct/) published by [TODO](http://todogroup.org). Source text available [here](https://github.com/todogroup/opencodeofconduct/blob/gh-pages/index.md)._ \ No newline at end of file diff --git a/development/repository_list.md b/site/development/repository-list.md similarity index 100% rename from development/repository_list.md rename to site/development/repository-list.md diff --git a/development/roadmap.md b/site/development/roadmap.md similarity index 100% rename from development/roadmap.md rename to site/development/roadmap.md diff --git a/add-search-to-a-map.md b/site/documentation/add-search-to-a-map.md similarity index 97% rename from add-search-to-a-map.md rename to site/documentation/add-search-to-a-map.md index ed4286f..25da931 100644 --- a/add-search-to-a-map.md +++ b/site/documentation/add-search-to-a-map.md @@ -2,7 +2,7 @@ [Pelias](https://mapzen.com/products/search/) is a modern, geographic search service based entirely on open-source tools and open data. Use this functionality to enhance any app that has a geographic context, such as ones that help in delivering goods, locating hotels or venues, or providing local weather forecasts. -Through a process known as [geocoding](https://en.wikipedia.org/wiki/Geocoding), Pelias allows you to enter an address or the name of a landmark or business, and the service translates the result into geographic coordinates for mapping. Pelias is built on [Pelias](pelias.io), an open-source geocoding project. +Through a process known as [geocoding](https://en.wikipedia.org/wiki/Geocoding), Pelias allows you to enter an address or the name of a landmark or business, and the service translates the result into geographic coordinates for mapping. Pelias is built on [Pelias](https://pelias.io), an open-source geocoding project. ## Get ready for the tutorial @@ -42,7 +42,7 @@ _Tip: The end of this page has a finished version of the code that you can use t 4. Name your the document `index.html` (where the file name is `index` and the type is `.html`) and save it. 5. Drag your index.html file onto a web browser tab. It should show your title, `My Geocoding Map`, but the web page canvas will be blank. - ![Blank html page](images/geocoder-blank-tab.png) + ![Blank html page](../assets/images/geocoder-blank-tab.png) Your HTML should look like this: @@ -182,7 +182,7 @@ At this point, you have a map! You should see a map, zoom controls, and attribut To recap how you created this, you added references to the Mapzen JS and CSS files, a map `
` with a declared width, and assigned the `map` value to `L.Mapzen.map`. -![Leaflet canvas map with controls and attribution](images/basic-webmap.png) +![Leaflet canvas map with controls and attribution](../assets/images/basic-webmap.png) ## Add the Search box @@ -197,7 +197,7 @@ So far, you have referenced the necessary files, initialized Leaflet with a map 2. Save your edits and refresh the browser. You should see search button in the left corner. If you want to expand the button to a box, you can change this behavior in the geocoder options. - ![Search icon on the map canvas](images/geocoder-search-icon.png) + ![Search icon on the map canvas](../assets/images/geocoder-search-icon.png) Your `` section should look like this: @@ -224,7 +224,7 @@ Now, you will test your search box by finding a few locations. As you type, the 1. On the map, type `Seattle University` in the Search box. 2. In the results list, find the entry for `Seattle University` and click it to zoom and add a point to the map at that location. (The point is only on your map, and does not update OpenStreetMap.) - ![Entering an address to find on the map](images/geocoder-address-search.png) + ![Entering an address to find on the map](../assets/images/geocoder-address-search.png) 3. Search for other addresses or places to experiment with the search function and get an idea of the results it returns. For example, you might try looking for a point of interest in Seattle, your work address, or a city outside the United States. @@ -279,7 +279,7 @@ geocoder.addTo(map); _Tip: You can install a plug-in for your browser to display JSON in a more formatted manner. You can search the web store for your browser to find and install applicable products._ -![Search endpoint query in the browser developer console](images/developer-console.png) +![Search endpoint query in the browser developer console](../assets/images/developer-console.png) ## Choose which data sources to search diff --git a/addresses.md b/site/documentation/addresses.md similarity index 100% rename from addresses.md rename to site/documentation/addresses.md diff --git a/autocomplete.md b/site/documentation/autocomplete.md similarity index 98% rename from autocomplete.md rename to site/documentation/autocomplete.md index 54fd8ce..6107f17 100644 --- a/autocomplete.md +++ b/site/documentation/autocomplete.md @@ -173,7 +173,7 @@ with `layers=venue` you will see only the venues by that name ### Search within a circular region -![Searching within a circle](/images/world_circle.png) +![Searching within a circle](/site/assets/images/world_circle.png) Sometimes you don't have a rectangle to work with, but rather you have a point on earth—for example, your location coordinates—and a maximum distance within which acceptable results can be located. @@ -199,7 +199,7 @@ You can see the results have fewer than the standard 10 items because there are ### Country -![Searching in a country](/images/world_country.png) +![Searching in a country](/site/assets/images/world_country.png) Sometimes your work might require that all the search results be from a particular country or a list of countries. To do this, you can set the `boundary.country` parameter value to a comma separated list of alpha-2 or alpha-3 [ISO-3166 country code](https://en.wikipedia.org/wiki/ISO_3166-1). diff --git a/data-sources.md b/site/documentation/data-sources.md similarity index 100% rename from data-sources.md rename to site/documentation/data-sources.md diff --git a/full_planet_considerations.md b/site/documentation/full-planet-considerations.md similarity index 100% rename from full_planet_considerations.md rename to site/documentation/full-planet-considerations.md diff --git a/getting_started_install.md b/site/documentation/getting-started-install.md similarity index 91% rename from getting_started_install.md rename to site/documentation/getting-started-install.md index df6ab5b..711beb3 100644 --- a/getting_started_install.md +++ b/site/documentation/getting-started-install.md @@ -16,7 +16,7 @@ The Pelias docker installation should work great for any small area, and is grea different Pelias services during development. However, we understand not everyone can or wants to use Docker, and that people want more details on how things work. -For this, we have our [from scratch installation guide](pelias_from_scratch.md) +For this, we have our [from scratch installation guide](pelias-from-scratch.md) ### Installing in production? @@ -31,5 +31,5 @@ if you have something to share or want to get started. Running Pelias for a city or small country is pretty easy. However, due to the amount of data involved, a full planet build is harder to pull off. -See our [full planet build guide](full_planet_considerations.md) for some recommendations on how to +See our [full planet build guide](full-planet-considerations.md) for some recommendations on how to make it easier and more performant. diff --git a/glossary.md b/site/documentation/glossary.md similarity index 100% rename from glossary.md rename to site/documentation/glossary.md diff --git a/http-status-codes.md b/site/documentation/http-status-codes.md similarity index 100% rename from http-status-codes.md rename to site/documentation/http-status-codes.md diff --git a/site/documentation/index.md b/site/documentation/index.md new file mode 100644 index 0000000..3f6bf5f --- /dev/null +++ b/site/documentation/index.md @@ -0,0 +1,40 @@ +# Pelias Documentation +Here is where you can find all documentation for the [Pelias geocoder](https://github.com/pelias/pelias/). + +## Core Features and API Documentation + +### Endpoint descriptions +- [Forward geocoding](search.md) (**/v1/search**) to find a place by searching for an address or name +- [Reverse geocoding](reverse.md) (**/v1/reverse**) to find what is located at a certain coordinate location +- [Autocomplete](autocomplete.md) (**/v1/autocomplete**) to give real-time result suggestions without having to type the whole location +- [Structured Geocoding](structured-geocoding.md) (**/v1/search/structured**) (*beta*) to find a place with data already separated into housenumber, street, city, etc +- [Place endpoint](place.md) (**/v1/place**) for details on a place returned from a previous query + +_Not sure which Endpoint to use? We have a [page](search-workflows.md) for that_ + +### Query parameters and options +- [Global coverage with prioritized local results](search.md#prioritize-results-by-proximity) +- [Language support](language-codes.md) for seeing results in different languages + +### Response Properties + +- [Full list of response properties](response.md) +- [Confidence scores, match\_types and other tools for determining result quality](result-quality.md) + +## Data Sources +- [Pelias data sources](data-sources.md) + +## Running your own Pelias +- [Getting started](getting-started-install.md) Start here if you're looking to install Pelias +- [Pelias from scratch](pelias-from-scratch.md) More in-depth instructions for installing Pelias +- [Full planet build considerations](full-planet-considerations.md) Special information on running a full planet Pelias build +- [Service descriptions](services.md) A description of all the Pelias services, and when they are used +- [Software Requirements](requirements.md) A list of all software requirements for Pelias + +## Pelias project development +- [Release notes](/release-notes.md). See notable changes in Pelias over time +- [Development roadmap](/development/roadmap.md). Plans for future improvements to Pelias. Read this to see what's coming and how you can help + +## Misc +- [Glossary of common terms](glossary.md) + diff --git a/language-codes.md b/site/documentation/language-codes.md similarity index 100% rename from language-codes.md rename to site/documentation/language-codes.md diff --git a/pelias_from_scratch.md b/site/documentation/pelias-from-scratch.md similarity index 99% rename from pelias_from_scratch.md rename to site/documentation/pelias-from-scratch.md index d54ac42..31a8c65 100644 --- a/pelias_from_scratch.md +++ b/site/documentation/pelias-from-scratch.md @@ -295,6 +295,6 @@ for the city of London. [http://localhost:3100/v1/reverse?point.lon=-73.986027&point.lat=40.748517](http://localhost:3100/v1/reverse?point.lon=-73.986027&point.lat=40.748517): a reverse geocode for results near the Empire State Building in New York City. For information on everything Pelias can do, see our [documentation -index](README.md). +index](/). Happy geocoding! diff --git a/place.md b/site/documentation/place.md similarity index 100% rename from place.md rename to site/documentation/place.md diff --git a/requirements.md b/site/documentation/requirements.md similarity index 100% rename from requirements.md rename to site/documentation/requirements.md diff --git a/response.md b/site/documentation/response.md similarity index 99% rename from response.md rename to site/documentation/response.md index cae050d..d87c489 100644 --- a/response.md +++ b/site/documentation/response.md @@ -1,4 +1,4 @@ -# Search results +# Search Response When requesting results from Pelias, you will always get back GeoJSON results, unless something goes terribly wrong, in which case you'll get an error message. diff --git a/result_quality.md b/site/documentation/result-quality.md similarity index 100% rename from result_quality.md rename to site/documentation/result-quality.md diff --git a/reverse.md b/site/documentation/reverse.md similarity index 100% rename from reverse.md rename to site/documentation/reverse.md diff --git a/search-workflows.md b/site/documentation/search-workflows.md similarity index 100% rename from search-workflows.md rename to site/documentation/search-workflows.md diff --git a/search.md b/site/documentation/search.md similarity index 98% rename from search.md rename to site/documentation/search.md index 0b391fb..d6f43ae 100644 --- a/search.md +++ b/site/documentation/search.md @@ -13,7 +13,7 @@ All Pelias requests share the same format: ## Search the world -![Searching globally](/images/world_all.png) +![Searching globally](/assets/images/world_all.png) In the simplest search, you can provide only one parameter, the text you want to match in any part of the location details. To do this, build a query where the `text` parameter is set to the item you want to find. @@ -71,7 +71,7 @@ If you are looking for places in a particular region, or country, or only want t ### Search within a particular country -![Searching in a country](/images/world_country.png) +![Searching in a country](/assets/images/world_country.png) Sometimes your work might require that all the search results be from a particular country or a list of countries. To do this, you can set the `boundary.country` parameter value to a comma separated list of alpha-2 or alpha-3 [ISO-3166 country code](https://en.wikipedia.org/wiki/ISO_3166-1). @@ -116,7 +116,7 @@ Results in the United States: ### Search within a rectangular region -![Searching in a bounding box](/images/world_rect.png) +![Searching in a bounding box](/assets/images/world_rect.png) To specify the boundary using a rectangle, you need latitude, longitude coordinates for two diagonals of the bounding box (the minimum and the maximum latitude, longitude). @@ -147,7 +147,7 @@ Tip: You can look up a bounding box for a known region with this [web tool](http ### Search within a circular region -![Searching within a circle](/images/world_circle.png) +![Searching within a circle](/assets/images/world_circle.png) Sometimes you don't have a rectangle to work with, but rather you have a point on earth—for example, your location coordinates—and a maximum distance within which acceptable results can be located. @@ -196,7 +196,7 @@ In the query above, `whosonfirst:region:85688585`, is the Pelias `gid` for Oklah ### Specify multiple boundaries -![Searching within multiple regions](/images/overlapping_boundaries.gif) +![Searching within multiple regions](/assets/images/overlapping_boundaries.gif) If you're going to try using multiple boundary types in a single search request, be aware that the results will come from the intersection of all the boundaries. So, if you provide regions that don't overlap, you'll be looking at an empty set of results. @@ -205,7 +205,7 @@ Many use cases call for the ability to promote nearby results to the top of the ### Prioritize around a point -![Searching around a point](/images/focus_point.png) +![Searching around a point](/assets/images/focus_point.png) By specifying a `focus.point`, results will be sorted in part by their proximity to the given coordinate. All else being equal, results closest to the point will show up higher. However, unlike a `boundary.circle` query, important results far from the given coordinate may still be returned. This allows, for example, [a query for places called Paris with a `focus.point` value in Texas to return both Paris, TX and Paris, France](http://pelias.github.io/compare/#/v1/autocomplete%3Ffocus.point.lat=33.7568&focus.point.lon=-95.5362&layers=locality&sources=wof&text=paris). diff --git a/services.md b/site/documentation/services.md similarity index 100% rename from services.md rename to site/documentation/services.md diff --git a/structured-geocoding.md b/site/documentation/structured-geocoding.md similarity index 100% rename from structured-geocoding.md rename to site/documentation/structured-geocoding.md diff --git a/use-cors.md b/site/documentation/use-cors.md similarity index 100% rename from use-cors.md rename to site/documentation/use-cors.md diff --git a/site/fun-facts.md b/site/fun-facts.md new file mode 100644 index 0000000..9f58586 --- /dev/null +++ b/site/fun-facts.md @@ -0,0 +1,74 @@ +# Fun Facts + +Here are just some of the interesting things we've come across in our geocoding travels. +If you find something thought provoking **we'd love a pull request**! + +----- + +### Stravenue + +> *A stravenue (portmanteau of street and avenue) is a type of road particular to Tucson, Arizona. The United States Postal Service officially supports the abbreviation STRA for stravenues.[1] A stravenue runs "diagonally between and intersects a Street and an Avenue."[2] By convention in Tucson, streets run east-west while avenues run north-south. However, in a few areas of Tucson, primarily around the central part of the city, which is divided by railroad tracks running diagonally from southeast to northwest, builders created small subdivisions of roads and houses that also are laid out on a diagonal basis rather than the normal east-west or north-south. Most of these subdivisions are located near either Benson Highway or Aviation Highway, which also run southeast to northwest.[3] "The word Stravenue was originally coined by Roy Drachman when he was developing the subdivision called Pueblo Gardens," in 1948.[4]* +> +> *Wikipedia* + +- [Source](https://en.m.wikipedia.org/wiki/Stravenue) + +----- + +### Leading 0 house numbers + +> *In Portland, there are Zero-Leading Addresses that are different from non-Zero-Leading addresses. Said another way, there could be two separate residences ~1 mile apart, that have almost the exact same address, with the only differentiation being a leading-zero on the number (not really a number in that case). Trimming off leading zeros from address numbers is not a valid practice for addresses in Portland.* +> +> *see: https://en.wikipedia.org/wiki/Portland,_Oregon#Neighborhoods “East-West addresses in this area are denoted with a leading zero (instead of a minus sign). This means 0246 SW California St. is not the same as 246 SW California St. Many mapping programs are unable to distinguish...”* +> +> *TriMet* + +- [Source](https://github.com/pelias/pelias/issues/524) +- [Source](https://en.wikipedia.org/wiki/Portland,_Oregon#Neighborhoods) + +----- + +### Stranger than fiction: Agloe, New York + +> *Agloe is a fictional hamlet in Colchester, Delaware County, New York, that became an actual landmark after mapmakers made up the community as a "copyright trap".* +> +> ![](https://upload.wikimedia.org/wikipedia/en/4/40/FictionalAgloeNewYork.PNG) +> +> *Wikipedia* + +- [Source](https://en.wikipedia.org/wiki/Agloe,_New_York) + +----- + +### Circleville Squaring Company + +> Dissatisfaction among residents rose over Circleville's layout, however. During 1837 at the request of the town, the Ohio General Assembly authorized the "Circleville Squaring Company" to convert the town plan into a squared grid, as was typical of other platted towns. +> +> ![](https://upload.wikimedia.org/wikipedia/en/thumb/5/53/CirclevilleOhioSeal.png/100px-CirclevilleOhioSeal.png) +> +> *Wikipedia* + +- [Source](https://en.wikipedia.org/wiki/Circleville,_Ohio) + +----- + +### Joint Custody of Pheasant Island + +>What's really unusual about Pheasant Island is that Spain and France don't share the territory at the same time. By the terms of the 1659 treaty, they alternate sovereignty. Every February, French representatives meet their counterparts on Pheasant Island to hand it over to the Spaniards; every August, they get it back. This has happened over seven hundred times. Geography buff Frank Jacobs has likened this to a 350-year timeshare, or "an extremely slow game of ping-pong." To me, it sounds more like a divorce custody arrangement. "Is this your weekend to be French? France will pick you up after school." +> +> *Conde Nast Traveler* + +- [Source](http://www.cntraveler.com/story/why-pheasant-island-is-sometimes-in-france-sometimes-in-spain) + +----- + +### Ice cream lovers beware! + +> Carmel-by-the-Sea's one-square mile village is as unique in charm as it is in fun facts. No high heels law*, no street addresses, Clint Eastwood was once mayor, and Doris Day helped make Carmel dog heaven on Earth are a few of the most popular ice breakers when meeting locals and visitors in this European-style town. +> Also, there are no chain restaurants permitted and an ice cream ordinance. +> +> * high heels allowed with permit +> +> ![](https://www.carmelcalifornia.com/webart/map3_sm.jpg) + +- [Source](http://www.carmelcalifornia.com/fun-facts-about-carmel.htm?PageSpeed=noscript) \ No newline at end of file diff --git a/site/index.md b/site/index.md new file mode 100644 index 0000000..8cd959d --- /dev/null +++ b/site/index.md @@ -0,0 +1,252 @@ +# Pelias +A modular, open-source geocoder built on top of Elasticsearch for fast and accurate global search. + +**This is a DEMO website, not affiliated by Pelias by any means and is only meant for development purpose** + +

+ +

+

A modular, open-source search engine for our world.

+

Pelias is a geocoder powered completely by open data, available freely to everyone.

+

+ + + +

+

+ Local Installation · + Cloud Webservice · + Documentation · + Community Chat +

+ +Pelias is a search engine for places worldwide, powered by open data. It turns addresses and place names into geographic coordinates, and turns geographic coordinates into places and addresses. With Pelias, you’re able to turn your users’ place searches into actionable geodata and transform your geodata into real places. + +We think open data, open source, and open strategy win over proprietary solutions at any part of the stack and we want to ensure the services we offer are in line with that vision. We believe that an open geocoder improves over the long-term only if the community can incorporate truly representative local knowledge. + + + +### What's a geocoder do anyway? + +Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location on the Earth's surface for that place. + +![geocode](/assets/images/forward-geocoding.gif){: .center} + +### ... and a reverse geocoder, what's that? + +Reverse geocoding is the opposite: returning a list of places near a given latitude/longitude point. + +![reverse](/assets/images/reverse-geocoding.gif){: .center} + +### What are the most interesting features of Pelias? + +- Completely open-source and MIT licensed +- A powerful data import architecture: Pelias supports many open-data projects out of the box but also works great with private data +- Support for searching and displaying results in many languages +- Fast and accurate autocomplete for user-facing geocoding +- Support for many result types: addresses, venues, cities, countries, and more +- Modular design, so you don't need to be an expert in everything to make changes +- Easy installation with minimal external dependencies + +### What are the main goals of the Pelias project? + +- Provide accurate search results +- Work equally well for a small city and the entire planet +- Be highly configurable, so different use cases can be handled easily and efficiently +- Provide a friendly, welcoming, helpful community that takes input from people all over the world + +### Where did Pelias come from? + +Pelias was created in 2014 as an early project at [Mapzen](https://mapzen.com). After Mapzen's shutdown in 2017, Pelias is now [part of the Linux Foundation](https://www.linuxfoundation.org/press-release/2019/01/mapzen-open-source-data-and-software-for-real-time-mapping-applications-to-become-a-linux-foundation-project/). + +### How does it work? + +Magic! (Just kidding) Like any geocoder, Pelias combines [full text search](https://en.wikipedia.org/wiki/Full_text_search) +techniques with knowledge of geography to quickly search over many millions of records, each representing some sort of location on Earth. + +The Pelias architecture has three main components and several smaller pieces. + +![A diagram of the Pelias architecture.](/assets/images/Pelias%20Architecture.png){: .center} + +#### Data importers + +The importers filter, normalize, and ingest geographic datasets into the Pelias database. Currently there are six officially supported importers: + +* **[OpenStreetMap](https://github.com/pelias/openstreetmap/)**: supports importing nodes and ways from [OpenStreetMap](http://openstreetmap.org/) +* **[OpenAddresses](https://github.com/pelias/openaddresses/)**: supports importing the hundreds of millions of global addresses collected from various authoritative government sources by [OpenAddresses](https://openaddresses.io/) +* **[Who's on First](https://github.com/pelias/whosonfirst/)**: supports importing admin areas and venues from [Who's on First](https://www.whosonfirst.org/) +* **[Geonames](https://github.com/pelias/geonames/)**: supports importing admin records and venues from [Geonames](http://www.geonames.org/) +* **[Polylines](https://github.com/pelias/polylines)**: supports any data in the [Google Polyline format](https://developers.google.com/maps/documentation/utilities/polylinealgorithm?csw=1). It's mainly used to import roads from OpenStreetMap +* **[CSV](https://github.com/pelias/csv-importer)**: supports importing any data in CSV format, which is great for custom data or proprietary data + +We are always discussing [supporting additional datasets](https://github.com/pelias/pelias/issues/254). Pelias users can also write their own importers, for example to import proprietary data into your own instance of Pelias. + +#### Database +The underlying datastore that does most of the query heavy-lifting and powers our search results. We use [Elasticsearch](https://www.elastic.co/). Currently versions 6 and 7 are supported. + +We've built a tool called [pelias-schema](https://github.com/pelias/schema/) that sets up Elasticsearch indices properly for Pelias. + +#### Frontend services + +This is where the actual geocoding process happens, and includes the components that users interact with when performing geocoding queries. The services are: + + * **[API](https://github.com/pelias/api)**: The API service defines the Pelias API, and talks to Elasticsearch or other services as needed to perform queries. + * **[Placeholder](https://github.com/pelias/placeholder)**: A service built specifically to capture the relationship between administrative areas (a catch-all term meaning anything like a city, state, country, etc). Elasticsearch does not handle relational data very well, so we built Placeholder specifically to manage this piece. + * **[PIP](https://github.com/pelias/pip-service)**: For reverse geocoding, it's important to be able to perform [point-in-polygon](https://en.wikipedia.org/wiki/Point_in_polygon)(PIP) calculations quickly. The PIP service is is very good at quickly determining which admin area polygons a given point lies in. + * **[Libpostal](https://github.com/pelias/libpostal-service)**: Pelias uses the [libpostal](https://github.com/openvenues/libpostal) project for parsing addresses using the power of machine learning. We use a [Go service](https://github.com/whosonfirst/go-whosonfirst-libpostal) built by the [Who's on First](https://whosonfirst.org) team to make this happen quickly and efficiently. + * **[Interpolation](https://github.com/pelias/interpolation/)**: This service knows all about addresses and streets. With that knowledge, it is able to supplement the _known_ addresses that are stored directly in Elasticsearch and return fairly accurate _estimated_ address results for many more queries than would otherwise be possible. + +#### Dependencies + +These are software projects that are not used directly but are used by other components of Pelias. + +There are lots of these, but here are some important ones: + +* [model](https://github.com/pelias/model): provide a single library for creating documents that fit the Pelias Elasticsearch schema. This is a core component of our flexible importer architecture +* [wof-admin-lookup](https://github.com/pelias/wof-admin-lookup): A library for performing administrative lookup using point-in-polygon math. Previously included in each of the importers but now only used by the PIP service. +* [query](https://github.com/pelias/query): This is where most of our actual Elasticsearch query generation happens. +* [config](https://github.com/pelias/config): Pelias is very configurable, and all of it is driven from a single JSON file which we call `pelias.json`. This package provides a library for reading, validating, and working with this configuration. It is used by almost every other Pelias component +* [dbclient](https://github.com/pelias/dbclient): A Node.js stream library for quickly and efficiently importing records into Elasticsearch + +#### Helpful tools + +Finally, while not part of Pelias proper, we have built several useful tools for working with and testing Pelias + +Notable examples include: + +* [acceptance-tests](https://github.com/pelias/acceptance-tests): A Node.js command line tool for testing a full planet build of Pelias and ensuring everything works. Familiarity with this tool is very important for ensuring Pelias is working. It supports all Pelias features and has special facilities for testing autocomplete queries. +* [compare](https://github.com/pelias/compare): A web-based tool for comparing different instances of Pelias (for example a production and staging environment). We have a reference instance at [pelias.github.io/compare/](http://pelias.github.io/compare) +* [dashboard](https://github.com/pelias/dashboard): Another web-based tool for providing statistics about the contents of a Pelias Elasticsearch index such as import speed, number of total records, and a breakdown of records of various types. + +### Documentation + +The main documentation lives in the [pelias/documentation](https://github.com/pelias/documentation) repository. + +Additionally, the README file in each of the component repositories listed above provides more detail on that piece. + +
+ Here's an example API response for a reverse geocoding query + +```javascript +$ curl -s "search.mapzen.com/v1/reverse?size=1&point.lat=40.74358294846026&point.lon=-73.99047374725342&api_key={YOUR_API_KEY}" | json +{ + "geocoding": { + "attribution": "https://search.mapzen.com/v1/attribution", + "engine": { + "author": "Mapzen", + "name": "Pelias", + "version": "1.0" + }, + "query": { + "boundary.circle.lat": 40.74358294846026, + "boundary.circle.lon": -73.99047374725342, + "boundary.circle.radius": 500, + "point.lat": 40.74358294846026, + "point.lon": -73.99047374725342, + "private": false, + "querySize": 1, + "size": 1 + }, + "timestamp": 1460736907438, + "version": "0.1" + }, + "type": "FeatureCollection", + "features": [ + { + "geometry": { + "coordinates": [ + -73.99051, + 40.74361 + ], + "type": "Point" + }, + "properties": { + "borough": "Manhattan", + "borough_gid": "whosonfirst:borough:421205771", + "confidence": 0.9, + "country": "United States", + "country_a": "USA", + "country_gid": "whosonfirst:country:85633793", + "county": "New York County", + "county_gid": "whosonfirst:county:102081863", + "distance": 0.004, + "gid": "geonames:venue:9851011", + "id": "9851011", + "label": "Arlington, Manhattan, NY, USA", + "layer": "venue", + "locality": "New York", + "locality_gid": "whosonfirst:locality:85977539", + "name": "Arlington", + "neighbourhood": "Flatiron District", + "neighbourhood_gid": "whosonfirst:neighbourhood:85869245", + "region": "New York", + "region_a": "NY", + "region_gid": "whosonfirst:region:85688543", + "source": "geonames" + }, + "type": "Feature" + } + ], + "bbox": [ + -73.99051, + 40.74361, + -73.99051, + 40.74361 + ] +} +``` +
+ +### How can I install my own instance of Pelias? + +To try out Pelias quickly, use our [Docker](https://github.com/pelias/docker/) setup. It uses Docker and docker-compose to allow you to quickly set up a Pelias instance for a small area (by default Portland, Oregon) in under 30 minutes. + +### Do you offer a free geocoding API? + +You can [sign up for a trial API key at Geocode Earth](https://geocode.earth). A commercial service has been operated by the core development team behind Pelias since 2014 (previously at search.mapzen.com). Discounts and free plans are available for free and open-source software projects. + +### What's it built with? +Pelias itself (the import pipelines and API) is written in [Node.js](https://nodejs.org/), which makes it highly +accessible for other developers and performant under heavy I/O. It aims to be modular and is distributed across a +number of Node packages, each with its own repository under the [Pelias GitHub organization](https://github.com/pelias). + +For a select few components that have performance requirements that Node.js cannot meet, we prefer to write things in [Go](https://golang.org/). A good example of this is the [pbf2json](https://github.com/pelias/pbf2json) tool that quickly converts OSM PBF files to JSON for our OSM importer. + +Elasticsearch is our datastore of choice because of its unparalleled full text +search functionality, scalability, and sufficiently robust geospatial support. + +### Contributing + +[![Gitter](https://badges.gitter.im/pelias/pelias.svg)](https://gitter.im/pelias/pelias?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +We built Pelias as an open source project not just because we believe that users should be able to view and play with +the source code of tools they use, but to get the community involved in the project itself. + +Especially with a geocoder with global coverage, it's just not possible for a small team to do it alone. We need you. + +Anything that we can do to make contributing easier, we want to know about. Feel free to reach out to us via Github, +[Gitter](https://gitter.im/pelias/pelias), [email](mailto:team@pelias.io), or [Twitter](https://twitter.com/pelias_geocoder). + We'd love to help people get started working on Pelias, especially if you're + new to open source or programming in general. + +We have a list of [Good First Issues](https://github.com/search?q=org%3Apelias+label%3A%22good+first+issue%22&type=issues) for new contributors. + +Both this [meta-repo](https://github.com/pelias/pelias/issues) and the [API service repo](https://github.com/pelias/api/issues) are worth looking at, as +they're where most issues live. We also welcome reporting issues or suggesting +improvements to our [documentation](https://github.com/pelias/documentation). + +The current Pelias team can be found on Github as +[missinglink](https://github.com/missinglink) and +[orangejulius](https://github.com/orangejulius). + +Members emeritus include: +* [trescube](https://github.com/trescube) +* [dianashk](https://github.com/dianashk) +* [randyme](https://github.com/randyme) +* [seejohnrun](https://github.com/seejohnrun) +* [fdansv](http://github.com/fdansv) +* [sevko](https://github.com/sevko) +* [hkrishna](https://github.com/hkrishna) +* [riordan](https://github.com/riordan) +* [avulfson17](https://github.com/avulfson17) +* [tigerlily-he](https://github.com/tigerlily-he) \ No newline at end of file diff --git a/release-notes.md b/site/release-notes.md similarity index 98% rename from release-notes.md rename to site/release-notes.md index 5ed0988..88c19bb 100644 --- a/release-notes.md +++ b/site/release-notes.md @@ -92,7 +92,7 @@ Our new Placeholder service queries were working great, except they weren't retu ### New features * Our first big ticket item is technically a new feature, a code level change, and a bug fix all in one! We've created a standalone microservice whose job it is to handle point-in-polygon requests. So with this release, all reverse queries specifying admin layers will be directed to this new service, instead of going to Elasticsearch like it used to. As a user, you won't see any difference in the interface to these types of requests and you don't have to take any action to use the new functionality. However, faster and better results will be apparent! * Our second big ticket item (we know, 2 in one release is awesome sauce!) is the long awaited upgrade to `libpostal 1.0`. This is again a code level change that doesn't have any user interface implications but yield significant improvements in results. We can tell just by the number of [old issues we were able to resolve](https://github.com/pelias/pelias/milestone/49?closed=1) as a result of this upgrade that this is a big moment for the Pelias engine. High-fives all around! -* You know how we started supporting search queries with only postalcodes in them, like `/v1/search?text=90210`? Well get excited, because we've added the ability to handle postalcode only queries in `structured` search as well! So queries like `/v1/search/structures?postalcode=90210` will now work. More info [here](structured-geocoding.md#postalcode). +* You know how we started supporting search queries with only postalcodes in them, like `/v1/search?text=90210`? Well get excited, because we've added the ability to handle postalcode only queries in `structured` search as well! So queries like `/v1/search/structures?postalcode=90210` will now work. More info [here](documentation/structured-geocoding.md#postalcode). * We fixed a few minor bugs related to address interpolation. There were cases where the results had a mix of street centroids and addresses and the correct address was not showing up first. More details [here](https://github.com/pelias/pelias/issues/528). * There was an [issue with geonames admin records](https://github.com/pelias/pelias/issues/539) having incorrect ids in their admin hierarchy properties. They were basically masquerading as Who's on First ids leading to invalid results and general chaos. Well no more. We fixed it. @@ -166,7 +166,7 @@ This week includes only code changes, no data updates. Our production build fail ## 24 October 2016 -* The `/v1/autocomplete` endpoint now supports [boundary.rect](search.md#search-within-a-rectangular-region) just like `/v1/search` +* The `/v1/autocomplete` endpoint now supports [boundary.rect](documentation/search.md#search-within-a-rectangular-region) just like `/v1/search` * Labels for administrative areas should be [improved in a few cases](https://github.com/pelias/whosonfirst/pull/139) ## 10 October 2016 @@ -239,7 +239,7 @@ We also have two **known issues** in this build: * As part of the Elasticsearch 2 upgrade we've also improved a few edge cases for searching for numeric values, and with single character tokens. You can [read more](https://github.com/pelias/pelias/issues/325#issuecomment-230724630) in the Github issue for the upgrade. * We've also fixed some lingering issues where a few places in Denmark were listed as [being part of Sweden](https://github.com/pelias/pelias/issues/368). This was due to the same data bug as mentioned in our recent [blog post](https://mapzen.com/blog/assult-on-copenhagen/). * The OpenAddresses importer now has better [whitespace cleanup](https://github.com/pelias/openaddresses/pull/130), so there won't be any extra spaces in street names. -* We recently added data to new [layers](search.md#filter-by-data-type) in Geonames, but the API didn't know about it, and prevented you from searching for them. We [fixed it](https://github.com/pelias/api/pull/573). +* We recently added data to new [layers](documentation/search.md#filter-by-data-type) in Geonames, but the API didn't know about it, and prevented you from searching for them. We [fixed it](https://github.com/pelias/api/pull/573). ## 13 June 2016 @@ -278,7 +278,7 @@ We also have two **known issues** in this build: ## 08 April 2016 This release marks the official integration of the Mapzen `Who's on First` data set into Pelias. This data is replacing `Quattroshapes` across the entire service. Any forward usage or references to `Quattroshapes` will be replaced with `WhosOnFirst`. This substitution allows us to fix long-standing encoding issues in administrative hierarchy place-names. We've also added a bounding box for individual features in the results, not only the all-encompassing bounding box at the top level of the geojson results. Also, the all-encompassing bounding box will extend to include the bounding boxes of all the features in the results, not only their centroids. -Another major improvement that many have been waiting for is the addition of more filters for the `/autocomplete` endpoint. Users can now ask `/autocomplete` to filter by `layers` and `sources`, as documented [here](autocomplete.md#available-autocomplete-parameters). +Another major improvement that many have been waiting for is the addition of more filters for the `/autocomplete` endpoint. Users can now ask `/autocomplete` to filter by `layers` and `sources`, as documented [here](documentation/autocomplete.md#available-autocomplete-parameters). See the detailed list of changes below for more specifics. * Switched from `Quattroshapes` to `WhosOnFirst` as the canonical source for administrative hierarchies and corresponding geometries. diff --git a/site/stylesheets/extra.css b/site/stylesheets/extra.css new file mode 100644 index 0000000..4c1d560 --- /dev/null +++ b/site/stylesheets/extra.css @@ -0,0 +1,38 @@ +@font-face { + font-family: "Metropolis"; + src: url("./metropolis/Metropolis-Regular.otf"); +} + +.md-ellipsis { + font-family: Metropolis, "Inter", --apple-system, sans-serif; +} + +:root { + --md-primary-fg-color: #6563CB; + --md-primary-fg-color--light: #6563CB; + --md-primary-fg-color--dark: #9897f0; + font-variant-ligatures: normal !important; +} + +/*[data-md-color-scheme=default] {*/ +/* --md-primary-fg-color: #6563CB;*/ +/*}*/ + +[data-md-color-scheme=slate] { + --md-typeset-a-color: #9897f0; +} + +/* increase logo size */ +.md-header__button.md-logo img, .md-header__button.md-logo svg { + height: 1.5rem; +} + +/*aligning images*/ +.center { + display: block; + margin: 0 auto; +} + +.right { + float: right; +} \ No newline at end of file diff --git a/site/stylesheets/metropolis/Metropolis-Black.otf b/site/stylesheets/metropolis/Metropolis-Black.otf new file mode 100644 index 0000000..3abd623 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Black.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-BlackItalic.otf b/site/stylesheets/metropolis/Metropolis-BlackItalic.otf new file mode 100644 index 0000000..3d6a9e4 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-BlackItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-Bold.otf b/site/stylesheets/metropolis/Metropolis-Bold.otf new file mode 100644 index 0000000..a42b941 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Bold.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-BoldItalic.otf b/site/stylesheets/metropolis/Metropolis-BoldItalic.otf new file mode 100644 index 0000000..f242515 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-BoldItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-ExtraBold.otf b/site/stylesheets/metropolis/Metropolis-ExtraBold.otf new file mode 100644 index 0000000..ca0b9ec Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-ExtraBold.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-ExtraBoldItalic.otf b/site/stylesheets/metropolis/Metropolis-ExtraBoldItalic.otf new file mode 100644 index 0000000..667c708 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-ExtraBoldItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-ExtraLight.otf b/site/stylesheets/metropolis/Metropolis-ExtraLight.otf new file mode 100644 index 0000000..b02e041 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-ExtraLight.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-ExtraLightItalic.otf b/site/stylesheets/metropolis/Metropolis-ExtraLightItalic.otf new file mode 100644 index 0000000..2740b28 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-ExtraLightItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-Light.otf b/site/stylesheets/metropolis/Metropolis-Light.otf new file mode 100644 index 0000000..b8b917c Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Light.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-LightItalic.otf b/site/stylesheets/metropolis/Metropolis-LightItalic.otf new file mode 100644 index 0000000..717133c Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-LightItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-Medium.otf b/site/stylesheets/metropolis/Metropolis-Medium.otf new file mode 100644 index 0000000..239d69d Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Medium.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-MediumItalic.otf b/site/stylesheets/metropolis/Metropolis-MediumItalic.otf new file mode 100644 index 0000000..dc30091 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-MediumItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-Regular.otf b/site/stylesheets/metropolis/Metropolis-Regular.otf new file mode 100644 index 0000000..737760b Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Regular.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-RegularItalic.otf b/site/stylesheets/metropolis/Metropolis-RegularItalic.otf new file mode 100644 index 0000000..14d62bc Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-RegularItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-SemiBold.otf b/site/stylesheets/metropolis/Metropolis-SemiBold.otf new file mode 100644 index 0000000..f9889d0 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-SemiBold.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-SemiBoldItalic.otf b/site/stylesheets/metropolis/Metropolis-SemiBoldItalic.otf new file mode 100644 index 0000000..fdbd016 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-SemiBoldItalic.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-Thin.otf b/site/stylesheets/metropolis/Metropolis-Thin.otf new file mode 100644 index 0000000..f969dcc Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-Thin.otf differ diff --git a/site/stylesheets/metropolis/Metropolis-ThinItalic.otf b/site/stylesheets/metropolis/Metropolis-ThinItalic.otf new file mode 100644 index 0000000..248bd94 Binary files /dev/null and b/site/stylesheets/metropolis/Metropolis-ThinItalic.otf differ diff --git a/site/stylesheets/metropolis/SIL Open Font License.txt b/site/stylesheets/metropolis/SIL Open Font License.txt new file mode 100644 index 0000000..2608640 --- /dev/null +++ b/site/stylesheets/metropolis/SIL Open Font License.txt @@ -0,0 +1,43 @@ +Copyright (c) 2015, Chris Simpson, with Reserved Font Name: "Metropolis". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright statement(s). + +"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file