Skip to content

Commit 6ece174

Browse files
authored
Generate tm2source pg (#400)
* Support standard PG params for generate-tm2source * remove unused verbose Closes #202
1 parent 738a64d commit 6ece174

File tree

5 files changed

+230
-15
lines changed

5 files changed

+230
-15
lines changed

bin/generate-tm2source

+27-11
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,48 @@
11
#!/usr/bin/env python
22
"""
33
Usage:
4-
generate-tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>]
4+
generate-tm2source <tileset>
5+
[--pghost=<host>] [--pgport=<port>] [--dbname=<db>]
6+
[--user=<user>] [--password=<password>]
7+
[--host=<host>] [--port=<port>] [--database=<db>]
58
generate-tm2source --help
69
generate-tm2source --version
710
Options:
811
--help Show this screen.
912
--version Show version.
10-
--host=<host> PostGIS host.
11-
--port=<port> PostGIS port.
12-
--database=<dbname> PostGIS database name.
13-
--user=<user> PostGIS user.
14-
--password=<pw> PostGIS password.
13+
14+
PostgreSQL Options:
15+
-h --pghost=<host> Postgres hostname. By default uses PGHOST env or "localhost" if not set.
16+
-P --pgport=<port> Postgres port. By default uses PGPORT env or "5432" if not set.
17+
-d --dbname=<db> Postgres db name. By default uses PGDATABASE env or "openmaptiles" if not set.
18+
-U --user=<user> Postgres user. By default uses PGUSER env or "openmaptiles" if not set.
19+
--password=<password> Postgres password. By default uses PGPASSWORD env or "openmaptiles" if not set.
20+
21+
Legacy support, do not use:
22+
--host=<host> Obsolete, use --pghost=<...> instead
23+
--port=<port> Obsolete, use --pgport=<...> instead
24+
--database=<d> Obsolete, use --dbname=<...> instead
25+
26+
These legacy environment variables should not be used, but they are still supported:
27+
POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD
28+
1529
"""
1630
from docopt import docopt
1731
import yaml
1832
import openmaptiles
1933
from openmaptiles.tmsource import DbParams, generate_tm2source
34+
from openmaptiles.pgutils import parse_pg_args
2035

2136

2237
if __name__ == '__main__':
2338
args = docopt(__doc__, version=openmaptiles.__version__)
39+
pghost, pgport, dbname, user, password = parse_pg_args(args, legacy_params=True)
2440
db_params = DbParams(
25-
dbname=args['--database'],
26-
port=int(args['--port']),
27-
user=args['--user'],
28-
password=args['--password'],
29-
host=args['--host']
41+
dbname=dbname,
42+
port=int(pgport),
43+
user=user,
44+
password=password,
45+
host=pghost,
3046
)
3147
tm2 = generate_tm2source(args['<tileset>'], db_params)
3248
print(yaml.safe_dump(tm2))

openmaptiles/pgutils.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,21 @@ async def show_settings(conn: Connection, verbose=True) -> Dict[str, str]:
6161
return results
6262

6363

64-
def parse_pg_args(args):
64+
def parse_pg_args(args, legacy_params=False):
65+
if legacy_params:
66+
tmp_host = args.get('--host')
67+
tmp_port = args.get('--port')
68+
tmp_db = args.get('--database')
69+
else:
70+
tmp_host, tmp_port, tmp_db = None, None, None
6571
pghost = coalesce(
66-
args.get('--pghost'), getenv('POSTGRES_HOST'), getenv('PGHOST'),
72+
tmp_host, args.get('--pghost'), getenv('POSTGRES_HOST'), getenv('PGHOST'),
6773
'localhost')
6874
pgport = coalesce(
69-
args.get('--pgport'), getenv('POSTGRES_PORT'), getenv('PGPORT'),
75+
tmp_port, args.get('--pgport'), getenv('POSTGRES_PORT'), getenv('PGPORT'),
7076
'5432')
7177
dbname = coalesce(
72-
args.get('--dbname'), getenv('POSTGRES_DB'), getenv('PGDATABASE'),
78+
tmp_db, args.get('--dbname'), getenv('POSTGRES_DB'), getenv('PGDATABASE'),
7379
'openmaptiles')
7480
user = coalesce(
7581
args.get('--user'), getenv('POSTGRES_USER'), getenv('PGUSER'),

tests/expected/tm2source2.yml

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
Layer:
2+
- Datasource:
3+
dbname: pgdb
4+
extent:
5+
- -20037508.34
6+
- -20037508.34
7+
- 20037508.34
8+
- 20037508.34
9+
geometry_field: geometry
10+
host: pghost
11+
key_field: ''
12+
key_field_as_attribute: ''
13+
max_size: 512
14+
password: pgpswd
15+
port: 5432
16+
srid: 900913
17+
table: (SELECT !bbox! as geometry, z(!scale_denominator!) AS housenumber, NULLIF(tags->'name:en',
18+
'') AS "name:en", NULLIF(tags->'name:de', '') AS "name:de", NULLIF(tags->'name:cs',
19+
'') AS "name:cs", NULLIF(tags->'name_int', '') AS "name_int", NULLIF(tags->'name:latin',
20+
'') AS "name:latin", NULLIF(tags->'name:nonlatin', '') AS "name:nonlatin" FROM
21+
(SELECT 'name:en=>"enname"'::hstore as tags) AS tt) AS t
22+
type: postgis
23+
user: pguser
24+
id: housenumber
25+
properties:
26+
buffer-size: 8
27+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
28+
+units=m +nadgrids=@null +wktext +no_defs +over
29+
- Datasource:
30+
dbname: pgdb
31+
extent:
32+
- -20037508.34
33+
- -20037508.34
34+
- 20037508.34
35+
- 20037508.34
36+
geometry_field: geometry
37+
host: pghost
38+
key_field: osm_id
39+
key_field_as_attribute: false
40+
max_size: 512
41+
password: pgpswd
42+
port: 5432
43+
srid: 900913
44+
table: (SELECT !bbox! as geometry, z(!scale_denominator!) AS osm_id, 'foo' AS
45+
class) AS t
46+
type: postgis
47+
user: pguser
48+
id: enumfield
49+
properties:
50+
buffer-size: 0
51+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
52+
+units=m +nadgrids=@null +wktext +no_defs +over
53+
- Datasource:
54+
dbname: pgdb
55+
extent:
56+
- -20037508.34
57+
- -20037508.34
58+
- 20037508.34
59+
- 20037508.34
60+
geometry_field: geometry
61+
host: pghost
62+
key_field: osm_id
63+
key_field_as_attribute: false
64+
max_size: 512
65+
password: pgpswd
66+
port: 5432
67+
srid: 900913
68+
table: (SELECT !bbox! AS geometry, z(!scale_denominator!) AS osm_id, 'foo_name'
69+
AS name, 'foo_name_en' AS name_en, 'foo_name_de' AS name_de, 'foo_class' AS
70+
class, z(!scale_denominator!) AS ele, z(!scale_denominator!) AS ele_ft, z(!scale_denominator!)
71+
AS rank) AS t
72+
type: postgis
73+
user: pguser
74+
id: mountain_peak
75+
properties:
76+
buffer-size: 64
77+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
78+
+units=m +nadgrids=@null +wktext +no_defs +over
79+
attribution: <a href="http://www.openstreetmap.org/about/" target="_blank">&copy;
80+
OpenStreetMap contributors</a>
81+
bounds:
82+
- -180.0
83+
- -85.0511
84+
- 180.0
85+
- 85.0511
86+
center:
87+
- -12.2168
88+
- 28.6135
89+
- 4
90+
description: Simple tileset for testing.
91+
maxzoom: 10
92+
minzoom: 0
93+
name: TestMapTiles v1.0
94+
pixel_scale: 256
95+

tests/expected/tm2source3.yml

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
Layer:
2+
- Datasource:
3+
dbname: openmaptiles
4+
extent:
5+
- -20037508.34
6+
- -20037508.34
7+
- 20037508.34
8+
- 20037508.34
9+
geometry_field: geometry
10+
host: localhost
11+
key_field: ''
12+
key_field_as_attribute: ''
13+
max_size: 512
14+
password: openmaptiles
15+
port: 5432
16+
srid: 900913
17+
table: (SELECT !bbox! as geometry, z(!scale_denominator!) AS housenumber, NULLIF(tags->'name:en',
18+
'') AS "name:en", NULLIF(tags->'name:de', '') AS "name:de", NULLIF(tags->'name:cs',
19+
'') AS "name:cs", NULLIF(tags->'name_int', '') AS "name_int", NULLIF(tags->'name:latin',
20+
'') AS "name:latin", NULLIF(tags->'name:nonlatin', '') AS "name:nonlatin" FROM
21+
(SELECT 'name:en=>"enname"'::hstore as tags) AS tt) AS t
22+
type: postgis
23+
user: openmaptiles
24+
id: housenumber
25+
properties:
26+
buffer-size: 8
27+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
28+
+units=m +nadgrids=@null +wktext +no_defs +over
29+
- Datasource:
30+
dbname: openmaptiles
31+
extent:
32+
- -20037508.34
33+
- -20037508.34
34+
- 20037508.34
35+
- 20037508.34
36+
geometry_field: geometry
37+
host: localhost
38+
key_field: osm_id
39+
key_field_as_attribute: false
40+
max_size: 512
41+
password: openmaptiles
42+
port: 5432
43+
srid: 900913
44+
table: (SELECT !bbox! as geometry, z(!scale_denominator!) AS osm_id, 'foo' AS
45+
class) AS t
46+
type: postgis
47+
user: openmaptiles
48+
id: enumfield
49+
properties:
50+
buffer-size: 0
51+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
52+
+units=m +nadgrids=@null +wktext +no_defs +over
53+
- Datasource:
54+
dbname: openmaptiles
55+
extent:
56+
- -20037508.34
57+
- -20037508.34
58+
- 20037508.34
59+
- 20037508.34
60+
geometry_field: geometry
61+
host: localhost
62+
key_field: osm_id
63+
key_field_as_attribute: false
64+
max_size: 512
65+
password: openmaptiles
66+
port: 5432
67+
srid: 900913
68+
table: (SELECT !bbox! AS geometry, z(!scale_denominator!) AS osm_id, 'foo_name'
69+
AS name, 'foo_name_en' AS name_en, 'foo_name_de' AS name_de, 'foo_class' AS
70+
class, z(!scale_denominator!) AS ele, z(!scale_denominator!) AS ele_ft, z(!scale_denominator!)
71+
AS rank) AS t
72+
type: postgis
73+
user: openmaptiles
74+
id: mountain_peak
75+
properties:
76+
buffer-size: 64
77+
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0
78+
+units=m +nadgrids=@null +wktext +no_defs +over
79+
attribution: <a href="http://www.openstreetmap.org/about/" target="_blank">&copy;
80+
OpenStreetMap contributors</a>
81+
bounds:
82+
- -180.0
83+
- -85.0511
84+
- 180.0
85+
- 85.0511
86+
center:
87+
- -12.2168
88+
- 28.6135
89+
- 4
90+
description: Simple tileset for testing.
91+
maxzoom: 10
92+
minzoom: 0
93+
name: TestMapTiles v1.0
94+
pixel_scale: 256
95+

tests/test-tools.sh

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ set -x
1515

1616
generate-tm2source "$TESTLAYERS/testmaptiles.yaml" \
1717
--host="pghost" --port=5432 --database="pgdb" --user="pguser" --password="pgpswd" > "$BUILD/tm2source.yml"
18+
generate-tm2source "$TESTLAYERS/testmaptiles.yaml" \
19+
--pghost="pghost" --pgport=5432 --dbname="pgdb" --user="pguser" --password="pgpswd" > "$BUILD/tm2source2.yml"
20+
generate-tm2source "$TESTLAYERS/testmaptiles.yaml" > "$BUILD/tm2source3.yml"
1821

1922
generate-imposm3 "$TESTLAYERS/testmaptiles.yaml" > "$BUILD/imposm3.yaml"
2023

0 commit comments

Comments
 (0)