Skip to content

Commit a162aaa

Browse files
committed
Preparando afa logistico para novo código. #58
1 parent 34916a9 commit a162aaa

File tree

1 file changed

+145
-123
lines changed

1 file changed

+145
-123
lines changed

src/step01ggeohash-api.sql

Lines changed: 145 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
CREATE EXTENSION IF NOT EXISTS postgis;
22
CREATE SCHEMA IF NOT EXISTS api;
33

4-
-- scientific
4+
-- SCIENTIFIC
5+
56
CREATE or replace FUNCTION api.br_afacode_encode(
67
p_lat float,
78
p_lon float,
@@ -17,7 +18,8 @@ CREATE or replace FUNCTION api.br_afacode_encode(
1718
'area', afa.br_cell_area(L),
1819
'side', afa.br_cell_side(L),
1920
'base','base16h',
20-
'jurisd_base_id',76
21+
'jurisd_base_id',76,
22+
'isolabel_ext', 'BR'
2123
)
2224
)))::jsonb
2325
FROM afa.br_cell_nearst_level(p_u) a(L), afa.br_encode(p_lat,p_lon,L) b(hbig)
@@ -40,7 +42,8 @@ CREATE or replace FUNCTION api.cm_afacode_encode(
4042
'area', afa.cm_cell_area(L),
4143
'side', afa.cm_cell_side(L),
4244
'base','base16h',
43-
'jurisd_base_id',120
45+
'jurisd_base_id',120,
46+
'isolabel_ext', 'CM'
4447
)
4548
)))::jsonb
4649
FROM afa.cm_cell_nearst_level(p_u) a(L), afa.cm_encode(p_lat,p_lon,L) b(hbig)
@@ -63,7 +66,8 @@ CREATE or replace FUNCTION api.co_afacode_encode(
6366
'area', afa.co_cell_area(L),
6467
'side', afa.co_cell_side(L),
6568
'base','base16h',
66-
'jurisd_base_id',170
69+
'jurisd_base_id',170,
70+
'isolabel_ext', 'CO'
6771
)
6872
)))::jsonb
6973
FROM afa.co_cell_nearst_level(p_u) a(L), afa.co_encode(p_lat,p_lon,L) b(hbig)
@@ -72,24 +76,6 @@ COMMENT ON FUNCTION api.co_afacode_encode(float,float,float)
7276
IS 'Encodes lat/lon to AFAcode grid in Colombia. Returns a GeoJSON FeatureCollection with cell geometry and metadata.';
7377
;
7478

75-
CREATE or replace FUNCTION api.afacode_encode(
76-
p_uri text,
77-
p_grid int DEFAULT 0,
78-
p_iso text DEFAULT NULL
79-
) RETURNS jsonb AS $wrap$
80-
SELECT
81-
CASE p_iso
82-
WHEN 'BR' THEN api.br_afacode_encode(u[1],u[2],u[3])
83-
WHEN 'CM' THEN api.cm_afacode_encode(u[1],u[2],u[3])
84-
WHEN 'CO' THEN api.co_afacode_encode(u[1],u[2],u[3])
85-
END
86-
FROM str_geouri_decode_new(p_uri) t(u)
87-
$wrap$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
88-
COMMENT ON FUNCTION api.afacode_encode(text,int,text)
89-
IS 'Wrapper for country-specific AFAcode encoders. Decodes a GeoURI and delegates encoding based on ISO country code.';
90-
;
91-
92-
9379
CREATE or replace FUNCTION api.br_afacode_decode(
9480
p_code text
9581
) RETURNS jsonb AS $f$
@@ -103,7 +89,8 @@ CREATE or replace FUNCTION api.br_afacode_decode(
10389
'side', afa.br_cell_side(xyL[3]),
10490
'base','base16h',
10591
'jurisd_base_id',76,
106-
'truncated_code',(CASE WHEN length(id) <> length(code) THEN FALSE ELSE TRUE END)
92+
'isolabel_ext', 'BR'
93+
'truncated_code',(CASE WHEN length(id) <> length(code) THEN TRUE ELSE FALSE END)
10794
)
10895
)))::jsonb
10996
FROM
@@ -120,7 +107,7 @@ COMMENT ON FUNCTION api.br_afacode_decode(text)
120107
IS 'Decodes a scientific AFAcode into a GeoJSON FeatureCollection for Brazil.';
121108
;
122109

