1
1
# =================================================================
2
2
#
3
- # Authors:
3
+ # Authors:
4
4
#
5
5
# Copyright (c)
6
6
#
28
28
# =================================================================
29
29
30
30
import logging
31
- import requests
32
- from urllib .parse import urlparse
33
31
34
32
from pygeoapi .provider .base_mvt import BaseMVTProvider
35
33
from pygeoapi .provider .postgresql import PostgreSQLProvider
36
- from pygeoapi .provider .base import (ProviderConnectionError ,
37
- ProviderGenericError ,
38
- ProviderInvalidQueryError )
39
- from pygeoapi .provider .tile import ProviderTileNotFoundError
34
+ from pygeoapi .provider .base import ProviderConnectionError
40
35
from pygeoapi .models .provider .base import (
41
36
TileSetMetadata , TileMatrixSetEnum , LinkType )
42
- from pygeoapi .util import is_url , url_join
43
- from sqlalchemy .orm import Session , load_only
37
+ from pygeoapi .util import url_join
44
38
45
- from sqlalchemy .engine import URL
46
39
from sqlalchemy .sql import text
47
- from sqlalchemy .exc import ConstraintColumnNotFoundError , \
48
- InvalidRequestError , OperationalError
49
- from sqlalchemy .ext .automap import automap_base
50
- from sqlalchemy .sql .expression import and_
51
- from pygeoapi .provider .base import BaseProvider , \
52
- ProviderConnectionError , ProviderInvalidDataError , ProviderQueryError , \
53
- ProviderItemNotFoundError
54
-
40
+
55
41
from copy import deepcopy
56
- from datetime import datetime
57
- from decimal import Decimal
58
- import functools
59
- import logging
60
42
61
43
LOGGER = logging .getLogger (__name__ )
62
44
@@ -73,7 +55,7 @@ def __init__(self, provider_def):
73
55
"""
74
56
75
57
super ().__init__ (provider_def )
76
-
58
+
77
59
pg_def = deepcopy (provider_def )
78
60
del pg_def ["options" ]["zoom" ]
79
61
self .postgres = PostgreSQLProvider (pg_def )
@@ -151,47 +133,48 @@ def get_tiles(self, layer=None, tileset=None,
151
133
fields = ', ' .join (['"' + f + '"' for f in fields_arr ])
152
134
if len (fields ) != 0 :
153
135
fields = ',' + fields
154
-
136
+
155
137
query = ''
156
138
if tileset == TileMatrixSetEnum .WEBMERCATORQUAD .value .tileMatrixSet :
157
139
query = text ("""
158
- WITH
140
+ WITH
159
141
bounds AS (
160
- SELECT ST_TileEnvelope(:z, :y , :x ) AS boundgeom
142
+ SELECT ST_TileEnvelope(:z, :x , :y ) AS boundgeom
161
143
),
162
144
mvtgeom AS (
163
- SELECT ST_AsMVTGeom(ST_Transform({geom}, 3857), bounds.boundgeom) AS geom {fields}
145
+ SELECT ST_AsMVTGeom(ST_Transform(ST_CurveToLine( {geom}) , 3857), bounds.boundgeom) AS geom {fields}
164
146
FROM "{table}", bounds
165
147
WHERE ST_Intersects({geom}, ST_Transform(bounds.boundgeom, 4326))
166
148
)
167
149
SELECT ST_AsMVT(mvtgeom, 'default') FROM mvtgeom;
168
- """ .format (geom = self .geom , table = self .table , fields = fields ))
169
-
150
+ """ .format (geom = self .geom , table = self .table , fields = fields )) # noqa
151
+
170
152
if tileset == TileMatrixSetEnum .WORLDCRS84QUAD .value .tileMatrixSet :
171
153
query = text ("""
172
- WITH
154
+ WITH
173
155
bounds AS (
174
- SELECT ST_TileEnvelope(:z, :y, :x, ST_MakeEnvelope(-180, -90, 180, 90, 4326)) AS boundgeom
156
+ SELECT ST_TileEnvelope(:z, :x, :y,
157
+ 'SRID=4326;POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90))'::geometry) AS boundgeom
175
158
),
176
159
mvtgeom AS (
177
- SELECT ST_AsMVTGeom({geom}, bounds.boundgeom) AS geom {fields}
160
+ SELECT ST_AsMVTGeom(ST_CurveToLine( {geom}) , bounds.boundgeom) AS geom {fields}
178
161
FROM "{table}", bounds
179
162
WHERE ST_Intersects({geom}, bounds.boundgeom)
180
163
)
181
164
SELECT ST_AsMVT(mvtgeom, 'default') FROM mvtgeom;
182
- """ .format (geom = self .geom , table = self .table , fields = fields ))
165
+ """ .format (geom = self .geom , table = self .table , fields = fields )) # noqa
183
166
184
167
with self .postgres ._engine .connect () as session :
185
- result = session .execute (query , {
186
- 'z' : z ,
187
- 'y' : y ,
168
+ result = session .execute (query , {
169
+ 'z' : z ,
170
+ 'y' : y ,
188
171
'x' : x
189
- }).fetchone ()
172
+ }).fetchone ()
173
+
174
+ if len (bytes (result [0 ])) == 0 :
175
+ return None
176
+ return bytes (result [0 ])
190
177
191
- if len (bytes (result [0 ])) == 0 :
192
- return None
193
- return bytes (result [0 ])
194
-
195
178
def get_html_metadata (self , dataset , server_url , layer , tileset ,
196
179
title , description , keywords , ** kwargs ):
197
180
0 commit comments