REGION
Patrick Dowler
patrick.dowler at nrc-cnrc.gc.ca
Fri Sep 7 10:24:27 PDT 2007
Here is our current thinking on region, in BNF (disclaimer: not a bnf
expert :-). Basically, we agreed to the functional representation since the
difference between it and an operator is largely cosmetic (if you will
re-write ADQL -> SQL) but it is also directly implementable. We also went
with REGION as a type (so you have functions with regions as args and you can
have a column of type region). POINT is not a type at this time.
In SQL terms REGION is a BLOB or BINARY and the region literals can be
implemented as functions that return such a value, so this fits in standard
SQL quite well.
We have defined <coordsys> as a small list of constants only. ICRS and GAL
satisfy 98% of the uses since clients can convert from other equatorial
systems trivially and converting from ecliptic requires also knowing the
time. How we do this is a minor issue... could just be a string and a TAP
capability to understand coordsys transformations.
Alex and Pat
--
!! region is a type: column or literal
<region> ::= <column_reference> | <region_literal>
<region_literal> ::= <circle> | <rectangle> | <polygon> | <region_stc>
<coordsys> ::= <column_reference> | <coordsys_literal>
<coordsys_literal> ::= ICRS | GAL
!! CIRCLE(coordsys, longitude, latitude, radius)
<circle> ::= CIRCLE <left_paren>
<coordsys>
<comma> <numeric_value_expression>
<comma> <numeric_value_expression>
<comma> <numeric_value_expression>
<right_paren>
!! RECTANGLE(coordsys, long1, lat1, long2, lat2)
<rectangle> ::= RECTANGLE <left_paren>
<coordsys>
<comma> <numeric_value_expression> <comma> <numeric_value_expression>
<comma> <numeric_value_expression> <comma> <numeric_value_expression>
<right_paren>
!! POLYGON(coordsys, long1, lat1, long2, lat2, long3, lat3, ...)
!! eg. 3 or more vertices, implicit closing of the last segment
!! does not explicitly state the winding direction (a la postgres)
<polygon> ::= POLYGON <left_paren>
<coordsys>
<comma> <numeric_value_expression> <comma> <numeric_value_expression>
<comma> <numeric_value_expression> <comma> <numeric_value_expression>
<comma> <numeric_value_expression> <comma> <numeric_value_expression>
[ <comma> <numeric_value_expression> <comma> <numeric_value_expression> ...]
<right_paren>
!! REGION(stc_string_representation)
!! actually putting an STC string into ADQL has all kinds of escaping issues
!! since it undoubtedly contains SQL reserved characters like ' and "
<region_stc> ::= REGION_STC <left_paren>
<character_value_expression>
<right_paren>
!! region_predicate needs to be included in <predicate>
<region_predicate> ::= <contains_predicate> | <intersects_predicate>
!! boolean CONTAINS(r, coordsys, longitude, latitude)
<contains_predicate> ::= CONTAINS <left_paren>
<region>
<comma> <coordsys>
<comma> <numeric_value_expression>
<comma> <numeric_value_expression>
<right_paren>
!! boolean INTERSECTS(r1, r2)
<intersects_predicate> ::= INTERSECTS <left_paren>
<region> <comma> <region>
<right_paren>
!! double AREA(r)
!! include in <numeric_value_function>
<area> ::= AREA <left_paren> <region> <right_paren>
!! allowed formats for converting region to strings in select
!! default should be ADQL
!! ADQL would be any suitable <region_literal>
!! STC would be the STC representation without the REGION_STC() around it
<format> ::= STC | ADQL
!! string TO_CHAR(region, format)
<to_char> ::= TO_CHAR <left_paren> <region> <comma> <format> <right_paren>
--
Patrick Dowler
Tel/Tél: (250) 363-6914 | fax/télécopieur: (250) 363-0045
Canadian Astronomy Data Centre | Centre canadien de donnees astronomiques
National Research Council Canada | Conseil national de recherches Canada
Government of Canada | Gouvernement du Canada
5071 West Saanich Road | 5071, chemin West Saanich
Victoria, BC | Victoria (C.-B.)
More information about the voql-teg
mailing list