123-
CREATE or replace FUNCTION api.co_afacode_decode(
110+
CREATE or replace FUNCTION api.cm_afacode_decode(
124111
p_code text
125112
) RETURNS jsonb AS $f$
126113
SELECT
@@ -129,28 +116,29 @@ CREATE or replace FUNCTION api.co_afacode_decode(
129116
'geometry', ST_AsGeoJSON(ST_Transform_Resilient(geom,4326,0.005,0.00000005),8,0)::jsonb,
130117
'id', id,
131118
'properties', jsonb_build_object(
132-
'area', afa.co_cell_area(xyL[3]),
133-
'side', afa.co_cell_side(xyL[3]),
119+
'area', afa.cm_cell_area(xyL[3]),
120+
'side', afa.cm_cell_side(xyL[3]),
134121
'base','base16h',
135-
'jurisd_base_id',170,
136-
'truncated_code',(CASE WHEN length(id) <> length(code) THEN FALSE ELSE TRUE END)
122+
'jurisd_base_id',120,
123+
'isolabel_ext', 'CM'
124+
'truncated_code',(CASE WHEN length(id) <> length(code) THEN TRUE ELSE FALSE END)
137125
)
138126
)))::jsonb
139127
FROM
140128
(
141-
SELECT code, hbig, afa.hBig_to_hex(hbig) AS id, afa.co_hBig_to_xyLRef(hbig) AS xyL, afa.co_decode(hbig) AS geom
129+
SELECT code, hbig, afa.hBig_to_hex(hbig) AS id, afa.cm_hBig_to_xyLRef(hbig) AS xyL, afa.cm_decode(hbig) AS geom
142130
FROM
143131
(
144-
SELECT code, afa.co_hex_to_hBig(substring(code,1,11)) AS hbig
132+
SELECT code, afa.cm_hex_to_hBig(substring(code,1,10)) AS hbig
145133
FROM regexp_split_to_table(p_code,',') code
146134
) a
147135
) b
148136
$f$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
149-
COMMENT ON FUNCTION api.co_afacode_decode(text)
150-
IS 'Decodes a scientific AFAcode into a GeoJSON FeatureCollection for Colombia.';
137+
COMMENT ON FUNCTION api.cm_afacode_decode(text)
138+
IS 'Decodes a scientific AFAcode into a GeoJSON FeatureCollection for Cameroon.';
151139
;
152140

153-
CREATE or replace FUNCTION api.cm_afacode_decode(
141+
CREATE or replace FUNCTION api.co_afacode_decode(
154142
p_code text
155143
) RETURNS jsonb AS $f$
156144
SELECT
@@ -159,25 +147,43 @@ CREATE or replace FUNCTION api.cm_afacode_decode(
159147
'geometry', ST_AsGeoJSON(ST_Transform_Resilient(geom,4326,0.005,0.00000005),8,0)::jsonb,
160148
'id', id,
161149
'properties', jsonb_build_object(
162-
'area', afa.cm_cell_area(xyL[3]),
163-
'side', afa.cm_cell_side(xyL[3]),
150+
'area', afa.co_cell_area(xyL[3]),
151+
'side', afa.co_cell_side(xyL[3]),
164152
'base','base16h',
165-
'jurisd_base_id',120,
166-
'truncated_code',(CASE WHEN length(id) <> length(code) THEN FALSE ELSE TRUE END)
153+
'jurisd_base_id',170,
154+
'isolabel_ext', 'CO'
155+
'truncated_code',(CASE WHEN length(id) <> length(code) THEN TRUE ELSE FALSE END)
167156
)
168157
)))::jsonb
169158
FROM
170159
(
171-
SELECT code, hbig, afa.hBig_to_hex(hbig) AS id, afa.cm_hBig_to_xyLRef(hbig) AS xyL, afa.cm_decode(hbig) AS geom
160+
SELECT code, hbig, afa.hBig_to_hex(hbig) AS id, afa.co_hBig_to_xyLRef(hbig) AS xyL, afa.co_decode(hbig) AS geom
172161
FROM
173162
(
174-
SELECT code, afa.cm_hex_to_hBig(substring(code,1,10)) AS hbig
163+
SELECT code, afa.co_hex_to_hBig(substring(code,1,11)) AS hbig
175164
FROM regexp_split_to_table(p_code,',') code
176165
) a
177166
) b
178167
$f$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
179-
COMMENT ON FUNCTION api.cm_afacode_decode(text)
180-
IS 'Decodes a scientific AFAcode into a GeoJSON FeatureCollection for Cameroon.';
168+
COMMENT ON FUNCTION api.co_afacode_decode(text)
169+
IS 'Decodes a scientific AFAcode into a GeoJSON FeatureCollection for Colombia.';
170+
;
171+
172+
CREATE or replace FUNCTION api.afacode_encode(
173+
p_uri text,
174+
p_grid int DEFAULT 0,
175+
p_iso text DEFAULT NULL
176+
) RETURNS jsonb AS $wrap$
177+
SELECT
178+
CASE p_iso
179+
WHEN 'BR' THEN api.br_afacode_encode(u[1],u[2],u[3])
180+
WHEN 'CM' THEN api.cm_afacode_encode(u[1],u[2],u[3])
181+
WHEN 'CO' THEN api.co_afacode_encode(u[1],u[2],u[3])
182+
END
183+
FROM str_geouri_decode_new(p_uri) t(u)
184+
$wrap$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
185+
COMMENT ON FUNCTION api.afacode_encode(text,int,text)
186+
IS 'Wrapper for country-specific AFAcode encoders. Decodes a GeoURI and delegates encoding based on ISO country code.';
181187
;
182188

