| 1 | --------------------------------------------------------------------------- |
|---|
| 2 | -- $Id$ |
|---|
| 3 | -- |
|---|
| 4 | -- PostGIS - Spatial Types for PostgreSQL |
|---|
| 5 | -- Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> |
|---|
| 6 | -- |
|---|
| 7 | -- This is free software; you can redistribute and/or modify it under |
|---|
| 8 | -- the terms of the GNU General Public Licence. See the COPYING file. |
|---|
| 9 | -- |
|---|
| 10 | --------------------------------------------------------------------------- |
|---|
| 11 | |
|---|
| 12 | ----------------------------------------------------------------------------- |
|---|
| 13 | -- GEOGRAPHY TYPE |
|---|
| 14 | ----------------------------------------------------------------------------- |
|---|
| 15 | |
|---|
| 16 | -- Availability: 1.5.0 |
|---|
| 17 | CREATE OR REPLACE FUNCTION geography_typmod_in(cstring[]) |
|---|
| 18 | RETURNS integer |
|---|
| 19 | AS 'MODULE_PATHNAME','geography_typmod_in' |
|---|
| 20 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 21 | |
|---|
| 22 | -- Availability: 1.5.0 |
|---|
| 23 | CREATE OR REPLACE FUNCTION geography_typmod_out(integer) |
|---|
| 24 | RETURNS cstring |
|---|
| 25 | AS 'MODULE_PATHNAME','postgis_typmod_out' |
|---|
| 26 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 27 | |
|---|
| 28 | -- Availability: 1.5.0 |
|---|
| 29 | CREATE OR REPLACE FUNCTION geography_in(cstring, oid, integer) |
|---|
| 30 | RETURNS geography |
|---|
| 31 | AS 'MODULE_PATHNAME','geography_in' |
|---|
| 32 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 33 | |
|---|
| 34 | -- Availability: 1.5.0 |
|---|
| 35 | CREATE OR REPLACE FUNCTION geography_out(geography) |
|---|
| 36 | RETURNS cstring |
|---|
| 37 | AS 'MODULE_PATHNAME','geography_out' |
|---|
| 38 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 39 | |
|---|
| 40 | -- Availability: 2.0.0 |
|---|
| 41 | CREATE OR REPLACE FUNCTION geography_recv(internal, oid, integer) |
|---|
| 42 | RETURNS geography |
|---|
| 43 | AS 'MODULE_PATHNAME','geography_recv' |
|---|
| 44 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 45 | |
|---|
| 46 | -- Availability: 2.0.0 |
|---|
| 47 | CREATE OR REPLACE FUNCTION geography_send(geography) |
|---|
| 48 | RETURNS bytea |
|---|
| 49 | AS 'MODULE_PATHNAME','geography_send' |
|---|
| 50 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 51 | |
|---|
| 52 | -- Availability: 1.5.0 |
|---|
| 53 | CREATE OR REPLACE FUNCTION geography_analyze(internal) |
|---|
| 54 | RETURNS bool |
|---|
| 55 | AS 'MODULE_PATHNAME','geography_analyze' |
|---|
| 56 | LANGUAGE 'C' VOLATILE STRICT; |
|---|
| 57 | |
|---|
| 58 | -- Availability: 1.5.0 |
|---|
| 59 | CREATE TYPE geography ( |
|---|
| 60 | internallength = variable, |
|---|
| 61 | input = geography_in, |
|---|
| 62 | output = geography_out, |
|---|
| 63 | receive = geography_recv, |
|---|
| 64 | send = geography_send, |
|---|
| 65 | typmod_in = geography_typmod_in, |
|---|
| 66 | typmod_out = geography_typmod_out, |
|---|
| 67 | delimiter = ':', |
|---|
| 68 | analyze = geography_analyze, |
|---|
| 69 | storage = main, |
|---|
| 70 | alignment = double |
|---|
| 71 | ); |
|---|
| 72 | |
|---|
| 73 | |
|---|
| 74 | |
|---|
| 75 | -- Availability: 1.5.0 |
|---|
| 76 | CREATE OR REPLACE FUNCTION geography(geography, integer, boolean) |
|---|
| 77 | RETURNS geography |
|---|
| 78 | AS 'MODULE_PATHNAME','geography_enforce_typmod' |
|---|
| 79 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 80 | |
|---|
| 81 | -- Availability: 1.5.0 |
|---|
| 82 | CREATE CAST (geography AS geography) WITH FUNCTION geography(geography, integer, boolean) AS IMPLICIT; |
|---|
| 83 | |
|---|
| 84 | -- Availability: 2.0.0 |
|---|
| 85 | CREATE OR REPLACE FUNCTION geography(bytea) |
|---|
| 86 | RETURNS geography |
|---|
| 87 | AS 'MODULE_PATHNAME','LWGEOM_from_bytea' |
|---|
| 88 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 89 | |
|---|
| 90 | -- Availability: 2.0.0 |
|---|
| 91 | CREATE OR REPLACE FUNCTION bytea(geography) |
|---|
| 92 | RETURNS bytea |
|---|
| 93 | AS 'MODULE_PATHNAME','LWGEOM_to_bytea' |
|---|
| 94 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 95 | |
|---|
| 96 | -- Availability: 2.0.0 |
|---|
| 97 | CREATE CAST (bytea AS geography) WITH FUNCTION geography(bytea) AS IMPLICIT; |
|---|
| 98 | -- Availability: 2.0.0 |
|---|
| 99 | CREATE CAST (geography AS bytea) WITH FUNCTION bytea(geography) AS IMPLICIT; |
|---|
| 100 | |
|---|
| 101 | -- Availability: 1.5.0 |
|---|
| 102 | CREATE OR REPLACE FUNCTION ST_AsText(geography) |
|---|
| 103 | RETURNS TEXT |
|---|
| 104 | AS 'MODULE_PATHNAME','LWGEOM_asText' |
|---|
| 105 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 106 | |
|---|
| 107 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 108 | CREATE OR REPLACE FUNCTION ST_AsText(text) |
|---|
| 109 | RETURNS text AS |
|---|
| 110 | $$ SELECT ST_AsText($1::geometry); $$ |
|---|
| 111 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 112 | |
|---|
| 113 | -- Availability: 1.5.0 |
|---|
| 114 | CREATE OR REPLACE FUNCTION ST_GeographyFromText(text) |
|---|
| 115 | RETURNS geography |
|---|
| 116 | AS 'MODULE_PATHNAME','geography_from_text' |
|---|
| 117 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 118 | |
|---|
| 119 | -- Availability: 1.5.0 |
|---|
| 120 | CREATE OR REPLACE FUNCTION ST_GeogFromText(text) |
|---|
| 121 | RETURNS geography |
|---|
| 122 | AS 'MODULE_PATHNAME','geography_from_text' |
|---|
| 123 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 124 | |
|---|
| 125 | -- Availability: 1.5.0 |
|---|
| 126 | CREATE OR REPLACE FUNCTION ST_GeogFromWKB(bytea) |
|---|
| 127 | RETURNS geography |
|---|
| 128 | AS 'MODULE_PATHNAME','geography_from_binary' |
|---|
| 129 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 130 | |
|---|
| 131 | -- Availability: 1.5.0 |
|---|
| 132 | CREATE OR REPLACE FUNCTION postgis_typmod_dims(integer) |
|---|
| 133 | RETURNS integer |
|---|
| 134 | AS 'MODULE_PATHNAME','postgis_typmod_dims' |
|---|
| 135 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 136 | |
|---|
| 137 | -- Availability: 1.5.0 |
|---|
| 138 | CREATE OR REPLACE FUNCTION postgis_typmod_srid(integer) |
|---|
| 139 | RETURNS integer |
|---|
| 140 | AS 'MODULE_PATHNAME','postgis_typmod_srid' |
|---|
| 141 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 142 | |
|---|
| 143 | -- Availability: 1.5.0 |
|---|
| 144 | CREATE OR REPLACE FUNCTION postgis_typmod_type(integer) |
|---|
| 145 | RETURNS text |
|---|
| 146 | AS 'MODULE_PATHNAME','postgis_typmod_type' |
|---|
| 147 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 148 | |
|---|
| 149 | -- Availability: 1.5.0 |
|---|
| 150 | CREATE OR REPLACE VIEW geography_columns AS |
|---|
| 151 | SELECT |
|---|
| 152 | current_database() AS f_table_catalog, |
|---|
| 153 | n.nspname AS f_table_schema, |
|---|
| 154 | c.relname AS f_table_name, |
|---|
| 155 | a.attname AS f_geography_column, |
|---|
| 156 | postgis_typmod_dims(a.atttypmod) AS coord_dimension, |
|---|
| 157 | postgis_typmod_srid(a.atttypmod) AS srid, |
|---|
| 158 | postgis_typmod_type(a.atttypmod) AS type |
|---|
| 159 | FROM |
|---|
| 160 | pg_class c, |
|---|
| 161 | pg_attribute a, |
|---|
| 162 | pg_type t, |
|---|
| 163 | pg_namespace n |
|---|
| 164 | WHERE t.typname = 'geography' |
|---|
| 165 | AND a.attisdropped = false |
|---|
| 166 | AND a.atttypid = t.oid |
|---|
| 167 | AND a.attrelid = c.oid |
|---|
| 168 | AND c.relnamespace = n.oid |
|---|
| 169 | AND NOT pg_is_other_temp_schema(c.relnamespace); |
|---|
| 170 | |
|---|
| 171 | -- Availability: 1.5.0 |
|---|
| 172 | CREATE OR REPLACE FUNCTION geography(geometry) |
|---|
| 173 | RETURNS geography |
|---|
| 174 | AS 'MODULE_PATHNAME','geography_from_geometry' |
|---|
| 175 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 176 | |
|---|
| 177 | -- Availability: 1.5.0 |
|---|
| 178 | CREATE CAST (geometry AS geography) WITH FUNCTION geography(geometry) AS IMPLICIT; |
|---|
| 179 | |
|---|
| 180 | -- Availability: 1.5.0 |
|---|
| 181 | CREATE OR REPLACE FUNCTION geometry(geography) |
|---|
| 182 | RETURNS geometry |
|---|
| 183 | AS 'MODULE_PATHNAME','geometry_from_geography' |
|---|
| 184 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 185 | |
|---|
| 186 | -- Availability: 1.5.0 |
|---|
| 187 | CREATE CAST (geography AS geometry) WITH FUNCTION geometry(geography) ; |
|---|
| 188 | |
|---|
| 189 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 190 | -- GiST Support Functions |
|---|
| 191 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 192 | |
|---|
| 193 | -- Availability: 1.5.0 |
|---|
| 194 | CREATE OR REPLACE FUNCTION geography_gist_consistent(internal,geography,int4) |
|---|
| 195 | RETURNS bool |
|---|
| 196 | AS 'MODULE_PATHNAME' ,'gserialized_gist_consistent' |
|---|
| 197 | LANGUAGE 'C'; |
|---|
| 198 | |
|---|
| 199 | -- Availability: 1.5.0 |
|---|
| 200 | CREATE OR REPLACE FUNCTION geography_gist_compress(internal) |
|---|
| 201 | RETURNS internal |
|---|
| 202 | AS 'MODULE_PATHNAME','gserialized_gist_compress' |
|---|
| 203 | LANGUAGE 'C'; |
|---|
| 204 | |
|---|
| 205 | -- Availability: 1.5.0 |
|---|
| 206 | CREATE OR REPLACE FUNCTION geography_gist_penalty(internal,internal,internal) |
|---|
| 207 | RETURNS internal |
|---|
| 208 | AS 'MODULE_PATHNAME' ,'gserialized_gist_penalty' |
|---|
| 209 | LANGUAGE 'C'; |
|---|
| 210 | |
|---|
| 211 | -- Availability: 1.5.0 |
|---|
| 212 | CREATE OR REPLACE FUNCTION geography_gist_picksplit(internal, internal) |
|---|
| 213 | RETURNS internal |
|---|
| 214 | AS 'MODULE_PATHNAME' ,'gserialized_gist_picksplit' |
|---|
| 215 | LANGUAGE 'C'; |
|---|
| 216 | |
|---|
| 217 | -- Availability: 1.5.0 |
|---|
| 218 | CREATE OR REPLACE FUNCTION geography_gist_union(bytea, internal) |
|---|
| 219 | RETURNS internal |
|---|
| 220 | AS 'MODULE_PATHNAME' ,'gserialized_gist_union' |
|---|
| 221 | LANGUAGE 'C'; |
|---|
| 222 | |
|---|
| 223 | -- Availability: 1.5.0 |
|---|
| 224 | CREATE OR REPLACE FUNCTION geography_gist_same(box2d, box2d, internal) |
|---|
| 225 | RETURNS internal |
|---|
| 226 | AS 'MODULE_PATHNAME' ,'gserialized_gist_same' |
|---|
| 227 | LANGUAGE 'C'; |
|---|
| 228 | |
|---|
| 229 | -- Availability: 1.5.0 |
|---|
| 230 | CREATE OR REPLACE FUNCTION geography_gist_decompress(internal) |
|---|
| 231 | RETURNS internal |
|---|
| 232 | AS 'MODULE_PATHNAME' ,'gserialized_gist_decompress' |
|---|
| 233 | LANGUAGE 'C'; |
|---|
| 234 | |
|---|
| 235 | -- Availability: 1.5.0 |
|---|
| 236 | CREATE OR REPLACE FUNCTION geography_gist_selectivity (internal, oid, internal, int4) |
|---|
| 237 | RETURNS float8 |
|---|
| 238 | AS 'MODULE_PATHNAME', 'geography_gist_selectivity' |
|---|
| 239 | LANGUAGE 'C'; |
|---|
| 240 | |
|---|
| 241 | -- Availability: 1.5.0 |
|---|
| 242 | CREATE OR REPLACE FUNCTION geography_gist_join_selectivity(internal, oid, internal, smallint) |
|---|
| 243 | RETURNS float8 |
|---|
| 244 | AS 'MODULE_PATHNAME', 'geography_gist_selectivity' |
|---|
| 245 | LANGUAGE 'C'; |
|---|
| 246 | |
|---|
| 247 | -- Availability: 1.5.0 |
|---|
| 248 | CREATE OR REPLACE FUNCTION geography_overlaps(geography, geography) |
|---|
| 249 | RETURNS boolean |
|---|
| 250 | AS 'MODULE_PATHNAME' ,'gserialized_overlaps' |
|---|
| 251 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 252 | |
|---|
| 253 | -- Availability: 1.5.0 |
|---|
| 254 | CREATE OPERATOR && ( |
|---|
| 255 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_overlaps, |
|---|
| 256 | COMMUTATOR = '&&', |
|---|
| 257 | RESTRICT = geography_gist_selectivity, |
|---|
| 258 | JOIN = geography_gist_join_selectivity |
|---|
| 259 | ); |
|---|
| 260 | |
|---|
| 261 | |
|---|
| 262 | -- Availability: 1.5.0 |
|---|
| 263 | CREATE OPERATOR CLASS gist_geography_ops |
|---|
| 264 | DEFAULT FOR TYPE geography USING GIST AS |
|---|
| 265 | STORAGE gidx, |
|---|
| 266 | OPERATOR 3 && , |
|---|
| 267 | -- OPERATOR 6 ~= , |
|---|
| 268 | -- OPERATOR 7 ~ , |
|---|
| 269 | -- OPERATOR 8 @ , |
|---|
| 270 | FUNCTION 1 geography_gist_consistent (internal, geography, int4), |
|---|
| 271 | FUNCTION 2 geography_gist_union (bytea, internal), |
|---|
| 272 | FUNCTION 3 geography_gist_compress (internal), |
|---|
| 273 | FUNCTION 4 geography_gist_decompress (internal), |
|---|
| 274 | FUNCTION 5 geography_gist_penalty (internal, internal, internal), |
|---|
| 275 | FUNCTION 6 geography_gist_picksplit (internal, internal), |
|---|
| 276 | FUNCTION 7 geography_gist_same (box2d, box2d, internal); |
|---|
| 277 | |
|---|
| 278 | |
|---|
| 279 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 280 | -- B-Tree Functions |
|---|
| 281 | -- For sorting and grouping |
|---|
| 282 | -- Availability: 1.5.0 |
|---|
| 283 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 284 | |
|---|
| 285 | CREATE OR REPLACE FUNCTION geography_lt(geography, geography) |
|---|
| 286 | RETURNS bool |
|---|
| 287 | AS 'MODULE_PATHNAME', 'geography_lt' |
|---|
| 288 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 289 | |
|---|
| 290 | CREATE OR REPLACE FUNCTION geography_le(geography, geography) |
|---|
| 291 | RETURNS bool |
|---|
| 292 | AS 'MODULE_PATHNAME', 'geography_le' |
|---|
| 293 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 294 | |
|---|
| 295 | CREATE OR REPLACE FUNCTION geography_gt(geography, geography) |
|---|
| 296 | RETURNS bool |
|---|
| 297 | AS 'MODULE_PATHNAME', 'geography_gt' |
|---|
| 298 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 299 | |
|---|
| 300 | CREATE OR REPLACE FUNCTION geography_ge(geography, geography) |
|---|
| 301 | RETURNS bool |
|---|
| 302 | AS 'MODULE_PATHNAME', 'geography_ge' |
|---|
| 303 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 304 | |
|---|
| 305 | CREATE OR REPLACE FUNCTION geography_eq(geography, geography) |
|---|
| 306 | RETURNS bool |
|---|
| 307 | AS 'MODULE_PATHNAME', 'geography_eq' |
|---|
| 308 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 309 | |
|---|
| 310 | CREATE OR REPLACE FUNCTION geography_cmp(geography, geography) |
|---|
| 311 | RETURNS integer |
|---|
| 312 | AS 'MODULE_PATHNAME', 'geography_cmp' |
|---|
| 313 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 314 | |
|---|
| 315 | -- |
|---|
| 316 | -- Sorting operators for Btree |
|---|
| 317 | -- |
|---|
| 318 | |
|---|
| 319 | CREATE OPERATOR < ( |
|---|
| 320 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_lt, |
|---|
| 321 | COMMUTATOR = '>', NEGATOR = '>=', |
|---|
| 322 | RESTRICT = contsel, JOIN = contjoinsel |
|---|
| 323 | ); |
|---|
| 324 | |
|---|
| 325 | CREATE OPERATOR <= ( |
|---|
| 326 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_le, |
|---|
| 327 | COMMUTATOR = '>=', NEGATOR = '>', |
|---|
| 328 | RESTRICT = contsel, JOIN = contjoinsel |
|---|
| 329 | ); |
|---|
| 330 | |
|---|
| 331 | CREATE OPERATOR = ( |
|---|
| 332 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_eq, |
|---|
| 333 | COMMUTATOR = '=', -- we might implement a faster negator here |
|---|
| 334 | RESTRICT = contsel, JOIN = contjoinsel |
|---|
| 335 | ); |
|---|
| 336 | |
|---|
| 337 | CREATE OPERATOR >= ( |
|---|
| 338 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_ge, |
|---|
| 339 | COMMUTATOR = '<=', NEGATOR = '<', |
|---|
| 340 | RESTRICT = contsel, JOIN = contjoinsel |
|---|
| 341 | ); |
|---|
| 342 | CREATE OPERATOR > ( |
|---|
| 343 | LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_gt, |
|---|
| 344 | COMMUTATOR = '<', NEGATOR = '<=', |
|---|
| 345 | RESTRICT = contsel, JOIN = contjoinsel |
|---|
| 346 | ); |
|---|
| 347 | |
|---|
| 348 | CREATE OPERATOR CLASS btree_geography_ops |
|---|
| 349 | DEFAULT FOR TYPE geography USING btree AS |
|---|
| 350 | OPERATOR 1 < , |
|---|
| 351 | OPERATOR 2 <= , |
|---|
| 352 | OPERATOR 3 = , |
|---|
| 353 | OPERATOR 4 >= , |
|---|
| 354 | OPERATOR 5 > , |
|---|
| 355 | FUNCTION 1 geography_cmp (geography, geography); |
|---|
| 356 | |
|---|
| 357 | |
|---|
| 358 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 359 | -- Export Functions |
|---|
| 360 | -- Availability: 1.5.0 |
|---|
| 361 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 362 | |
|---|
| 363 | -- |
|---|
| 364 | -- SVG OUTPUT |
|---|
| 365 | -- |
|---|
| 366 | |
|---|
| 367 | -- ST_AsSVG(geography, rel, precision) |
|---|
| 368 | -- rel int4 DEFAULT 0, maxdecimaldigits int4 DEFAULT 15 |
|---|
| 369 | -- Changed 2.0.0 to use default args and named args |
|---|
| 370 | CREATE OR REPLACE FUNCTION ST_AsSVG(geog geography,rel int4 DEFAULT 0,maxdecimaldigits int4 DEFAULT 15) |
|---|
| 371 | RETURNS text |
|---|
| 372 | AS 'MODULE_PATHNAME','geography_as_svg' |
|---|
| 373 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 374 | |
|---|
| 375 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 376 | CREATE OR REPLACE FUNCTION ST_AsSVG(text) |
|---|
| 377 | RETURNS text AS |
|---|
| 378 | $$ SELECT ST_AsSVG($1::geometry,0,15); $$ |
|---|
| 379 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 380 | |
|---|
| 381 | -- |
|---|
| 382 | -- GML OUTPUT |
|---|
| 383 | -- |
|---|
| 384 | |
|---|
| 385 | -- _ST_AsGML(version, geography, precision, option) |
|---|
| 386 | CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4, text) |
|---|
| 387 | RETURNS text |
|---|
| 388 | AS 'MODULE_PATHNAME','geography_as_gml' |
|---|
| 389 | LANGUAGE 'C' IMMUTABLE; |
|---|
| 390 | |
|---|
| 391 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 392 | -- Change 2.0.0 to use base function |
|---|
| 393 | CREATE OR REPLACE FUNCTION ST_AsGML(text) |
|---|
| 394 | RETURNS text AS |
|---|
| 395 | $$ SELECT _ST_AsGML(2,$1::geometry,15,0, NULL); $$ |
|---|
| 396 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 397 | |
|---|
| 398 | -- ST_AsGML (geography, precision, option) / version=2 |
|---|
| 399 | -- Availability: 1.5.0 |
|---|
| 400 | -- Changed: 2.0.0 to use default args |
|---|
| 401 | CREATE OR REPLACE FUNCTION ST_AsGML(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) |
|---|
| 402 | RETURNS text |
|---|
| 403 | AS 'SELECT _ST_AsGML(2, $1, $2, $3, null)' |
|---|
| 404 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 405 | |
|---|
| 406 | -- ST_AsGML(version, geography, precision, option, prefix) |
|---|
| 407 | -- Changed: 2.0.0 to use default args and allow named args |
|---|
| 408 | CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT NULL) |
|---|
| 409 | RETURNS text |
|---|
| 410 | AS $$ SELECT _ST_AsGML($1, $2, $3, $4, $5);$$ |
|---|
| 411 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 412 | |
|---|
| 413 | -- |
|---|
| 414 | -- KML OUTPUT |
|---|
| 415 | -- |
|---|
| 416 | |
|---|
| 417 | -- _ST_AsKML(version, geography, precision) |
|---|
| 418 | CREATE OR REPLACE FUNCTION _ST_AsKML(int4, geography, int4, text) |
|---|
| 419 | RETURNS text |
|---|
| 420 | AS 'MODULE_PATHNAME','geography_as_kml' |
|---|
| 421 | LANGUAGE 'C' IMMUTABLE; |
|---|
| 422 | |
|---|
| 423 | -- AsKML(geography,precision) / version=2 |
|---|
| 424 | -- Changed: 2.0.0 to use default args and named args |
|---|
| 425 | CREATE OR REPLACE FUNCTION ST_AsKML(geog geography, maxdecimaldigits int4 DEFAULT 15) |
|---|
| 426 | RETURNS text |
|---|
| 427 | AS 'SELECT _ST_AsKML(2, $1, $2, null)' |
|---|
| 428 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 429 | |
|---|
| 430 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 431 | -- Deprecated 2.0.0 |
|---|
| 432 | CREATE OR REPLACE FUNCTION ST_AsKML(text) |
|---|
| 433 | RETURNS text AS |
|---|
| 434 | $$ SELECT _ST_AsKML(2, $1::geometry, 15, null); $$ |
|---|
| 435 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 436 | |
|---|
| 437 | -- ST_AsKML(version, geography, precision, prefix) |
|---|
| 438 | -- Availability: 2.0.0 nprefix added |
|---|
| 439 | -- Changed: 2.0.0 to use default args and named args |
|---|
| 440 | CREATE OR REPLACE FUNCTION ST_AsKML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, nprefix text DEFAULT null) |
|---|
| 441 | RETURNS text |
|---|
| 442 | AS 'SELECT _ST_AsKML($1, $2, $3, $4)' |
|---|
| 443 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 444 | |
|---|
| 445 | -- |
|---|
| 446 | -- GeoJson Output |
|---|
| 447 | -- |
|---|
| 448 | |
|---|
| 449 | CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geography, int4, int4) |
|---|
| 450 | RETURNS text |
|---|
| 451 | AS 'MODULE_PATHNAME','geography_as_geojson' |
|---|
| 452 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 453 | |
|---|
| 454 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 455 | -- Deprecated in 2.0.0 |
|---|
| 456 | CREATE OR REPLACE FUNCTION ST_AsGeoJson(text) |
|---|
| 457 | RETURNS text AS |
|---|
| 458 | $$ SELECT _ST_AsGeoJson(1, $1::geometry,15,0); $$ |
|---|
| 459 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 460 | |
|---|
| 461 | -- ST_AsGeoJson(geography, precision, options) / version=1 |
|---|
| 462 | -- Changed: 2.0.0 to use default args and named args |
|---|
| 463 | CREATE OR REPLACE FUNCTION ST_AsGeoJson(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) |
|---|
| 464 | RETURNS text |
|---|
| 465 | AS $$ SELECT _ST_AsGeoJson(1, $1, $2, $3); $$ |
|---|
| 466 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 467 | |
|---|
| 468 | -- ST_AsGeoJson(version, geography, precision,options) |
|---|
| 469 | -- Changed: 2.0.0 to use default args and named args |
|---|
| 470 | CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0) |
|---|
| 471 | RETURNS text |
|---|
| 472 | AS $$ SELECT _ST_AsGeoJson($1, $2, $3, $4); $$ |
|---|
| 473 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 474 | |
|---|
| 475 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 476 | -- Measurement Functions |
|---|
| 477 | -- Availability: 1.5.0 |
|---|
| 478 | -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- |
|---|
| 479 | |
|---|
| 480 | -- Stop calculation and return immediately once distance is less than tolerance |
|---|
| 481 | -- Availability: 1.5.0 |
|---|
| 482 | CREATE OR REPLACE FUNCTION _ST_Distance(geography, geography, float8, boolean) |
|---|
| 483 | RETURNS float8 |
|---|
| 484 | AS 'MODULE_PATHNAME','geography_distance' |
|---|
| 485 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 486 | COST 100; |
|---|
| 487 | |
|---|
| 488 | -- Stop calculation and return immediately once distance is less than tolerance |
|---|
| 489 | -- Availability: 1.5.0 |
|---|
| 490 | CREATE OR REPLACE FUNCTION _ST_DWithin(geography, geography, float8, boolean) |
|---|
| 491 | RETURNS boolean |
|---|
| 492 | AS 'MODULE_PATHNAME','geography_dwithin' |
|---|
| 493 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 494 | COST 100; |
|---|
| 495 | |
|---|
| 496 | -- Availability: 1.5.0 |
|---|
| 497 | CREATE OR REPLACE FUNCTION ST_Distance(geography, geography, boolean) |
|---|
| 498 | RETURNS float8 |
|---|
| 499 | AS 'SELECT _ST_Distance($1, $2, 0.0, $3)' |
|---|
| 500 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 501 | |
|---|
| 502 | -- Currently defaulting to spheroid calculations |
|---|
| 503 | -- Availability: 1.5.0 |
|---|
| 504 | CREATE OR REPLACE FUNCTION ST_Distance(geography, geography) |
|---|
| 505 | RETURNS float8 |
|---|
| 506 | AS 'SELECT _ST_Distance($1, $2, 0.0, true)' |
|---|
| 507 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 508 | |
|---|
| 509 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 510 | CREATE OR REPLACE FUNCTION ST_Distance(text, text) |
|---|
| 511 | RETURNS float8 AS |
|---|
| 512 | $$ SELECT ST_Distance($1::geometry, $2::geometry); $$ |
|---|
| 513 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 514 | |
|---|
| 515 | -- Only expands the bounding box, the actual geometry will remain unchanged, use with care. |
|---|
| 516 | -- Availability: 1.5.0 |
|---|
| 517 | CREATE OR REPLACE FUNCTION _ST_Expand(geography, float8) |
|---|
| 518 | RETURNS geography |
|---|
| 519 | AS 'MODULE_PATHNAME','geography_expand' |
|---|
| 520 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 521 | |
|---|
| 522 | -- Availability: 1.5.0 |
|---|
| 523 | CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8, boolean) |
|---|
| 524 | RETURNS boolean |
|---|
| 525 | AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, $4)' |
|---|
| 526 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 527 | |
|---|
| 528 | -- Currently defaulting to spheroid calculations |
|---|
| 529 | -- Availability: 1.5.0 |
|---|
| 530 | CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8) |
|---|
| 531 | RETURNS boolean |
|---|
| 532 | AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, true)' |
|---|
| 533 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 534 | |
|---|
| 535 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 536 | CREATE OR REPLACE FUNCTION ST_DWithin(text, text, float8) |
|---|
| 537 | RETURNS boolean AS |
|---|
| 538 | $$ SELECT ST_DWithin($1::geometry, $2::geometry, $3); $$ |
|---|
| 539 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 540 | |
|---|
| 541 | -- Availability: 1.5.0 |
|---|
| 542 | CREATE OR REPLACE FUNCTION ST_Area(geog geography, use_spheroid boolean DEFAULT true) |
|---|
| 543 | RETURNS float8 |
|---|
| 544 | AS 'MODULE_PATHNAME','geography_area' |
|---|
| 545 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 546 | COST 100; |
|---|
| 547 | |
|---|
| 548 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 549 | CREATE OR REPLACE FUNCTION ST_Area(text) |
|---|
| 550 | RETURNS float8 AS |
|---|
| 551 | $$ SELECT ST_Area($1::geometry); $$ |
|---|
| 552 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 553 | |
|---|
| 554 | -- Availability: 1.5.0 |
|---|
| 555 | CREATE OR REPLACE FUNCTION ST_Length(geog geography, use_spheroid boolean DEFAULT true) |
|---|
| 556 | RETURNS float8 |
|---|
| 557 | AS 'MODULE_PATHNAME','geography_length' |
|---|
| 558 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 559 | COST 100; |
|---|
| 560 | |
|---|
| 561 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 562 | CREATE OR REPLACE FUNCTION ST_Length(text) |
|---|
| 563 | RETURNS float8 AS |
|---|
| 564 | $$ SELECT ST_Length($1::geometry); $$ |
|---|
| 565 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 566 | |
|---|
| 567 | -- Availability: 2.0.0 |
|---|
| 568 | CREATE OR REPLACE FUNCTION ST_Project(geog geography, distance float8, azimuth float8) |
|---|
| 569 | RETURNS geography |
|---|
| 570 | AS 'MODULE_PATHNAME','geography_project' |
|---|
| 571 | LANGUAGE 'C' IMMUTABLE |
|---|
| 572 | COST 100; |
|---|
| 573 | |
|---|
| 574 | -- Availability: 2.0.0 |
|---|
| 575 | CREATE OR REPLACE FUNCTION ST_Azimuth(geog1 geography, geog2 geography) |
|---|
| 576 | RETURNS float8 |
|---|
| 577 | AS 'MODULE_PATHNAME','geography_azimuth' |
|---|
| 578 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 579 | COST 100; |
|---|
| 580 | |
|---|
| 581 | -- Availability: 2.0.0 |
|---|
| 582 | CREATE OR REPLACE FUNCTION ST_Perimeter(geog geography, use_spheroid boolean DEFAULT true) |
|---|
| 583 | RETURNS float8 |
|---|
| 584 | AS 'MODULE_PATHNAME','geography_perimeter' |
|---|
| 585 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 586 | COST 100; |
|---|
| 587 | |
|---|
| 588 | -- Availability: 1.5.0 |
|---|
| 589 | CREATE OR REPLACE FUNCTION _ST_PointOutside(geography) |
|---|
| 590 | RETURNS geography |
|---|
| 591 | AS 'MODULE_PATHNAME','geography_point_outside' |
|---|
| 592 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 593 | |
|---|
| 594 | -- Only implemented for polygon-over-point |
|---|
| 595 | -- Availability: 1.5.0 |
|---|
| 596 | CREATE OR REPLACE FUNCTION _ST_Covers(geography, geography) |
|---|
| 597 | RETURNS boolean |
|---|
| 598 | AS 'MODULE_PATHNAME','geography_covers' |
|---|
| 599 | LANGUAGE 'C' IMMUTABLE STRICT |
|---|
| 600 | COST 100; |
|---|
| 601 | |
|---|
| 602 | -- Only implemented for polygon-over-point |
|---|
| 603 | -- Availability: 1.5.0 |
|---|
| 604 | CREATE OR REPLACE FUNCTION ST_Covers(geography, geography) |
|---|
| 605 | RETURNS boolean |
|---|
| 606 | AS 'SELECT $1 && $2 AND _ST_Covers($1, $2)' |
|---|
| 607 | LANGUAGE 'SQL' IMMUTABLE; |
|---|
| 608 | |
|---|
| 609 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 610 | CREATE OR REPLACE FUNCTION ST_Covers(text, text) |
|---|
| 611 | RETURNS boolean AS |
|---|
| 612 | $$ SELECT ST_Covers($1::geometry, $2::geometry); $$ |
|---|
| 613 | LANGUAGE 'SQL' IMMUTABLE ; |
|---|
| 614 | |
|---|
| 615 | -- Only implemented for polygon-over-point |
|---|
| 616 | -- Availability: 1.5.0 |
|---|
| 617 | CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography) |
|---|
| 618 | RETURNS boolean |
|---|
| 619 | AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)' |
|---|
| 620 | LANGUAGE 'SQL' IMMUTABLE ; |
|---|
| 621 | |
|---|
| 622 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 623 | CREATE OR REPLACE FUNCTION ST_CoveredBy(text, text) |
|---|
| 624 | RETURNS boolean AS |
|---|
| 625 | $$ SELECT ST_CoveredBy($1::geometry, $2::geometry); $$ |
|---|
| 626 | LANGUAGE 'SQL' IMMUTABLE ; |
|---|
| 627 | |
|---|
| 628 | -- Availability: 1.5.0 |
|---|
| 629 | CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography) |
|---|
| 630 | RETURNS boolean |
|---|
| 631 | AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001' |
|---|
| 632 | LANGUAGE 'SQL' IMMUTABLE ; |
|---|
| 633 | |
|---|
| 634 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 635 | CREATE OR REPLACE FUNCTION ST_Intersects(text, text) |
|---|
| 636 | RETURNS boolean AS |
|---|
| 637 | $$ SELECT ST_Intersects($1::geometry, $2::geometry); $$ |
|---|
| 638 | LANGUAGE 'SQL' IMMUTABLE ; |
|---|
| 639 | |
|---|
| 640 | -- Availability: 1.5.0 |
|---|
| 641 | CREATE OR REPLACE FUNCTION _ST_BestSRID(geography, geography) |
|---|
| 642 | RETURNS integer |
|---|
| 643 | AS 'MODULE_PATHNAME','geography_bestsrid' |
|---|
| 644 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 645 | |
|---|
| 646 | -- Availability: 1.5.0 |
|---|
| 647 | CREATE OR REPLACE FUNCTION _ST_BestSRID(geography) |
|---|
| 648 | RETURNS integer |
|---|
| 649 | AS 'SELECT _ST_BestSRID($1,$1)' |
|---|
| 650 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 651 | |
|---|
| 652 | -- Availability: 1.5.0 |
|---|
| 653 | CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8) |
|---|
| 654 | RETURNS geography |
|---|
| 655 | AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))' |
|---|
| 656 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 657 | |
|---|
| 658 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 659 | CREATE OR REPLACE FUNCTION ST_Buffer(text, float8) |
|---|
| 660 | RETURNS geometry AS |
|---|
| 661 | $$ SELECT ST_Buffer($1::geometry, $2); $$ |
|---|
| 662 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 663 | |
|---|
| 664 | -- Availability: 1.5.0 |
|---|
| 665 | CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography) |
|---|
| 666 | RETURNS geography |
|---|
| 667 | AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))' |
|---|
| 668 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 669 | |
|---|
| 670 | -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 671 | CREATE OR REPLACE FUNCTION ST_Intersection(text, text) |
|---|
| 672 | RETURNS geometry AS |
|---|
| 673 | $$ SELECT ST_Intersection($1::geometry, $2::geometry); $$ |
|---|
| 674 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 675 | |
|---|
| 676 | -- Availability: 1.5.0 |
|---|
| 677 | CREATE OR REPLACE FUNCTION ST_AsBinary(geography) |
|---|
| 678 | RETURNS bytea |
|---|
| 679 | AS 'MODULE_PATHNAME','LWGEOM_asBinary' |
|---|
| 680 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 681 | |
|---|
| 682 | -- Availability: 2.0.0 |
|---|
| 683 | CREATE OR REPLACE FUNCTION ST_AsBinary(geography,text) |
|---|
| 684 | RETURNS bytea AS |
|---|
| 685 | $$ SELECT ST_AsBinary($1::geometry, $2); $$ |
|---|
| 686 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 687 | |
|---|
| 688 | -- Availability: 2.0.0 |
|---|
| 689 | CREATE OR REPLACE FUNCTION ST_AsEWKT(geography) |
|---|
| 690 | RETURNS TEXT |
|---|
| 691 | AS 'MODULE_PATHNAME','LWGEOM_asEWKT' |
|---|
| 692 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 693 | |
|---|
| 694 | -- Availability: 2.0.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography |
|---|
| 695 | CREATE OR REPLACE FUNCTION ST_AsEWKT(text) |
|---|
| 696 | RETURNS text AS |
|---|
| 697 | $$ SELECT ST_AsEWKT($1::geometry); $$ |
|---|
| 698 | LANGUAGE 'SQL' IMMUTABLE STRICT; |
|---|
| 699 | |
|---|
| 700 | -- Availability: 2.0.0 |
|---|
| 701 | CREATE OR REPLACE FUNCTION GeometryType(geography) |
|---|
| 702 | RETURNS text |
|---|
| 703 | AS 'MODULE_PATHNAME', 'LWGEOM_getTYPE' |
|---|
| 704 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 705 | |
|---|
| 706 | -- Availability: 2.0.0 |
|---|
| 707 | CREATE OR REPLACE FUNCTION ST_Summary(geography) |
|---|
| 708 | RETURNS text |
|---|
| 709 | AS 'MODULE_PATHNAME', 'LWGEOM_summary' |
|---|
| 710 | LANGUAGE 'C' IMMUTABLE STRICT; |
|---|
| 711 | |
|---|
| 712 | |
|---|
| 713 | ----------------------------------------------------------------------------- |
|---|
| 714 | |
|---|