mirror of https://github.com/pelias/docker.git
Peter Johnson
7 years ago
commit
9b17bde4fe
21 changed files with 1240 additions and 0 deletions
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT) |
||||
|
||||
Copyright (c) 2018 Pelias Contributors |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
@ -0,0 +1,302 @@
|
||||
|
||||
# Pelias in Docker |
||||
|
||||
This repository contains a framework for downloading/preparing and building the the [Pelias Geocoder](https://github.com/pelias/pelias) using Docker and [Docker Compose](https://github.com/docker/compose#docker-compose). |
||||
|
||||
## Projects |
||||
|
||||
Example projects are included in the [projects](https://github.com/pelias/docker/tree/master/projects) directory. |
||||
|
||||
We recommend you start with the `portland-metro` example as a first-time user; once you have successfully completed a build you can use this as a base to create your own projects. |
||||
|
||||
## Not suitable for large geographies |
||||
|
||||
We do not recommend running large extracts (anything larger than a US State) inside Docker, the scripts are **not suitable** for full planet builds. If you require global coverage, please see our [install documentation](https://pelias.io/install.html) or consider using the [geocode.earth](https://geocode.earth/) services hosted by members of our core team. |
||||
|
||||
## Prerequisites |
||||
|
||||
You will need to have `docker` and `docker-compose` installed before continuing. If you are not using the latest version, please mention that in any bugs reports. |
||||
|
||||
If you are running OSX, you should also install `brew install coreutils` and max-out your Docker limits in `Docker > Preferences > Advanced`. |
||||
|
||||
Scripts can easily download tens of GB of geographic data, so ensure you have enough free disk space! |
||||
|
||||
## Installing the Pelias command |
||||
|
||||
If you haven't done so already, you will need to ensure the `pelias` command is available on your path. |
||||
|
||||
You can find the `pelias` file in the root of this repository. |
||||
|
||||
Advanced users may have a preferance how this is done on their system, but a basic example would be to do something like: |
||||
|
||||
```bash |
||||
git clone https://github.com/pelias/docker.git ~/pelias |
||||
ln -s ~/pelias/pelias /usr/local/bin/pelias |
||||
``` |
||||
|
||||
Once the command is correctly installed you should be able to run the following command to confim the pelias command is available on your path: |
||||
|
||||
```bash |
||||
which pelias |
||||
``` |
||||
|
||||
### Resolving PATH issues |
||||
|
||||
If you are having trouble getting this to work then quickly check that the target of the symlink is listed on your $PATH: |
||||
|
||||
```bash |
||||
tr ':' '\n' <<< "$PATH" |
||||
``` |
||||
|
||||
If you used the `ln -s` command above then the directory `/usr/local/bin` should be listed in the output. |
||||
|
||||
If the symlink target path is *not* listed, then you will either need to add its location to your $PATH or create a new symlink which points to a location which is already on your $PATH. |
||||
|
||||
## Configure Environment |
||||
|
||||
The `pelias` command looks for an `.env` file in your **current working directory**, this file contains information specific to your local environment. |
||||
|
||||
If this is your first time, you should change directories to an example project before continuing: |
||||
|
||||
```bash |
||||
cd projects/portland-metro |
||||
``` |
||||
|
||||
Ensure that your current working directory contains the files: `.env`, `docker-compose.yml` and `pelias.json` before continuing. |
||||
|
||||
### Variable: DATA_DIR |
||||
|
||||
The only mandatory variable in `.env` is `DATA_DIR`. |
||||
|
||||
This path reflects the directory Pelias will use to store downloaded data and use to build it's other microservices. |
||||
|
||||
You **must** create a new directory which you will use for this project, for example: |
||||
|
||||
```bash |
||||
mkdir /tmp/pelias |
||||
``` |
||||
|
||||
Then use your text editor to modify the `.env` file to reflect your new path, it should look like this: |
||||
|
||||
```bash |
||||
COMPOSE_PROJECT_NAME=pelias |
||||
DATA_DIR=/tmp/pelias |
||||
``` |
||||
|
||||
You can then list the environment variables to ensure they have been correctly set: |
||||
|
||||
```bash |
||||
pelias system env |
||||
``` |
||||
|
||||
### Variables: COMPOSE_* |
||||
|
||||
The compose variables are optional and are documented here: https://docs.docker.com/compose/env-file/ |
||||
|
||||
Note: changing the `COMPOSE_PROJECT_NAME` variable is not advisable unless you know what you are doing. If you are migrating from the deprecated `pelias/dockerfiles` repository then you can set `COMPOSE_PROJECT_NAME=dockerfiles` to enable backwards compatibility with containers created using that repository. |
||||
|
||||
## CLI commands |
||||
|
||||
```bash |
||||
$ pelias |
||||
|
||||
Usage: pelias [command] [action] [options] |
||||
|
||||
compose pull update all docker images |
||||
compose logs display container logs |
||||
compose ps list containers |
||||
compose top display the running processes of a container |
||||
compose exec execute an arbitrary docker-compose command |
||||
compose run execute a docker-compose run command |
||||
compose up start one or more docker-compose service(s) |
||||
compose kill kill one or more docker-compose service(s) |
||||
compose down stop all docker-compose service(s) |
||||
download wof (re)download whosonfirst data |
||||
download oa (re)download openaddresses data |
||||
download osm (re)download openstreetmap data |
||||
download tiger (re)download TIGER data |
||||
download transit (re)download transit data |
||||
download all (re)download all data |
||||
elastic drop delete elasticsearch index & all data |
||||
elastic create create elasticsearch index with pelias mapping |
||||
elastic start start elasticsearch server |
||||
elastic stop stop elasticsearch server |
||||
elastic status HTTP status code of the elasticsearch service |
||||
elastic wait wait for elasticsearch to start up |
||||
import wof (re)import whosonfirst data |
||||
import oa (re)import openaddresses data |
||||
import osm (re)import openstreetmap data |
||||
import polylines (re)import polylines data |
||||
import transit (re)import transit data |
||||
import all (re)import all data |
||||
prepare polylines export road network from openstreetmap into polylines format |
||||
prepare interpolation build interpolation sqlite databases |
||||
prepare placeholder build placeholder sqlite databases |
||||
prepare all build all services which have a prepare step |
||||
system check ensure the system is correctly configured |
||||
system env display environment variables |
||||
system update update the pelias command by pulling the latest version |
||||
``` |
||||
|
||||
### Compose commands |
||||
|
||||
The compose commands are available as a shortcut to running `docker-compose` directly, they will also ensure that your environment is correctly configured. |
||||
|
||||
See the docker-compose documentation for more info: https://docs.docker.com/compose/overview/ |
||||
|
||||
```bash |
||||
pelias compose pull update all docker images |
||||
pelias compose logs display container logs |
||||
pelias compose ps list containers |
||||
pelias compose top display the running processes of a container |
||||
pelias compose exec execute an arbitrary docker-compose command |
||||
pelias compose run execute a docker-compose run command |
||||
pelias compose up start one or more docker-compose service(s) |
||||
pelias compose kill kill one or more docker-compose service(s) |
||||
pelias compose down stop all docker-compose service(s) |
||||
``` |
||||
|
||||
### Download commands |
||||
|
||||
The download commands will fetch and update geographic data from source. |
||||
|
||||
For example: `pelias download tiger` will fetch street data from the US Census Bureau and store it in the directory referenced by the `DATA_DIR` environment variable. |
||||
|
||||
```bash |
||||
pelias download wof (re)download whosonfirst data |
||||
pelias download oa (re)download openaddresses data |
||||
pelias download osm (re)download openstreetmap data |
||||
pelias download tiger (re)download TIGER data |
||||
pelias download transit (re)download transit data |
||||
pelias download all (re)download all data |
||||
``` |
||||
|
||||
### Prepare commands |
||||
|
||||
The prepare commands are used to run any commands which are required to setup/configure or build microservices. |
||||
|
||||
For example: `pelias prepare interpolation` will build a street address interpolation index. |
||||
|
||||
Note: the order of execution is important, the prepare commands require data, so they must be run *after* the download commands have fetched the data. |
||||
|
||||
```bash |
||||
pelias prepare polylines export road network from openstreetmap into polylines format |
||||
pelias prepare interpolation build interpolation sqlite databases |
||||
pelias prepare placeholder build placeholder sqlite databases |
||||
pelias prepare all build all services which have a prepare step |
||||
``` |
||||
|
||||
### Elastic commands |
||||
|
||||
The elastic commands control starting/stopping/configuring elasticsearch. |
||||
|
||||
The special `pelias elastic wait` command can be used in scripts to block the script execution until elasticsearch is ready to accept connections. |
||||
|
||||
```bash |
||||
pelias elastic drop delete elasticsearch index & all data |
||||
pelias elastic create create elasticsearch index with pelias mapping |
||||
pelias elastic start start elasticsearch server |
||||
pelias elastic stop stop elasticsearch server |
||||
pelias elastic status HTTP status code of the elasticsearch service |
||||
pelias elastic wait wait for elasticsearch to start up |
||||
``` |
||||
|
||||
### Import commands |
||||
|
||||
The import commands import source data in to elasticsearch. |
||||
|
||||
```bash |
||||
pelias import wof (re)import whosonfirst data |
||||
pelias import oa (re)import openaddresses data |
||||
pelias import osm (re)import openstreetmap data |
||||
pelias import polylines (re)import polylines data |
||||
pelias import transit (re)import transit data |
||||
pelias import all (re)import all data |
||||
``` |
||||
|
||||
### System commands |
||||
|
||||
The system commands help debug issues with incorrectly set environment variables. |
||||
|
||||
The `pelias system update` command can be used to ensure that the `pelias` command itself is up-to-date by pulling the latest source code from Github. |
||||
|
||||
```bash |
||||
pelias system check ensure the system is correctly configured |
||||
pelias system env display environment variables |
||||
pelias system update update the pelias command by pulling the latest version |
||||
``` |
||||
|
||||
## Generic build workflow |
||||
|
||||
The following shell script can be used to automate a build: |
||||
|
||||
```bash |
||||
#!/bin/bash |
||||
set -x |
||||
|
||||
# create directories |
||||
mkdir /code /data |
||||
|
||||
# clone repo |
||||
cd /code |
||||
git clone https://github.com/pelias/docker.git |
||||
cd docker |
||||
|
||||
# install pelias script |
||||
ln -s "$(pwd)/pelias" /usr/local/bin/pelias |
||||
|
||||
# cwd |
||||
cd projects/portland-metro |
||||
|
||||
# configure environment |
||||
sed -i '/DATA_DIR/d' .env |
||||
echo 'DATA_DIR=/data' >> .env |
||||
|
||||
# run build |
||||
pelias compose pull |
||||
pelias elastic start |
||||
pelias elastic wait |
||||
pelias elastic create |
||||
pelias download all |
||||
pelias prepare all |
||||
pelias import all |
||||
pelias compose up |
||||
``` |
||||
|
||||
## View status of running containers |
||||
|
||||
Once the build is complete, you can view the current status and port mappings of the Pelias docker containers: |
||||
|
||||
```bash |
||||
pelias compose ps |
||||
``` |
||||
|
||||
## View logs and debug errors |
||||
|
||||
You can inspect the container logs for errors by running: |
||||
|
||||
```bash |
||||
pelias compose logs |
||||
``` |
||||
|
||||
## Make an example query |
||||
|
||||
You can now make queries against your new Pelias build: |
||||
|
||||
### API |
||||
|
||||
- http://localhost:4000/v1/search?text=portland |
||||
- [http://localhost:4000/v1/search?text=1901 Main St](http://localhost:4000/v1/search?text=1901%20Main%20St) |
||||
- http://localhost:4000/v1/reverse?point.lon=-122.650095&point.lat=45.533467 |
||||
|
||||
### Placeholder |
||||
|
||||
- http://localhost:4100/demo/#eng |
||||
|
||||
### PIP (point in polygon) |
||||
|
||||
- http://localhost:4200/-122.650095/45.533467 |
||||
|
||||
### Interpolation |
||||
|
||||
- http://localhost:4300/demo/#13/45.5465/-122.6351 |
@ -0,0 +1,30 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
function compose_pull(){ compose_exec pull; } |
||||
register 'compose' 'pull' 'update all docker images' compose_pull |
||||
|
||||
function compose_logs(){ compose_exec logs $@; } |
||||
register 'compose' 'logs' 'display container logs' compose_logs |
||||
|
||||
function compose_ps(){ compose_exec ps $@; } |
||||
register 'compose' 'ps' 'list containers' compose_ps |
||||
|
||||
function compose_top(){ compose_exec top $@; } |
||||
register 'compose' 'top' 'display the running processes of a container' compose_top |
||||
|
||||
function compose_exec(){ docker-compose $@; } |
||||
register 'compose' 'exec' 'execute an arbitrary docker-compose command' compose_exec |
||||
|
||||
function compose_run(){ docker-compose run -T --rm $@; } |
||||
register 'compose' 'run' 'execute a docker-compose run command' compose_run |
||||
|
||||
function compose_up(){ docker-compose up -d $@; } |
||||
register 'compose' 'up' 'start one or more docker-compose service(s)' compose_up |
||||
|
||||
function compose_kill(){ docker-compose kill $@; } |
||||
register 'compose' 'kill' 'kill one or more docker-compose service(s)' compose_kill |
||||
|
||||
function compose_down(){ docker-compose down; } |
||||
register 'compose' 'down' 'stop all docker-compose service(s)' compose_down |
||||
|
@ -0,0 +1,27 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
# per-source downloads |
||||
function download_wof(){ compose_run 'whosonfirst' npm run download; } |
||||
function download_oa(){ compose_run 'openaddresses' npm run download; } |
||||
function download_osm(){ compose_run 'openstreetmap' npm run download; } |
||||
function download_tiger(){ compose_run 'interpolation' npm run download-tiger; } |
||||
function download_transit(){ compose_run 'transit' npm run download; } |
||||
|
||||
register 'download' 'wof' '(re)download whosonfirst data' download_wof |
||||
register 'download' 'oa' '(re)download openaddresses data' download_oa |
||||
register 'download' 'osm' '(re)download openstreetmap data' download_osm |
||||
register 'download' 'tiger' '(re)download TIGER data' download_tiger |
||||
register 'download' 'transit' '(re)download transit data' download_transit |
||||
|
||||
# download all the data to be used by imports |
||||
function download_all(){ |
||||
download_wof & |
||||
download_oa & |
||||
download_osm & |
||||
download_tiger & |
||||
download_transit & |
||||
wait |
||||
} |
||||
|
||||
register 'download' 'all' '(re)download all data' download_all |
@ -0,0 +1,31 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
function elastic_schema_drop(){ compose_run 'schema' node scripts/drop_index "$@" || true; } |
||||
function elastic_schema_create(){ compose_run 'schema' npm run create_index; } |
||||
function elastic_start(){ compose_exec up -d elasticsearch; } |
||||
function elastic_stop(){ compose_exec kill elasticsearch; } |
||||
|
||||
register 'elastic' 'drop' 'delete elasticsearch index & all data' elastic_schema_drop |
||||
register 'elastic' 'create' 'create elasticsearch index with pelias mapping' elastic_schema_create |
||||
register 'elastic' 'start' 'start elasticsearch server' elastic_start |
||||
register 'elastic' 'stop' 'stop elasticsearch server' elastic_stop |
||||
|
||||
# to use this function: |
||||
# if test $(elastic_status) -ne 200; then |
||||
function elastic_status(){ curl --output /dev/null --silent --write-out "%{http_code}" "http://${ELASTIC_HOST:-localhost:9200}" || true; } |
||||
|
||||
# the same function but with a trailing newline |
||||
function elastic_status_newline(){ echo $(elastic_status); } |
||||
register 'elastic' 'status' 'HTTP status code of the elasticsearch service' elastic_status_newline |
||||
|
||||
function elastic_wait(){ |
||||
echo 'waiting for elasticsearch service to come up'; |
||||
until test $(elastic_status) -eq 200; do |
||||
printf '.' |
||||
sleep 2 |
||||
done |
||||
echo |
||||
} |
||||
|
||||
register 'elastic' 'wait' 'wait for elasticsearch to start up' elastic_wait |
@ -0,0 +1,27 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
# per-source imports |
||||
function import_wof(){ compose_run 'whosonfirst' npm start; } |
||||
function import_oa(){ compose_run 'openaddresses' npm start; } |
||||
function import_osm(){ compose_run 'openstreetmap' npm start; } |
||||
function import_polylines(){ compose_run 'polylines' npm start; } |
||||
function import_transit(){ compose_run 'transit' npm start; } |
||||
|
||||
register 'import' 'wof' '(re)import whosonfirst data' import_wof |
||||
register 'import' 'oa' '(re)import openaddresses data' import_oa |
||||
register 'import' 'osm' '(re)import openstreetmap data' import_osm |
||||
register 'import' 'polylines' '(re)import polylines data' import_polylines |
||||
register 'import' 'transit' '(re)import transit data' import_transit |
||||
|
||||
# import all the data to be used by imports |
||||
# note: running importers in parallel can cause issues due to high CPU & RAM requirements. |
||||
function import_all(){ |
||||
import_wof |
||||
import_oa |
||||
import_osm |
||||
import_polylines |
||||
import_transit |
||||
} |
||||
|
||||
register 'import' 'all' '(re)import all data' import_all |
@ -0,0 +1,24 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
# per-source prepares |
||||
function prepare_polylines(){ compose_run 'polylines' bash ./docker_extract.sh; } |
||||
function prepare_interpolation(){ compose_run 'interpolation' bash ./docker_build.sh; } |
||||
function prepare_placeholder(){ |
||||
compose_run 'placeholder' npm run extract |
||||
compose_run 'placeholder' npm run build |
||||
} |
||||
|
||||
register 'prepare' 'polylines' 'export road network from openstreetmap into polylines format' prepare_polylines |
||||
register 'prepare' 'interpolation' 'build interpolation sqlite databases' prepare_interpolation |
||||
register 'prepare' 'placeholder' 'build placeholder sqlite databases' prepare_placeholder |
||||
|
||||
# prepare all the data to be used by imports |
||||
function prepare_all(){ |
||||
prepare_polylines & |
||||
prepare_placeholder & |
||||
wait |
||||
prepare_interpolation |
||||
} |
||||
|
||||
register 'prepare' 'all' 'build all services which have a prepare step' prepare_all |
@ -0,0 +1,11 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
function system_check(){ env_check; } |
||||
register 'system' 'check' 'ensure the system is correctly configured' system_check |
||||
|
||||
function system_env(){ env; } |
||||
register 'system' 'env' 'display environment variables' system_env |
||||
|
||||
function system_update(){ git -C $(dirname "${BASH_SOURCE[0]}") pull; } |
||||
register 'system' 'update' 'update the pelias command by pulling the latest version' system_update |
@ -0,0 +1,6 @@
|
||||
# base image |
||||
FROM elasticsearch:2.4 |
||||
|
||||
# configure plugins |
||||
RUN /usr/share/elasticsearch/bin/plugin install analysis-icu |
||||
RUN /usr/share/elasticsearch/bin/plugin install cloud-aws |
@ -0,0 +1,23 @@
|
||||
# see: https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html |
||||
|
||||
# base image |
||||
FROM docker.elastic.co/elasticsearch/elasticsearch:5.2.1 |
||||
USER root |
||||
|
||||
# environmental settings |
||||
ENV ES_JAVA_OPTS '-Xms512m -Xmx512m' |
||||
ENV xpack.security.enabled 'false' |
||||
ENV xpack.monitoring.enabled 'false' |
||||
ENV cluster.name 'pelias-dev' |
||||
ENV bootstrap.memory_lock 'true' |
||||
RUN echo 'vm.max_map_count=262144' >> /etc/sysctl.conf |
||||
|
||||
# configure plugins |
||||
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu |
||||
|
||||
# elasticsearch config |
||||
ADD elasticsearch.yml /usr/share/elasticsearch/config/ |
||||
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml |
||||
|
||||
# run as elasticsearch user |
||||
USER elasticsearch |
@ -0,0 +1,6 @@
|
||||
xpack.security.enabled: false |
||||
bootstrap.memory_lock: true |
||||
network.host: 0.0.0.0 |
||||
http.port: 9200 |
||||
node.master: true |
||||
node.data: true |
@ -0,0 +1,25 @@
|
||||
# base image |
||||
FROM pelias/baseimage |
||||
|
||||
# grab all of the valhalla software from ppa |
||||
RUN apt-get update && \ |
||||
apt-get install -y software-properties-common python-software-properties && \ |
||||
add-apt-repository -y ppa:kevinkreiser/prime-server && \ |
||||
add-apt-repository -y ppa:valhalla-routing/valhalla && \ |
||||
apt-get update && \ |
||||
apt-get install -y valhalla-bin && \ |
||||
rm -rf /var/lib/apt/lists/*; |
||||
|
||||
# change working dir |
||||
RUN mkdir -p /code/valhalla |
||||
WORKDIR /code/valhalla |
||||
|
||||
# generate config |
||||
RUN valhalla_build_config \ |
||||
--mjolnir-tile-dir '/data/valhalla' \ |
||||
--mjolnir-tile-extract '/data/valhalla.tar' \ |
||||
--mjolnir-timezone '/data/valhalla/timezones.sqlite' \ |
||||
--mjolnir-admin '/data/valhalla/admins.sqlite' > valhalla.json |
||||
|
||||
# build script |
||||
RUN echo 'valhalla_build_tiles -c valhalla.json /data/openstreetmap/*.osm.pbf; valhalla_export_edges --config valhalla.json > /data/polylines/pbf_extract.polyline;' > ./docker_build.sh |
@ -0,0 +1,49 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
declare -a commands |
||||
declare -a actions |
||||
declare -a hints |
||||
declare -a functions |
||||
|
||||
function register(){ |
||||
commands+=("$1") |
||||
actions+=("$2") |
||||
hints+=("$3") |
||||
functions+=("$4") |
||||
} |
||||
|
||||
function help(){ |
||||
printf 'Usage: %s [command] [action] [options]\n\n' ${0} |
||||
|
||||
for (( i = 0; i < ${#commands[@]}; ++i )); do |
||||
echo -e " ${commands[$i]}\t${actions[$i]}\t ${hints[$i]}" |
||||
done | column -ts $'\t' |
||||
|
||||
echo |
||||
} |
||||
|
||||
function cli(){ |
||||
cmd="${1}"; shift || true |
||||
action="${1}"; shift || true |
||||
valid_command=false |
||||
valid_action=false |
||||
|
||||
for (( i = 0; i < ${#commands[@]}; ++i )); do |
||||
if [ "${cmd}" = "${commands[$i]}" ]; then |
||||
valid_command=true |
||||
if [ "${action}" = "${actions[$i]}" ]; then |
||||
valid_action=true |
||||
"${functions[$i]}" "$@" |
||||
exit $? |
||||
fi |
||||
fi |
||||
done |
||||
echo |
||||
|
||||
[ -z "${cmd}" ] || [ "$valid_command" = true ] || printf 'invalid command "%s"\n\n' "${cmd}" |
||||
[ -z "${action}" ] || [ "$valid_action" = true ] || printf 'invalid action "%s"\n\n' "${action}" |
||||
help |
||||
|
||||
exit 1 |
||||
} |
@ -0,0 +1,52 @@
|
||||
#!/bin/bash |
||||
set -e; |
||||
|
||||
# disable verbose logging |
||||
ENV_DISPLAY_WARNINGS=false |
||||
|
||||
# ensure the user environment is correctly set up |
||||
function env_check(){ |
||||
if [ -z "${DATA_DIR}" ]; then |
||||
echo "You must set the DATA_DIR env var to a valid directory on your local machine." |
||||
echo |
||||
echo "Edit the '.env' file in this repository, update the DATA_DIR to a valid path and try again." |
||||
echo "Alternatively, you can set the variable in your environment using a command such as 'export DATA_DIR=/tmp'." |
||||
exit 1 |
||||
elif [ ! -d "${DATA_DIR}" ]; then |
||||
printf "The directory specified by DATA_DIR does not exist: %s\n" ${DATA_DIR} |
||||
echo |
||||
echo "Edit the '.env' file in this repository, update the DATA_DIR to a valid path and try again." |
||||
echo "Alternatively, you can set the variable in your environment using a command such as 'export DATA_DIR=/tmp'." |
||||
exit 1 |
||||
fi |
||||
} |
||||
|
||||
# loads environment vars from a stream (such as a file) |
||||
# example: env_load_stream < .env |
||||
function env_load_stream(){ |
||||
while IFS='=' read -r key value; do |
||||
([ -z $key ] || [ -z $value ]) && printf 'Invalid environment var "%s=%s"\n' $key $value && exit 1 |
||||
if [ -z ${!key} ]; then |
||||
export "${key}=${value}" |
||||
elif $ENV_DISPLAY_WARNINGS; then |
||||
printf '[warn] skip setting environment var "%s=%s", already set "%s=%s"\n' $key $value $key ${!key} |
||||
fi |
||||
done |
||||
} |
||||
|
||||
# ensure locale is correctly set? |
||||
# export LC_ALL=en_US.UTF-8 |
||||
|
||||
# load DATA_DIR and other vars from docker-compose .env file |
||||
# note: strips comments and empty lines |
||||
[ -f .env ] && env_load_stream < <(grep -v '^$\|^\s*$\#' .env) |
||||
|
||||
# use the default compose file unless one was specified |
||||
# if [ -z "${COMPOSE_FILE}" ]; then |
||||
# if [ ! -f "docker-compose.yml" ]; then |
||||
# export COMPOSE_FILE="${BASEDIR}/docker-compose.yml" |
||||
# fi |
||||
# fi |
||||
|
||||
# ensure the user env is correctly set up |
||||
env_check |
@ -0,0 +1,22 @@
|
||||
#!/bin/bash |
||||
set -e |
||||
|
||||
# OSX comes bundled with versions of readlink, sed, parallel etc which are not |
||||
# compatible with the linux tools. Force OSX users to install the GNU |
||||
# compatible versions (prefixed with 'g', such as 'greadlink', 'gsed' etc.). |
||||
export CMD_READLINK='readlink' |
||||
if [[ "$OSTYPE" == "darwin"* ]]; then |
||||
if [ -x "$(command -v greadlink)" ]; then |
||||
CMD_READLINK='greadlink'; |
||||
else |
||||
2>&1 echo 'OSX: you must install the gnu standard tooling using:' |
||||
2>&1 echo 'brew install coreutils' |
||||
fi |
||||
fi |
||||
|
||||
# resolve path to this file (following symlinks) and load libs |
||||
BASEDIR=$( dirname $( ${CMD_READLINK} -f "${BASH_SOURCE[0]}" ) ) |
||||
for f in ${BASEDIR}/lib/* ${BASEDIR}/cmd/*; do source $f; done |
||||
|
||||
# cli runner |
||||
cli "$@" |
@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME=pelias |
||||
DATA_DIR=/tmp/pelias/portland-metro |
@ -0,0 +1,35 @@
|
||||
|
||||
# Portland Metro Area |
||||
|
||||
This project is configured to download/prepare/build a complete Pelias installation for Portland, Oregon. |
||||
|
||||
It is intended as an example for other projects, feel free to copy->paste these files to a new project directory to kick-start your own project. |
||||
|
||||
# Setup |
||||
|
||||
Please refer to the instructions at https://github.com/pelias/docker in order to install and configure your docker environment. |
||||
|
||||
The minimum configuration required in order to run this project are [installing prerequisites](https://github.com/pelias/docker#prerequisites), [install the pelias command](https://github.com/pelias/docker#installing-the-pelias-command) and [configure the environment](https://github.com/pelias/docker#configure-environment). |
||||
|
||||
Please ensure that's all working fine before continuing. |
||||
|
||||
# Run a Build |
||||
|
||||
To run a complete build, execute the following commands: |
||||
|
||||
```bash |
||||
pelias compose pull |
||||
pelias elastic start |
||||
pelias elastic wait |
||||
pelias elastic create |
||||
pelias download all |
||||
pelias prepare all |
||||
pelias import all |
||||
pelias compose up |
||||
``` |
||||
|
||||
# Make an Example Query |
||||
|
||||
You can now make queries against your new Pelias build: |
||||
|
||||
http://localhost:4000/v1/search?text=pdx |
@ -0,0 +1,114 @@
|
||||
version: '3' |
||||
networks: |
||||
default: |
||||
driver: bridge |
||||
volumes: |
||||
libpostaldata: |
||||
driver: local |
||||
services: |
||||
libpostal_baseimage: |
||||
image: pelias/libpostal_baseimage |
||||
container_name: pelias_libpostal_baseimage |
||||
libpostal: |
||||
image: pelias/go-whosonfirst-libpostal |
||||
container_name: pelias_libpostal |
||||
restart: always |
||||
ports: [ "8080:8080" ] |
||||
schema: |
||||
image: pelias/schema:portland-synonyms |
||||
container_name: pelias_schema |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "./synonyms/custom_name.txt:/code/pelias/schema/synonyms/custom_name.txt" |
||||
- "./synonyms/custom_street.txt:/code/pelias/schema/synonyms/custom_street.txt" |
||||
api: |
||||
image: pelias/api:master |
||||
container_name: pelias_api |
||||
restart: always |
||||
environment: [ "PORT=4000" ] |
||||
ports: [ "4000:4000" ] |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "libpostaldata:/usr/share/libpostal" |
||||
placeholder: |
||||
image: pelias/placeholder:master |
||||
container_name: pelias_placeholder |
||||
restart: always |
||||
environment: [ "PORT=4100" ] |
||||
ports: [ "4100:4100" ] |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
whosonfirst: |
||||
image: pelias/whosonfirst:master |
||||
container_name: pelias_whosonfirst |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
openstreetmap: |
||||
image: pelias/openstreetmap:master |
||||
container_name: pelias_openstreetmap |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
openaddresses: |
||||
image: pelias/openaddresses:master |
||||
container_name: pelias_openaddresses |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
transit: |
||||
image: pelias/transit:master |
||||
container_name: pelias_transit |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
polylines: |
||||
image: pelias/polylines:master |
||||
container_name: pelias_polylines |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
interpolation: |
||||
depends_on: [ "libpostal_baseimage" ] |
||||
image: pelias/interpolation:master |
||||
container_name: pelias_interpolation |
||||
restart: always |
||||
environment: [ "PORT=4300" ] |
||||
ports: [ "4300:4300" ] |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "libpostaldata:/usr/share/libpostal" |
||||
- "${DATA_DIR}:/data" |
||||
pip: |
||||
image: pelias/pip-service:master |
||||
container_name: pelias_pip-service |
||||
restart: always |
||||
environment: [ "PORT=4200" ] |
||||
ports: [ "4200:4200" ] |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
document-service: |
||||
image: pelias/document-service:master |
||||
container_name: pelias_document-service |
||||
restart: always |
||||
ports: [ "5000:5000" ] |
||||
volumes: |
||||
- "./pelias.json:/code/pelias.json" |
||||
- "${DATA_DIR}:/data" |
||||
elasticsearch: |
||||
image: pelias/elasticsearch |
||||
container_name: pelias_elasticsearch |
||||
restart: always |
||||
ports: [ "9200:9200", "9300:9300" ] |
||||
volumes: |
||||
- "${DATA_DIR}/elasticsearch:/usr/share/elasticsearch/data" |
||||
ulimits: |
||||
memlock: |
||||
soft: -1 |
||||
hard: -1 |
||||
nofile: |
||||
soft: 65536 |
||||
hard: 65536 |
||||
cap_add: [ "IPC_LOCK" ] |
@ -0,0 +1,162 @@
|
||||
{ |
||||
"logger": { |
||||
"level": "info", |
||||
"timestamp": false |
||||
}, |
||||
"esclient": { |
||||
"hosts": [ |
||||
{ "host": "elasticsearch" } |
||||
] |
||||
}, |
||||
"elasticsearch": { |
||||
"settings": { |
||||
"index": { |
||||
"refresh_interval": "10s", |
||||
"number_of_replicas": "0", |
||||
"number_of_shards": "1" |
||||
} |
||||
} |
||||
}, |
||||
"api": { |
||||
"textAnalyzer": "libpostal", |
||||
"services": { |
||||
"pip": { "url": "http://pip-service:4200" }, |
||||
"libpostal": { "url": "http://libpostal:8080" }, |
||||
"placeholder": { "url": "http://placeholder:4100" }, |
||||
"interpolation": { "url": "http://interpolation:4300" } |
||||
}, |
||||
"defaultParameters": { |
||||
"focus.point.lat": 45.52, |
||||
"focus.point.lon": -122.67 |
||||
} |
||||
}, |
||||
"imports": { |
||||
"adminLookup": { |
||||
"enabled": true |
||||
}, |
||||
"geonames": { |
||||
"datapath": "/data/geonames", |
||||
"countryCode": "ALL" |
||||
}, |
||||
"openstreetmap": { |
||||
"download": [ |
||||
{ "sourceURL": "https://s3.amazonaws.com/metro-extracts.nextzen.org/portland_oregon.osm.pbf" } |
||||
], |
||||
"leveldbpath": "/tmp", |
||||
"datapath": "/data/openstreetmap", |
||||
"import": [{ |
||||
"filename": "portland_oregon.osm.pbf" |
||||
}] |
||||
}, |
||||
"openaddresses": { |
||||
"datapath": "/data/openaddresses", |
||||
"files": [ |
||||
"us/or/portland_metro.csv", |
||||
"us/or/city_of_salem.csv", |
||||
"us/or/marion_and_polk.csv", |
||||
"us/or/marion.csv", |
||||
"us/or/hood_river.csv", |
||||
"us/wa/city_of_richland.csv", |
||||
"us/wa/clark.csv" |
||||
] |
||||
}, |
||||
"polyline": { |
||||
"datapath": "/data/polylines", |
||||
"files": [ "extract.0sv" ] |
||||
}, |
||||
"whosonfirst": { |
||||
"datapath": "/data/whosonfirst", |
||||
"importVenues": false, |
||||
"importPostalcodes": true, |
||||
"importPlace": [ |
||||
"85688513", |
||||
"85688623" |
||||
] |
||||
}, |
||||
"transit": { |
||||
"datapath": "/data/transit", |
||||
"feeds": [ |
||||
{ |
||||
"layerId": "bikeshare", |
||||
"url": "http://biketownpdx.socialbicycles.com/opendata/station_information.json", |
||||
"filename": "BIKETOWN-hubs.json", |
||||
"agencyId": "BIKETOWN", |
||||
"agencyName": "BIKETOWN", |
||||
"layerName": "bikeshare" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://developer.trimet.org/schedule/gtfs.zip", |
||||
"filename": "TRIMET-stops.txt", |
||||
"agencyId": "TRIMET", |
||||
"agencyName": "TriMet", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://www.c-tran.com/images/Google/GoogleTransitUpload.zip", |
||||
"filename": "C-TRAN-stops.txt", |
||||
"agencyId": "C-TRAN", |
||||
"agencyName": "C-TRAN", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://oregon-gtfs.com/gtfs_data/rideconnection-or-us/rideconnection-or-us.zip", |
||||
"filename": "RIDECONNECTION-stops.txt", |
||||
"agencyId": "RIDECONNECTION", |
||||
"agencyName": "Ride Connection", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://cherriots.org/developer/gtfs.zip", |
||||
"filename": "CHERRIOTS-stops.txt", |
||||
"agencyId": "CHERRIOTS", |
||||
"agencyName": "Cherriots", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://oregon-gtfs.com/gtfs_data/sandy-or-us/sandy-or-us.zip", |
||||
"filename": "SAM-stops.txt", |
||||
"agencyId": "SAM", |
||||
"agencyName": "SAM", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://data.trilliumtransit.com/gtfs/wilsonville-or-us/wilsonville-or-us.zip", |
||||
"filename": "SMART-stops.txt", |
||||
"agencyId": "SMART", |
||||
"agencyName": "SMART", |
||||
"layerName": "Stop" |
||||
}, |
||||
{ |
||||
"layerId": "stops", |
||||
"url": "http://oregon-gtfs.com/gtfs_data/swanisland-or-us/swanisland-or-us.zip", |
||||
"filename": "SWAN-stops.txt", |
||||
"agencyId": "SWAN", |
||||
"agencyName": "Swan Island", |
||||
"layerName": "Stop" |
||||
} |
||||
] |
||||
}, |
||||
"interpolation": { |
||||
"download": { |
||||
"tiger": { |
||||
"datapath": "/data/tiger", |
||||
"states": [ |
||||
{ "state_code": 41, "county_code": 67, "name": "Washington County, OR" }, |
||||
{ "state_code": 41, "county_code": 51, "name": "Multnomah County, OR" }, |
||||
{ "state_code": 41, "county_code": 5, "name": "Clackamas County, OR" }, |
||||
{ "state_code": 41, "county_code": 71, "name": "Yamhill County, OR" }, |
||||
{ "state_code": 41, "county_code": 47, "name": "Marion County, OR" }, |
||||
{ "state_code": 41, "county_code": 53, "name": "Polk County, OR" }, |
||||
{ "state_code": 53, "county_code": 11, "name": "Clark County, WA" } |
||||
] |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,138 @@
|
||||
|
||||
shopping,store,shop,retail,grocery,mall |
||||
|
||||
# Transit Centers |
||||
Oregon City Transit Center,Oregon City TC,OCTC |
||||
Barbur Blvd Transit Center,BBTC,Barbur Blvd TC,Barbur TC |
||||
Beaverton Transit Center,BTC,Beaverton TC |
||||
Clackamas Town Center Transit Center,CTC,Clackamas TC,Clackamas Town Center TC,Clackamas Transit Center |
||||
Gateway/NE 99th Ave Transit Center,GTC,Gateway TC,Gateway Transit Center |
||||
Gresham Central Transit Center,GCTC,Gresham Central TC,Gresham TC |
||||
Hillsboro Center/SE 3rd Ave Transit Center, HCTC, Hillsboro TC, Hillsboro Transit Center |
||||
Hollywood/NE 42nd Ave Transit Center,HTC, HOllywood TC,HOllywood Transit Center |
||||
Lake Oswego Transit Center, LOTC,Lake Oswego TC |
||||
N Lombard Transit Center, Lombard Transit Center, Lombard TC,NLTC |
||||
Parkrose/Sumner Transit Center, Parkrose Transit Center,Parkrose TC,PRSTC,PTC |
||||
Rose Quarter Transit Center,RQTC, Rose Quarter TC |
||||
Sunset Transit Center,Sunset TC, STC |
||||
Tigard Transit Center,Tigard TC,TTC |
||||
Washington Square Transit Center,WSTC,Washington Square TC |
||||
Willow Creek/SW 185th Ave Transit Center, Willow Creek TC, Willow Creek Transit Center, WCTC |
||||
|
||||
# Rail Stations |
||||
Yamhill District MAX Station,YAMX |
||||
Washington/SE 12th Ave MAX Station, WASX |
||||
Tuality Hospital/SE 8th Ave MAX Station, TUAX |
||||
Skidmore Fountain MAX Station, SKIX |
||||
SE Powell Blvd MAX Station,POWX |
||||
SE Holgate BLvd MAX Station,HOLX |
||||
SE Fuller Rd MAX Station,FULX |
||||
SE Flavel St MAX Station,FLAX |
||||
SE Division St MAX Station,DIVX |
||||
Ruby Junction/E 197th Ave MAX Station,RUBX |
||||
Rosa Parks MAX Station,N Portland Blvd MAX Station,ROSX,RPX |
||||
Rockwood/E 188th Ave MAX Station,ROCX |
||||
Quatama/NW 205th Ave MAX Station,QUAX |
||||
Providence Park MAX Station,Civic Stadium MAX Station,JELD-WEN Field MAX Station,PGE Park MAX Station,PPX,PROX |
||||
Portland Int'l Airport MAX Station; PDXX |
||||
Pioneer Square South MAX Station,PCSS MAX |
||||
Pioneer Square North MAX Station,PCSN MAX |
||||
Parkrose/Sumner TC MAX Station,Parkrose MAX Station,PTC |
||||
Overlook Park MAX Station,OVEX |
||||
Orenco/NW 231st Ave MAX Station,OREX |
||||
Old Town/Chinatown MAX Station,OLDX |
||||
Oak/SW 1st Ave MAX Station,OAKX |
||||
N Prescott St MAX Station,PREX |
||||
N Killingsworth St MAX Station,KILX |
||||
NE 60th Ave MAX Station,60X |
||||
NE 82nd Ave MAX Station,82X |
||||
Mt Hood Ave MAX Station,MTHX |
||||
Millikan Way MAX Station,MILX |
||||
Merlo Rd/SW 158th Ave MAX Station,MERX |
||||
Lloyd Center/NE 11th Ave MAX Station,LLOX |
||||
Library/SW 9th Ave MAX Station,LIBX |
||||
Lents Town Center/Foster Rd MAX Station,LENX |
||||
Kings Hill/SW Salmon St MAX Station,KINX |
||||
Kenton/N Denver Ave MAX Station,KENX |
||||
Interstate/Rose Quarter MAX Station,IRQ MAX,IRQ |
||||
Hawthorn Farm MAX Station,HAWX |
||||
Goose Hollow/SW Jefferson St MAX Station,GHX,GOOX |
||||
Galleria/SW 10th Ave MAX Station,GALX |
||||
Fair Complex/Hillsboro Airport MAX Station,FAIX |
||||
Expo Center MAX Station,EXPX |
||||
E 162nd Ave MAX Station,162X |
||||
E 172nd Ave MAX Station,172X |
||||
E 181st Ave MAX Station,181X |
||||
E 102nd Ave MAX Station,102X |
||||
E 122nd Ave MAX Station,122X |
||||
E 148th Ave MAX Station,148X |
||||
Elmonica/SW 170th Ave MAX Station,ELMX,Elmonica |
||||
Delta Park/Vanport MAX Station,DELX,DPV MAX,DPX |
||||
Convention Center MAX Station,CCX,CONX |
||||
Cleveland Ave MAX Station,CLEX |
||||
Cascades MAX Station,CASX |
||||
Beaverton Creek MAX Station,BCRX |
||||
Beaverton Central MAX Station,BEAX |
||||
Albina/Mississippi MAX Station,ALBX |
||||
|
||||
# TriMet Facilities |
||||
ATP/Nela,Nela |
||||
Center Street Bus Maintenance, Center Garage |
||||
Elmonica Operations Facility,Elmo,Elmonica |
||||
Merlo Operations Facility,Merlo Garage, Merlo |
||||
Powell Operations Facility,Powell Garage |
||||
Transit Mobility Center,ATP Mobility Center,Mobility Center |
||||
TriMet Administration Headquarters,Admin Building,Administration Building,Harrison Square,TriMet Administrative Offices |
||||
TriMet Operations Headquarters,Center St, Center Street,TriMet Lost & Found |
||||
#Trimet Ticket Office,TTO |
||||
Vintage Trolley Barn,Trolley Barn |
||||
|
||||
# Misc Landmarks |
||||
# FXP: removed psu and pdx, since they led to ambig hits |
||||
Oregon Zoo,Zoo,Washington Park Zoo |
||||
Portland State University,Portland State |
||||
Portland International Raceway,PIR |
||||
Portland International Airport,Portland Airport |
||||
Portland Community College - Cascade,PCC Cascade |
||||
Portland Community College - Rock Creek,PCC Rock Creek |
||||
Portland Community College - Southeast,PCC Southeast, PCC Southeast Center |
||||
Portland Community College - Sylvania,PCC Sylvania |
||||
Portland Community College - Willow Creek Center,PCC Willow Creek Center |
||||
Pioneer Courthouse Square,Downtown Portland,PCS |
||||
Oregon Rail Heritage Center,ORHF |
||||
Oregon Museum of Science and Industry,OMSI |
||||
Oregon Health & Science University,OHSU,Oregon Health Sciences University |
||||
Oregon College of Oriental Medicine,OCOM |
||||
Moda Center at the Rose Quarter,Moda Center,Rose Garden Arena |
||||
Clackamas Community College,CCC |
||||
Clackamas Community College Harmony Campus, CCCH |
||||
Gordon Faber Recreation Complex,Hillsboro Stadium,Ron Tonkin Field |
||||
Providence Park,Civic Stadium,JELD-WEN Field,PGE Park |
||||
OSHU Collaborative Life Sciences Building, Skourtes Tower, CLSB, School of Dentistry |
||||
Aging & Disability, DHS |
||||
African Youth and Community Organization, AYCO |
||||
|
||||
north, N |
||||
south, S |
||||
east, E |
||||
west, W |
||||
north west => northwest |
||||
north east => northeast |
||||
south west => southwest |
||||
south east => southeast |
||||
northwest, NW |
||||
northeast, NE |
||||
southwest, SW |
||||
southeast, SE |
||||
|
||||
Portland, Portland City Center |
||||
Int'l, international |
||||
clackamus, clackamas |
||||
clack, clackamas |
||||
p-town, portland |
||||
casscade, cascade |
||||
|
||||
# street names |
||||
Tualatin Valley Hwy,TV Hwy,TVH,TVHWY |
||||
Beaverton-Hillsdale Hwy,Beaverton- Hillsdale Hwy,BH Hwy,BHH |
||||
MLK,M L King,Martin Luther King |
@ -0,0 +1,133 @@
|
||||
|
||||
Tualatin Valley Hwy,TV Hwy,TVH,TVHWY |
||||
Beaverton Hillsdale HWY,Beaverton-Hillsdale HWY,BH HYW,BHH |
||||
Beaverton Hillsdale,Beaverton-Hillsdale,BH |
||||
Martin Luther King,ML King,M L King,MLK |
||||
Doernbecher,Dornbecher,Doernbecker,Dornbecker,Dornbecka |
||||
Native American Youth => NAYA |
||||
Transit Center => TC |
||||
Park Ride => PR |
||||
Park & Ride => PR |
||||
Park and Ride => PR |
||||
caeser,cesar,chavez,39th |
||||
metro,portland |
||||
oregon,or |
||||
carshare,car2go,Zipcar,Flexcar,GetAround,ucarshare,uhaul,hertz,wecar,enterprise |
||||
ticket,fare,outlet,store,retail |
||||
dmv,motor,vehicles |
||||
court house => courthouse |
||||
court-house => courthouse |
||||
cc,court,courts,courth,courthouse |
||||
law,jail,prison,jail,courthouse,enforcement,juvenile,justice,juvenile,correctional |
||||
jewvi,juvi,juvenile |
||||
|
||||
first,1st |
||||
second,2nd |
||||
third,3rd |
||||
forth,4th |
||||
fifth,5th |
||||
sixth,6th |
||||
seventh,7th |
||||
eighth,8th |
||||
nineth,9th |
||||
tenth,10th |
||||
eleventh,11th |
||||
twelfth,12th |
||||
thirteenth,13th |
||||
fourteenth,14th |
||||
fifteenth,15th |
||||
sixteenth,16th |
||||
seventeenth,17th |
||||
eighteenth,18th |
||||
nineteenth,19th |
||||
twentyth,20th |
||||
twentyfirst,21st |
||||
twentysecond,22nd |
||||
twentythrid,23rd |
||||
|
||||
# USPS Suffix Abbreviations |
||||
# http://www.usps.com/ncsc/lookups/abbreviations.html#suffix |
||||
st,st.,street,str |
||||
ave,ave.,av,av.,avenue,AVNUE,AVENUE,AVENU |
||||
dr,drive,dr.,drv,driv,drives |
||||
BOULEVARD,BLVD,BOULEVARD,BOUL,BOULEVARD,BOULEVARD,BOULV |
||||
BRIDGE,BRDGE,BRG |
||||
BYPASS,BYP,BYPA,BYPAS,BYPS |
||||
CLIFF,CLF,CLIFFS,CLFS |
||||
CLUB,CLB |
||||
COMMON,CMN |
||||
CORNER,COR,CORNERS,CORS |
||||
CENTER,CEN,CENT,CENTER,CENTR,CENTRE,CNTER,CNTR,CTR,CENTERS,CTRS |
||||
CIR,CIRC,CIRCL,CIRCLE,CRCL,CIRCLE,CRCLE |
||||
COURT,CRT,CT,COURTS |
||||
CTSCK,CR,CREEK,CRK |
||||
CROSSING,CRSSING,CRSSNG,XING |
||||
CRECENT,CRES,CRESCENT,CRESENT,CRSCNT,CRSENT,CRSNT |
||||
EXP,EXPR,EXPRESS,EXPRESSWAY,EXPW,EXPY |
||||
FALL,FALLS,FLS |
||||
FERRY,FRRY,FRY |
||||
FIELD,FLD,FIELDS,FLDS |
||||
FREEWAY,FREEWY,FRWAY,FRWY,FWY |
||||
GARDEN,GARDN,GDN,GRDEN,GRDN,GARDENS,GDNS,GRDNS |
||||
GATEWAY,GATEWY,GATWAY,GTWAY,GTWY |
||||
GROV,GROVE,GRV,GROVES |
||||
HARB,HARBOR,HARBR,HBR,HRBOR,HARBORS |
||||
HEIGHT,HEIGHTS,HGTS,HT,HTS |
||||
HIGHWAY,HIGHWY,HIWAY,HIWY,HWAY,HWY |
||||
HILL,HL,HILLS,HLS |
||||
IS,ISLAND,ISLND,ISLANDS,ISLNDS,ISS,ISLE,ISLES |
||||
JCT,JCTION,JCTN,JUNCTION,JUNCTN,JUNCTON,JCTNS,JCTS,JUNCTIONS |
||||
LAKE,LK,LAKES,LKS |
||||
LANDING,LNDG,LNDNG |
||||
LA,LANE,LANES,LN |
||||
LOOP,LOOPS,LP |
||||
MANOR,MNR,MANORS,MNRS |
||||
MDW,MEADOW,MDWS,MEADOWS,MEDOWS |
||||
MILL,ML,MILLS,MLS |
||||
MNT,MOUNT,MT |
||||
MNTAIN,MNTN,MOUNTAIN,MOUNTIN,MTIN,MTN,MNTNS,MOUNTAINS |
||||
ORCH,ORCHARD,ORCHRD |
||||
PARK,PK,PRK,PARKS |
||||
PARKWAY,PARKWY,PKWAY,PKWY,PKY,PARKWAYS,PKWYS |
||||
PLAZA,PLZ,PLZA |
||||
PLACE,PL |
||||
PR,PRAIRIE,PRARIE,PRR |
||||
RANCH,RANCHES,RNCH,RNCHS |
||||
RDG,RDGE,RIDGE,RDGS,RIDGES |
||||
RIV,RIVER,RIVR,RVR |
||||
RD,ROAD,RDS,ROADS |
||||
RTESHLS,SHOALS |
||||
SHOAR,SHORE,SHR,SHOARS,SHORES,SHRS |
||||
SPG,SPNG,SPRING,SPRNG,SPGS,SPNGS,SPRINGS,SPRNGS |
||||
SQ,SQR,SQRE,SQU,SQUARE,SQRS,SQUARES |
||||
STA,STATION,STATN,STN |
||||
STREAM,STREME,STRM |
||||
ST,STR,STREET,STRT,STREETS |
||||
SMT,SUMIT,SUMITT,SUMMIT |
||||
TER,TERR,TERRACE |
||||
TR,TRAIL,TRAILS,TRL,TRLS |
||||
TUNEL,TUNL,TUNLS,TUNNEL,TUNNELS,TUNNL |
||||
UN,UNION,UNIONS |
||||
VALLEY,VALLY,VLLY,VLY,VALLEYS,VLYS |
||||
VDCT,VIA,VIADCT,VIADUCT |
||||
VIEW,VW,VIEWS,VWS |
||||
VILL,VILLAG,VILLAGE,VILLG,VILLIAGE,VLG,VILLAGES,VLGS |
||||
VILLE,VL |
||||
VIS,VIST,VISTA,VST,VSTA |
||||
WAY,WY,WAYS |
||||
|
||||
north, N |
||||
south, S |
||||
east, E |
||||
west, W |
||||
north west => northwest |
||||
north east => northeast |
||||
south west => southwest |
||||
south east => southeast |
||||
northwest, NW |
||||
northeast, NE |
||||
southwest, SW |
||||
southeast, SE |
||||
|
||||
broadway st => broadway |
||||
broadway street => broadway |
Loading…
Reference in new issue