183189
CREATE or replace FUNCTION api.afacode_decode(
@@ -186,9 +192,9 @@ CREATE or replace FUNCTION api.afacode_decode(
186192
) RETURNS jsonb AS $wrap$
187193
SELECT
188194
CASE p_iso
189-
WHEN 'BR' THEN api.br_afacode_decode(list)
190-
WHEN 'CM' THEN api.cm_afacode_decode(list)
191-
WHEN 'CO' THEN api.co_afacode_decode(list)
195+
WHEN 'BR' THEN api.br_afacode_decode(list)
196+
WHEN 'CM' THEN api.cm_afacode_decode(list)
197+
WHEN 'CO' THEN api.co_afacode_decode(list)
192198
END
193199
FROM natcod.reduxseq_to_list(p_code) u(list)
194200
$wrap$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
@@ -202,37 +208,114 @@ CREATE or replace FUNCTION api.afacode_decode_with_prefix(
202208
) RETURNS jsonb AS $wrap$
203209
SELECT api.afacode_decode(REPLACE(u[2],'.',''),u[1])
204210
FROM regexp_split_to_array(p_code,p_separator) u
205-
$wrap$ LANGUAGE SQL IMMUTABLE;
211+
$wrap$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
206212
COMMENT ON FUNCTION api.afacode_decode_with_prefix(text,text)
207213
IS 'Parses and decodes a prefixed AFAcode. Splits ISO prefix and code, and delegates to afacode_decode.';
208214
;
209-
-- EXPLAIN ANALYZE SELECT api.afacode_decode_with_prefix('BR+D1A',18);
215+
-- EXPLAIN ANALYZE SELECT api.afacode_decode_with_prefix('BR+D1A');
210216

217+
-- LOGISTICS
211218

212-
-- logistics
219+
CREATE or replace FUNCTION api.br_afacode_encode_log(
220+
p_lat float,
221+
p_lon float,
222+
p_u float,
223+
p_isolabel_ext text
224+
) RETURNS jsonb AS $f$
225+
SELECT
226+
jsonb_build_object('type','FeatureCollection','features', jsonb_agg(jsonb_build_object(
227+
'type','Feature',
228+
'geometry', ST_AsGeoJSON(ST_Transform_Resilient(afa.br_decode(hbig),4326,0.005,0.00000005),8,0)::jsonb,
229+
'id', afa.hBig_to_hex(hbig),
230+
'properties', jsonb_build_object(
231+
'area', afa.br_cell_area(L),
232+
'side', afa.br_cell_side(L),
233+
'base','base32',
234+
'jurisd_base_id',76,
235+
'isolabel_ext', p_isolabel_ext,
236+
'isolabel_ext_abbrev', (SELECT abbrev FROM mvwjurisdiction_synonym_default_abbrev x WHERE x.isolabel_ext = p_isolabel_ext)
237+
-- 'logistic_id', CASE p_type WHEN 2 THEN split_part(isolabel_ext,'-',1) || '-' || jurisd_local_id ELSE isolabel_ext END || '~' || short_code,
238+
-- 'jurisd_local_id', jurisd_local_id
239+
)
240+
)))::jsonb
241+
FROM afa.br_cell_nearst_level(p_u) a(L), afa.br_encode(p_lat,p_lon,L) b(hbig)
242+
$f$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
243+
COMMENT ON FUNCTION api.br_afacode_encode(float,float,float)
244+
IS 'Encodes lat/lon to AFAcode Logistics in Brazil. Returns a GeoJSON FeatureCollection with cell geometry and metadata.';
245+
;
213246

214-
CREATE or replace FUNCTION api.osmcode_encode_postal(
215-
uri text,
216-
grid int DEFAULT 0,
247+
CREATE or replace FUNCTION api.cm_afacode_encode_log(
248+
p_lat float,
249+
p_lon float,
250+
p_u float,
251+
p_isolabel_ext text
252+
) RETURNS jsonb AS $f$
253+
SELECT
254+
jsonb_build_object('type','FeatureCollection','features', jsonb_agg(jsonb_build_object(
255+
'type','Feature',
256+
'geometry', ST_AsGeoJSON(ST_Transform_Resilient(afa.cm_decode(hbig),4326,0.005,0.00000005),8,0)::jsonb,
257+
'id', afa.hBig_to_hex(hbig),
258+
'properties', jsonb_build_object(
259+
'area', afa.cm_cell_area(L),
260+
'side', afa.cm_cell_side(L),
261+
'base','base32',
262+
'jurisd_base_id',120,
263+
'isolabel_ext', p_isolabel_ext,
264+
'isolabel_ext_abbrev', (SELECT abbrev FROM mvwjurisdiction_synonym_default_abbrev x WHERE x.isolabel_ext = p_isolabel_ext)
265+
-- 'logistic_id', CASE p_type WHEN 2 THEN split_part(isolabel_ext,'-',1) || '-' || jurisd_local_id ELSE isolabel_ext END || '~' || short_code,
266+
-- 'jurisd_local_id', jurisd_local_id
267+
)
268+
)))::jsonb
269+
FROM afa.cm_cell_nearst_level(p_u) a(L), afa.cm_encode(p_lat,p_lon,L) b(hbig)
270+
$f$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
271+
COMMENT ON FUNCTION api.cm_afacode_encode(float,float,float)
272+
IS 'Encodes lat/lon to AFAcode Logistics in Cameroon. Returns a GeoJSON FeatureCollection with cell geometry and metadata.';
273+
;
274+
275+
CREATE or replace FUNCTION api.co_afacode_encode_log(
276+
p_lat float,
277+
p_lon float,
278+
p_u float,
279+
p_isolabel_ext text
280+
) RETURNS jsonb AS $f$
281+
SELECT
282+
jsonb_build_object('type','FeatureCollection','features', jsonb_agg(jsonb_build_object(
283+
'type','Feature',
284+
'geometry', ST_AsGeoJSON(ST_Transform_Resilient(afa.co_decode(hbig),4326,0.005,0.00000005),8,0)::jsonb,
285+
'id', afa.hBig_to_hex(hbig),
286+
'properties', jsonb_build_object(
287+
'area', afa.co_cell_area(L),
288+
'side', afa.co_cell_side(L),
289+
'base','base32',
290+
'jurisd_base_id',170,
291+
'isolabel_ext', p_isolabel_ext,
292+
'isolabel_ext_abbrev', (SELECT abbrev FROM mvwjurisdiction_synonym_default_abbrev x WHERE x.isolabel_ext = p_isolabel_ext)
293+
-- 'logistic_id', CASE p_type WHEN 2 THEN split_part(isolabel_ext,'-',1) || '-' || jurisd_local_id ELSE isolabel_ext END || '~' || short_code,
294+
-- 'jurisd_local_id', jurisd_local_id
295+
)
296+
)))::jsonb
297+
FROM afa.co_cell_nearst_level(p_u) a(L), afa.co_encode(p_lat,p_lon,L) b(hbig)
298+
$f$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
299+
COMMENT ON FUNCTION api.co_afacode_encode(float,float,float)
300+
IS 'Encodes lat/lon to AFAcode Logistics in Colombia. Returns a GeoJSON FeatureCollection with cell geometry and metadata.';
301+
;
302+
303+
CREATE or replace FUNCTION api.afacode_encode_log(
304+
p_uri text,
305+
p_grid int DEFAULT 0,
217306
p_isolabel_ext text DEFAULT NULL
218307
) RETURNS jsonb AS $wrap$
219308
SELECT
220309
CASE split_part(p_isolabel_ext,'-',1)
221-
WHEN 'BR' THEN osmc.encode_postal_br(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326),952019),u[4],grid,p_isolabel_ext)
222-
WHEN 'CM' THEN osmc.encode_postal_cm(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326), 32632),u[4],grid,p_isolabel_ext)
223-
WHEN 'CO' THEN osmc.encode_postal_co(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326), 9377),u[4],grid,p_isolabel_ext)
224-
WHEN 'UY' THEN osmc.encode_postal_uy(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326), 32721),u[4],grid,p_isolabel_ext)
225-
WHEN 'EC' THEN osmc.encode_postal_ec(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326), 32717),u[4],grid,p_isolabel_ext)
226-
WHEN 'SV' THEN osmc.encode_postal_sv(ST_Transform(ST_SetSRID(ST_MakePoint(u[2],u[1]),4326), 5399),u[4],grid,p_isolabel_ext)
310+
WHEN 'BR' THEN api.br_afacode_encode_log(u[1],u[2],u[3],p_isolabel_ext)
311+
WHEN 'CM' THEN api.cm_afacode_encode_log(u[1],u[2],u[3],p_isolabel_ext)
312+
WHEN 'CO' THEN api.co_afacode_encode_log(u[1],u[2],u[3],p_isolabel_ext)
227313
END
228-
FROM (SELECT str_geouri_decode(uri) ) t(u)
229-
230-
$wrap$ LANGUAGE SQL IMMUTABLE;
314+
FROM str_geouri_decode_new(p_uri) t(u)
315+
$wrap$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
231316
COMMENT ON FUNCTION api.osmcode_encode_postal(text,int,text)
232317
IS 'Encodes Geo URI to Postal OSMcode. Wrap for osmcode_encode_postal.'
233318
;
234-
-- EXPLAIN ANALYZE SELECT api.osmcode_encode_postal('geo:-15.5,-47.8',0,'BR-GO-Planaltina');
235-
-- EXPLAIN ANALYZE SELECT api.osmcode_encode('geo:-15.5,-47.8',0);
236319

237320
CREATE or replace FUNCTION api.osmcode_encode(
238321
uri text,
@@ -272,72 +355,11 @@ $wrap$ LANGUAGE SQL IMMUTABLE;
272355
COMMENT ON FUNCTION api.osmcode_encode(text,int)
273356
IS 'Encodes Geo URI (no context) to logistic OSMcode.'
274357
;
358+
-- EXPLAIN ANALYZE SELECT api.afacode_encode_log('geo:-15.5,-47.8',0,'BR-GO-Planaltina');
275359
-- EXPLAIN ANALYZE SELECT api.osmcode_encode('geo:3.461,-76.577');
276360
-- EXPLAIN ANALYZE SELECT api.osmcode_encode('geo:-15.5,-47.8');
277361

278362

279-
CREATE or replace FUNCTION api.osmcode_decode_postal_absolute(
280-
p_code text, -- e.g.: '645' in 16h1c
281-
p_iso text -- e.g.: 'BR'
282-
) RETURNS jsonb AS $f$
283-
SELECT jsonb_build_object(
284-
'type', 'FeatureCollection',
285-
'features',
286-
(
287-
SELECT jsonb_agg(
288-
ST_AsGeoJSONb(ST_Transform_resilient(v.geom,4326,0.005,0.00000005),8,0,null,
289-
jsonb_strip_nulls(jsonb_build_object(
290-
'code', code,
291-
'area', ST_Area(v.geom),
292-
'side', SQRT(ST_Area(v.geom)),
293-
'base', '32nvu',
294-
'jurisd_local_id', t.jurisd_local_id,
295-
'jurisd_base_id', v.jurisd_id, -- ***
296-
'isolabel_ext', t.isolabel_ext,
297-
'short_code', CASE WHEN upper_p_iso IN ('CO') THEN upper_p_iso || '-' || t.jurisd_local_id ELSE t.isolabel_ext END || '~' || t.short_code,
298-
'scientic_code', CASE
299-
WHEN upper_p_iso IN ('BR','UY') THEN osmc.encode_16h1c(natcod.vbit_to_baseh(osmc.cbits_b32nvu_to_16h(codebits,jurisd_id),16,true),jurisd_id)
300-
ELSE natcod.vbit_to_baseh(osmc.cbits_b32nvu_to_16h(codebits,jurisd_id),16,true)
301-
END
302-
))
303-
)::jsonb) AS gj
304-
FROM
305-
(
306-
SELECT DISTINCT upper(p_iso) AS upper_p_iso, code, natcod.b32nvu_to_vbit(code) AS codebits
307-
FROM regexp_split_to_table(upper(p_code),',') code
308-
) c
309-
LEFT JOIN LATERAL
310-
(
311-
SELECT osmc.extract_jurisdbits(cbits) AS jurisd_id, cbits,
312-
ggeohash.draw_cell_bybox(ggeohash.decode_box2(osmc.vbit_withoutL0(osmc.vbit_withoutL0((osmc.cbits_b32nvu_to_16h(codebits,osmc.extract_jurisdbits(cbits))),osmc.extract_jurisdbits(cbits)),osmc.extract_jurisdbits(cbits)),bbox, CASE WHEN c.upper_p_iso='EC' THEN TRUE ELSE FALSE END),false,ST_SRID(geom)) AS geom
313-
FROM osmc.coverage
314-
WHERE is_country IS TRUE AND isolabel_ext = c.upper_p_iso AND ( ( osmc.cbits_16h_to_b32nvu(osmc.extract_L0bits(cbits),osmc.extract_jurisdbits(cbits)) # codebits::bit(5) ) = 0::bit(5) )
315-
) v
316-
ON TRUE
317-
318-
-- responsável pelo código logístico
319-
LEFT JOIN LATERAL ( SELECT * FROM osmc.encode_short_code(c.code,v.jurisd_id::bit(8)||osmc.cbits_b32nvu_to_16h(c.codebits,v.jurisd_id),null,ST_Centroid(v.geom)) ) t ON TRUE
320-
321-
WHERE
322-
CASE WHEN upper_p_iso = 'UY' THEN natcod.vbit_to_baseh(osmc.cbits_b32nvu_to_16h(codebits,v.jurisd_id),16,true) NOT IN ('0eg','10g','12g','00r','12r','0eh','05q','11q') ELSE TRUE END
323-
)
324-
)
325-
$f$ LANGUAGE SQL IMMUTABLE;
326-
COMMENT ON FUNCTION api.osmcode_decode_postal_absolute(text,text)
327-
IS 'Decode absolute postal OSMcode.'
328-
;
329-
-- EXPLAIN ANALYZE SELECT api.osmcode_decode_postal_absolute('6HRJ27TB','CO');
330-
331-
CREATE or replace FUNCTION api.osmcode_decode_postal_absolute(
332-
p_code text
333-
) RETURNS jsonb AS $wrap$
334-
SELECT api.osmcode_decode_postal_absolute(REPLACE(u[2],'.',''),u[1])
335-
FROM regexp_split_to_array(p_code,'~') u
336-
$wrap$ LANGUAGE SQL IMMUTABLE;
337-
COMMENT ON FUNCTION api.osmcode_decode_postal_absolute(text)
338-
IS 'Decode Postal OSMcode. Wrap for osmcode_decode_postal_absolute.'
339-
;
340-
-- EXPLAIN ANALYZE SELECT api.osmcode_decode_postal_absolute('CO~D6MCY0');
341363

342364
CREATE or replace FUNCTION api.osmcode_decode_postal(
343365
p_code text,

0 commit comments

Comments
 (0)