### This is a diff between 1.4 and 1.5 revisions:

``` 536a535< * [[http://virtuoso.openlinksw.com/tutorials/sparql/SPARQL_Tutorials_Part_10/SPARQL_Tutorials_Part_10.html#%2837%29][MULTILINESTRING]] \ No newline at end of file535d535> * [[http://virtuoso.openlinksw.com/tutorials/sparql/SPARQL_Tutorials_Part_10/SPARQL_Tutorials_Part_10.html#%2837%29][MULTILINESTRING]]528a527< * Virtuoso Geo SPARQL Geometry Tutorials527d527> * Virtuoso GeoSPARQL Geometry Tutorials519a518< * Additional functions for splitting compound geometries into parts and constructing geometries (except operations that get shapes as arguments and returns other shapes).518d518> * Additional functions for splitting compound geometries into parts and for constructing geometries (except operations that get shapes as arguments and returns other shapes).513a512< * <a href="%ATTACHURLPATH%/GeoApiSparql.log" style="wikiautogen">GeoApiSparql.log</a>512d512> * <a href="%ATTACHURLPATH%/GeoApiSparql.log" style="wikiautogen"><code>GeoApiSparql.log</code></a>481a480< Below are some example uses of the [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]] function to transform some of the sample coordinate systems loaded into Virtuoso:480d480> Below are some example uses of the <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code> function to transform some of the sample coordinate systems loaded into Virtuoso:477a476< The <code>v7proj4</code> plugin automatically applies the <code><nowiki>RAD_TO_DEG</nowiki></code> multiplier before conversion and/or the <code><nowiki>RAD_TO_DEG</nowiki></code> multiplier after conversion, when source and/or destination coordinate systems are latitude-longitude or geocentric. Even if this conversion is done automatically, you should remember that it happens, because many "how-to" instructions for spatial data sets contain paragraphs like "how to convert these data to WGS-84" and much sample C/C++ code contains transformations like <code><nowiki>{ x *= RAD_TO_DEG; y *= RAD_TO_DEG; }</nowiki></code>. These transformations will probably be redundant in the corresponding Virtuoso/PL code, while <code>proj4</code> strings can be used unchanged and simply passed as the 3rd and 4th arguments of the [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]] function. If degrees-to-radians conversion is made twice, the data may be calculated as if the shape is located in a totally different place of ellipsoid. If the post-transformation radians-to-degrees conversion is also made twice, the resulting shape may <i>look</i> like the real one but coordinates may be tens of kilometers away from the correct values.476d476> The <code>v7proj4</code> plugin automatically applies the <code><nowiki>RAD_TO_DEG</nowiki></code> multiplier before conversion and/or the <code><nowiki>RAD_TO_DEG</nowiki></code> multiplier after conversion, when source and/or destination coordinate systems are latitude-longitude or geocentric. Even if this conversion is done automatically, you should remember that it happens, because many "how-to" instructions for spatial data sets contain paragraphs like "how to convert these data to WGS-84," and much sample C/C++ code contains transformations like <code><nowiki>{ x *= RAD_TO_DEG; y *= RAD_TO_DEG; }</nowiki></code>. These transformations will probably be redundant in the corresponding Virtuoso/PL code, while <code>proj4</code> strings can be used unchanged and simply passed as the 3rd and 4th arguments of the <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code> function. If degrees-to-radians conversion is made twice, the data may be calculated as if the shape is located in a totally different place of ellipsoid. If the post-transformation radians-to-degrees conversion is also made twice, the resulting shape may <i>look</i> like the real one, but coordinates may be tens of kilometers away from the correct values.475a474< The coordinate systems can also be updated by directly manipulating the <code><nowiki>DB.DBA.SYS_V7PROJ4_SRIDS</nowiki></code> table. (This table is readable by public, and writable only by DBA.) After editing the table, call the "<code><nowiki>Proj4 cache_reset()</nowiki></code>" function to prevent the SQL runtime from using previously-prepared projections that might now be obsolete. Note that <code>proj4</code> projections are for normalized data in radians, while Virtuoso stores shapes using numbers that come from WKT; i.e., they're latitudes and longitudes in degrees, for almost all cases. 474d474> The coordinate systems can also be updated by directly manipulating the <code><nowiki>DB.DBA.SYS_V7PROJ4_SRIDS</nowiki></code> table. (This table is readable by public, and writable only by DBA.) After editing the table, the "<code><nowiki>Proj4 cache_reset()</nowiki></code>" function should be called to prevent the SQL runtime from using previously-prepared projections that might now be obsolete. Note that <code>proj4</code> projections are for normalized data in radians, while Virtuoso stores shapes using numbers that come from WKT; i.e., they're latitudes and longitudes in degrees, for almost all cases. 473a472< This means that for [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]], function '<code>PG</code>' overrides everything else, <code>EPSG</code> is the next highest priority, then <code>ESRI</code>, <code>NAD83</code>, and <code>NAD27</code>. However, custom queries and procedure may select whatever they please (including <code>SR_FAMILY</code> values not listed here, strings from other tables, etc.), and may feed projection strings directly to [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]].472d472> This means that for <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code>, function '<code>PG</code>' overrides everything else; <code>EPSG</code> is the next highest priority; then <code>ESRI</code>, <code>NAD83</code>, and <code>NAD27</code>. However, custom queries and procedures may select whatever they please (including <code>SR_FAMILY</code> values not listed here, strings from other tables, etc.), and may feed projection strings directly to <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code>.432a431< * <code><nowiki>DB.DBA.V7PROJ4_LOAD_SYS_SRIDS</nowiki></code> is called at server startup, if the v7proj4 plugin is loaded:431d431> * <code><nowiki>DB.DBA.V7PROJ4_LOAD_SYS_SRIDS</nowiki></code> is called at server startup, if the <code>v7proj4</code> plugin is loaded:411a410< A sample [[http://www.epsg.org][EPSG]] file containing the mapping for the <code>proj.4</code> [[http://spatialreference.org/ref/epsg/4326/][EPSG:4326]] coordinate system is:410d410> A sample [[http://www.epsg.org][EPSG]] file containing the mapping for the <code>proj.4</code> <b><code>[[http://spatialreference.org/ref/epsg/4326/][EPSG:4326]]</code></b> coordinate system is:409a408< The loading process uses family names '<code>EPSG</code>', '<code>ESRI</code>', '<code>NAD83</code>' and '<code>NAD27</code>'. When the [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]] searches for a coordinate system that corresponds to a given SRID, it returns the first record found while checking the families in the following order: '<code>PG</code>', '<code>EPSG</code>', '<code>ESRI</code>','<code>NAD83</code>', '<code>NAD27</code>'. It is therefore generally practical to put all custom definitions in '<code>PG</code>' family, giving them the highest priority.408d408> The loading process uses family names '<code>EPSG</code>', '<code>ESRI</code>', '<code>NAD83</code>' and '<code>NAD27</code>'. When the <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code> searches for a coordinate system that corresponds to a given SRID, it returns the first record found while checking the families in the following order: '<code>PG</code>', '<code>EPSG</code>', '<code>ESRI</code>','<code>NAD83</code>', '<code>NAD27</code>'. It is therefore generally practical to put all custom definitions in '<code>PG</code>' family, giving them the highest priority.407a406< This is filled with data from files <code>epsg</code>, <code>esri</code>, <code>esri.extra</code>, <code>nad83</code>, and <code>nad27</code> of directory <code><nowiki>/usr/share/proj</nowiki></code>. Note these files must exist in the <code><nowiki>/usr/share/proj</nowiki></code> directory; otherwise, a message will be reported in the log file, indicating the file could not be found. Every row of the table is identified with the name of the "family" of coordinate systems and an integer SRID. Different sources may assign the same SRID to different reference systems, however descriptions of well-known systems match exactly or the difference is not noticeable for any practical application. 406d406> This is filled with data from files <code>epsg</code>, <code>esri</code>, <code>esri.extra</code>, <code>nad83</code>, and <code>nad27</code> of directory <code><nowiki>/usr/share/proj</nowiki></code>. Note these files must exist in the <code><nowiki>/usr/share/proj</nowiki></code> directory; otherwise, a message will be reported in the log file, indicating the file could not be found. Every row of the table is identified with the name of the "family" of coordinate systems and an integer SRID. Different sources may assign the same SRID to different reference systems; however, descriptions of well-known systems will match exactly or with differences that are not noticeable for any practical application. 371a370< If everything is fine then the virtuoso.log file will contain something like the following lines after the next startup:370d370> If everything is fine, the <code>virtuoso.log</code> file will contain something like the following lines after the next startup:363a362< When the plugin (<code>v7proj4.so</code>) is built, it needs to be added to the <code>[Plugins]</code> section of the Virtuoso configuration file (<code>virtuoso.ini</code> or the like), on every node if running in a cluster:362d362> After the plugin (<code>v7proj4.so</code>) is built, it must be added to the <code>[Plugins]</code> section of the Virtuoso configuration file (<code>virtuoso.ini</code> or the like). This must be done on every node, if running in a cluster.347a347< Note first the "proj.4" library must be installed on the system and can be [[http://trac.osgeo.org/proj/wiki/WikiStart#Download][proj.4 download]] area, which the configure script will detect the installation of enabling the v7proj4 plugin library to be built in ~/libsrc/plugin/.libs: < 335a336< The v7proj4 is currently available in the default develop/7 branch of the "[[https://github.com/v7fasttrack/virtuoso-opensource][v7fasttrack]]" git repository and can be build with this command sequence:334d334> The <code>v7proj4</code> is currently available in the default <code>develop/7</code> branch of the <code>[[https://github.com/v7fasttrack/virtuoso-opensource][v7fasttrack]]</code> git repository, and can be built with the following command sequence. > > <i><b>Note:</b> The <code>proj.4</code> library (may come from the [[http://trac.osgeo.org/proj/wiki/WikiStart#Download][proj.4 download]] area) must first be installed on the system, which the configure script will detect, enabling the <code>v7proj4</code> plugin library to be built in <code>~/libsrc/plugin/.libs</code>.</i>331a330< The Virtuoso v7proj4 hosted plugin module is required for performing transformation between different coordinates systems using the [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]] function. The plugin is based on [[http://trac.osgeo.org/proj/][Frank Warmerdam's proj4]] library and it's practical to have the proj4 package installed on every box of Virtuoso cluster, even if the build is performed on single machine or on different location at all. The reason is that the plugin should load data about coordinate systems to work and the simplest way to get the right data from a high-quality source is to use the package.330d330> The Virtuoso <code>v7proj4</code> Hosted Plugin Module is required for performing transformation between different coordinates systems using the <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code> function. The plugin is based on [[http://trac.osgeo.org/proj/][Frank Warmerdam's <code>proj4</code>]] library and it is practical to have the <code>proj4</code> package installed on every box of a Virtuoso cluster, even if the build is performed on single machine including one outside the cluster. The reason is that the plugin should load data about coordinate systems to work, and the simplest way to get the right data from a high-quality source is to use the package.326a326< * <b>[[http://docs.openlinksw.com/virtuoso/fn_postgis_proj_version.html][postgis_proj_version()]]</b> < %BR% Returns the version of proj4 in use, as a string, for compatibility with <nowiki>PostGIS</nowiki>.325d325> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_postgis_proj_version.html][postgis_proj_version()]]</code></b> > %BR% Returns the version of <code>proj4</code> in use as a <code>string</code>, for compatibility with <nowiki>PostGIS</nowiki>.323a323< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform (shape, dest_srid, {orig_proj4_string, dest_proj4_string})]]</b> < %BR% Transforms the given shape from its current spatial reference system to one specified by <code><nowiki>dest_srid</nowiki></code>. Two optional arguments are for "cheating": the SRID of the resulting shape is set to <code><nowiki>dest_srid</nowiki></code> but the conversion is done by proj4 using <code><nowiki>origin_proj4_string</nowiki></code> for projection of original shape and <code><nowiki>dest_proj4_string</nowiki></code> for the result. If <code><nowiki>orig_proj4_string</nowiki></code> or <code><nowiki>dest_proj4_string</nowiki></code> argument is passed but is NULL instead of string, the projection corresponding to original or destination SRID is used. [[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform]] is provided by a separate plugin named v7proj4, as described below. When the plugin is loaded, functions like [[http://docs.openlinksw.com/virtuoso/fn_ST_Intersects.html][ST_Intersects()]] support pairs of arguments with different SRIDs by converting coords of second argument into the system of the first one, as required by OGC and <nowiki>GeoSPARQL</nowiki>.322d322> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform (shape, dest_srid, {orig_proj4_string, dest_proj4_string})]]</code></b> > %BR% Transforms the given shape from its current spatial reference system to one specified by <code><nowiki>dest_srid</nowiki></code>. Two optional arguments are for "cheating": the SRID of the resulting shape is set to <code><nowiki>dest_srid</nowiki></code>, but the conversion is done by <code>proj4</code> using <code><nowiki>origin_proj4_string</nowiki></code> for projection of original shape and <code><nowiki>dest_proj4_string</nowiki></code> for the result. If <code><nowiki>orig_proj4_string</nowiki></code> or <code><nowiki>dest_proj4_string</nowiki></code> argument is passed but is <code>NULL</code> instead of <code>string</code>, the projection corresponding to original or destination SRID is used. <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Transform.html][ST_Transform()]]</code> is provided by a separate plugin named <code>v7proj4</code>, as described below. When the plugin is loaded, functions like <code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Intersects.html][ST_Intersects()]]</code> support pairs of arguments with different SRIDs by converting coords of second argument into the system of the first one, as required by OGC and <nowiki>GeoSPARQL</nowiki>.321a320< %BR% Performs a custom projection of shape, using the specified algorithm and algorithm-specific arguments. Current version supports only one algorithm, [[http://docs.openlinksw.com/virtuoso/fn_st_transform_by_custom_projection.html][st_transform_by_custom_projection (shape, 'OLAEAPS', long_of_center, lat_of_center)]] for Oblique Lampert Azimuthal Equal-Area Projection System with the specified center point.320d320> %BR% Performs a custom projection of <code>shape</code>, using the specified algorithm and algorithm-specific arguments. Current version supports only one algorithm, <code>[[http://docs.openlinksw.com/virtuoso/fn_st_transform_by_custom_projection.html][st_transform_by_custom_projection (shape, 'OLAEAPS', long_of_center, lat_of_center)]]</code> for Oblique Lampert Azimuthal Equal-Area Projection System with the specified center point.318a317< %BR% returns a copy of a shape with all coordinates shifted by the provided dX, dY and then multiplied by Xfactor and Yfactor. In the current version, different values for Xfactor and Yfactor will result in distorted arcs.317d317> %BR% returns a copy of a shape with all coordinates shifted by the provided <code>dX</code> and <code>dY</code>, and then multiplied by <code>Xfactor</code> and <code>Yfactor</code>. In the current version, different values for <code>Xfactor</code> and <code>Yfactor</code> will result in distorted arcs.314a314< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_Translate.html][ST_Translate (shape, dX, dY {, dZ})]]</b> < %BR% returns a copy of a shape with all coordinates shifted by the provided dX, dY and dZ.313d313> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Translate.html][ST_Translate (shape, dX, dY {, dZ})]]</code></b> > %BR% returns a copy of a shape with all coordinates shifted by the provided <code>dX</code>, <code>dY</code>, and <code>dZ</code>.311a311< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box_n.html][st_get_bounding_box_n (shape, idx)]]</b> < %BR% Given a 1-based index of a member of a <code>MULTI...</code> or <code>...COLLECTION</code> shape, returns the bounding box of a member. This is a fast equivalent of [[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box.html][st_get_bounding_box (ST_GeometryN (shape,idx))]].310d310> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box_n.html][st_get_bounding_box_n (shape, idx)]]</code></b> > %BR% Given a 1-based index of a member of a <code>MULTI...</code> or <code>...COLLECTION</code> shape, returns the bounding box of a member. This is a fast equivalent of <code>[[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box.html][st_get_bounding_box (ST_GeometryN (shape,idx))]]</code>.308a308< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_InteriorRingN.html][ST_InteriorRingN (polygon_shape, idx)]]</b> < %BR% Given a 1-based index of an interior ring of a polygon, returns the ring. Wrong index is not reported as an error and NULL is returned.307d307> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_InteriorRingN.html][ST_InteriorRingN (polygon_shape, idx)]]</code></b> > %BR% Given a 1-based index of an interior ring of a polygon, returns the ring. Wrong index is not reported as an error, and <code>NULL</code> is returned.305a305< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_NumInteriorRings.html][ST_NumInteriorRings (polygon_shape)]]</b> < %BR% returns number of interior rings of the given polygon, NULL if shape is not a polygon.304d304> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_NumInteriorRings.html][ST_NumInteriorRings (polygon_shape)]]</code></b> > %BR% returns number of interior rings of the given polygon; returns <code>NULL</code> if shape is not a polygon.302a301< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_ExteriorRing.html][ST_ExteriorRing (polygon_shape)]]</b>301d301> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_ExteriorRing.html][ST_ExteriorRing (polygon_shape)]]</code></b>299a299< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_GeometryN.html][ST_GeometryN (shape, idx)]]</b> < %BR% Given a 1-based index of a member of a MULTI... or ...COLLECTION shape, returns the member.298d298> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_GeometryN.html][ST_GeometryN (shape, idx)]]</code></b> > %BR% Given a 1-based index of a member of a <code>MULTI...</code> or <code>...COLLECTION</code> shape, returns the member.296a296< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_NumGeometries.html][ST_NumGeometries (shape)]]</b> < %BR% returns number of members of a MULTI... or ...COLLECTION shape, 1 for other sorts of shapes.295d295> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_NumGeometries.html][ST_NumGeometries (shape)]]</code></b> > %BR% returns number of members of a <code>MULTI...</code> or <code>...COLLECTION</code> shape; returns <code>1</code> for other sorts of shapes.293a292< * <b>[[http://docs.openlinksw.com/virtuoso/fn_GeometryType.html][GeometryType (shape)]]</b>292d292> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_GeometryType.html][GeometryType (shape)]]</code></b>290a290< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box.html][st_get_bounding_box (shape)]]</b> < %BR% returns BOX2D that is a bounding box of a shape.289d289> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_get_bounding_box.html][st_get_bounding_box (shape)]]</code></b> > %BR% returns <code>BOX2D</code> that is a bounding box of a shape.287a287< * <b>[[http://docs.openlinksw.com/virtuoso/fn_http_st_dxf_entity.html][http_st_dxf_entity (shape, attrs, ses)]]</b> < %BR% writes a DXF (Data Exchange Format) representation of shape into the given output session. <code>Attrs</code> is a vector of arbitrary DXF properties in form <code>(tag1, value1, tag2, value2...)</code> where tags are integer codes according to DXF specification; related values are not validated and are printed to the session as-is. Current version does not support <code>ARCSTRINGs</code>, <code>CURVEs</code>, nor <code>CURVEPOLYGONs</code>. If <code>shape</code> is null, the function returns without writing anything to the shape.286d286> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_http_st_dxf_entity.html][http_st_dxf_entity (shape, attrs, ses)]]</code></b> > %BR% writes a DXF (Data Exchange Format) representation of shape into the given output session. <code>Attrs</code> is a vector of arbitrary DXF properties in form <code>(tag1, value1, tag2, value2, ...)</code> where tags are integer codes according to DXF specification; related values are not validated and are printed to the session as-is. Current version does not support <code>ARCSTRINGs</code>, <code>CURVEs</code>, nor <code>CURVEPOLYGONs</code>. If <code>shape</code> is <code>NULL</code>, the function returns without writing anything to the shape.284a284< * <b>[[http://docs.openlinksw.com/virtuoso/fn_http_st_ewkt.html][http_st_ewkt (shape, ses)]]</b> < %BR% Writes a EWKT representation of a shape to the given session, a fast replacement for <code><nowiki>http (st_astext (shape), ses)</nowiki></code>.283d283> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_http_st_ewkt.html][http_st_ewkt (shape, ses)]]</code></b> > %BR% Writes an EWKT representation of a shape to the given session, a fast replacement for <code><nowiki>http (st_astext (shape), ses)</nowiki></code>.281a281< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_ewkt_read.html][st_ewkt_read (ewkt_text)]]</b> < %BR% Parses the given text as a EWKT and returns the parsed shape.280d280> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_ewkt_read.html][st_ewkt_read (ewkt_text)]]</code></b> > %BR% Parses the given text as an EWKT and returns the parsed shape.278a277< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_geomfromtext.html][st_geomfromtext (ewkt_text)]]</b>277d277> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_geomfromtext.html][st_geomfromtext (ewkt_text)]]</code></b>275a274< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_SetSRID.html][ST_SetSRID (shape, new_srid)]]</b>274d274> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_SetSRID.html][ST_SetSRID (shape, new_srid)]]</code></b>271a272< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_SRID.html][ST_SRID (shape)]]</b> < %BR% returns SRID of shape's spatial reference system or 0 for shape on < plane.270d271> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_SRID.html][ST_SRID (shape)]]</code></b> > %BR% returns SRID of shape's spatial reference system or <code>0</code> for shape on plane.268a268< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_astext.html][st_astext (shape)]]</b>267d268> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_astext.html][st_astext (shape)]]</code></b>265a266< * <b>[[http://docs.openlinksw.com/virtuoso/fn_isgeometry.html][isgeometry (v)]]</b> < %BR% returns whether the given v is a spatial object.264d265> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_isgeometry.html][isgeometry (v)]]</code></b> > %BR% returns whether the given <code>v</code> is a spatial object.262a262< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_distance.html][st_distance (shape1, shape2)]]</b>261d262> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_distance.html][st_distance (shape1, shape2)]]</code></b>259a259< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_within.html][st_within (needle_shape, haystack_shape {, proximity})]]</b>258d259> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_within.html][st_within (needle_shape, haystack_shape {, proximity})]]</code></b>255a256< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_contains.html][st_contains (haystack_shape, needle_shape {, proximity})]]</b> < %BR% checks whether <code><nowiki>haystack_shape</nowiki></code> contains the <code><nowiki>needle_shape</nowiki></code>. If proximity is specified, it is treated as an extra wide border around <code><nowiki>haystack_shape</nowiki></code>. In current version, only a combination of bounding box and a point is supported, the functionality will be extended in the next release.254d255> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_contains.html][st_contains (haystack_shape, needle_shape {, proximity})]]</code></b> > %BR% checks whether <code><nowiki>haystack_shape</nowiki></code> contains the <code><nowiki>needle_shape</nowiki></code>. If <code>proximity</code> is specified, it is treated as an extra wide border around <code><nowiki>haystack_shape</nowiki></code>. In current version, only a combination of bounding box and a point is supported; this functionality will be extended in the next release.252a253< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_may_intersect.html][st_may_intersect (shape1, shape2 {, proximity})]]</b> < %BR% checks whether bounding boxes of two shapes intersect or some of its points are within the specified proximity. This is much faster than full [[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects()]] check (actually that is the initial part of [[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects()]] execution)251d252> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_may_intersect.html][st_may_intersect (shape1, shape2 {, proximity})]]</code></b> > %BR% checks whether bounding boxes of two shapes intersect or some of their points are within the specified <code>proximity</code>. This is much faster than the full <code>[[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects()]]</code> check (in fact, this is the initial part of <code>[[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects()]]</code> execution)249a250< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects (shape1, shape2 {, proximity})]]</b> < %BR% checks whether two shapes intersect or some of its points are within the specified proximity. Current version is not complete and does not support arcs of all sorts and rings of polygons, this is fixed in the next release.248d249> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_intersects.html][st_intersects (shape1, shape2 {, proximity})]]</code></b> > %BR% checks whether two shapes intersect or some of their points are within the specified <code>proximity</code>. Current version is not complete and does not support arcs of all sorts and rings of polygons; this will be fixed in the next release.246a246< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_XMin.html][ST_XMin (shape), ST_YMin (shape), ST_XMax (shape), ST_YMax (shape)]]</b>245d246> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_XMin.html][ST_XMin (shape), ST_YMin (shape), ST_XMax (shape), ST_YMax (shape)]]</code></b>243a244< * <b>[[http://docs.openlinksw.com/virtuoso/fn_ST_Z.html][st_z (point)]]</b> < %BR% returns Z coordinate of geometry.242d243> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_ST_Z.html][st_z (point)]]</code></b> > %BR% returns <code>Z</code> coordinate of geometry.240a241< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_y.html][st_y (point)]]</b> < %BR% returns Y or longitude of a point.239d240> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_y.html][st_y (point)]]</code></b> > %BR% returns <code>Y</code> or longitude of a point.237a238< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_x.html][st_x (point)]]</b> < %BR% returns X or longitude of a point.236d237> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_x.html][st_x (point)]]</code></b> > %BR% returns <code>X</code> or longitude of a point.233a235< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_linestring.html][st_linestring (item1, item2,..., itemN)]]</b> < %BR% returns a linestring in default SRID, the coordinates of vertices are specified by arguments that are points, 2-, 3- or 4-item vectors of < coordinates, linestrings, arcstrings or vectors of the above mentioned values. Repeating vertices are automatically removed, except the case of repeating vertices in the middle of a linestring/arcstring argument.232d233> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_linestring.html][st_linestring (item1, item2,..., itemN)]]</code></b> > %BR% returns a linestring in default SRID. The coordinates of vertices are specified by arguments that are points; 2-, 3-, or 4-item vectors of > coordinates; linestrings; arcstrings; or vectors of the above mentioned values. Repeating vertices are automatically removed, except in the case of repeating vertices in the middle of a linestring/arcstring argument.230a231< * <b>[[http://docs.openlinksw.com/virtuoso/fn_st_point.html][st_point (x,y, {z, {m}})]]</b> < %BR% returns a point with given coordinates in default SRID. z and/or m may be missing or equal to NULL, indicating the absence of coordinate.229d230> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_st_point.html][st_point (x,y, {z, {m}})]]</code></b> > %BR% returns a point with given coordinates in default SRID. <code>z</code> and/or <code>m</code> may be missing or equal to <code>NULL</code>, indicating the absence of coordinate.227a227< * <b>[[http://docs.openlinksw.com/virtuoso/fn_dist_from_point_to_line_segment.html][dist_from_point_to_line_segment (Xpoint, Ypoint, Xsegment1, Ysegment1,Xsegment2, Ysegment2)]]</b>226d227> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_dist_from_point_to_line_segment.html][dist_from_point_to_line_segment (Xpoint, Ypoint, Xsegment1, Ysegment1, Xsegment2, Ysegment2)]]</code></b>224a225< * <b>[[http://docs.openlinksw.com/virtuoso/fn_haversine_deg_km.html][haversine_deg_km (lat1, long1, lat2, long2)]]</b> < %BR% returns distance between two points on Earth sphere, adjusting radius of sphere to latitudes.223d224> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_haversine_deg_km.html][haversine_deg_km (lat1, long1, lat2, long2)]]</code></b> > %BR% returns distance between two points on the Earth sphere, adjusting radius of sphere to latitudes.221a222< * <b>[[http://docs.openlinksw.com/virtuoso/fn_earth_radius.html][earth_radius()]]</b> < %BR% returns geom.mean of radius of Earth in kilometers, 6367.43568220d221> * <b><code>[[http://docs.openlinksw.com/virtuoso/fn_earth_radius.html][earth_radius()]]</code></b> > %BR% returns <code>geom.mean</code> of radius of Earth in kilometers, <code>6367.43568</code>219a219< The following Virtuoso Geo Spatial geometry functions are available for use in both SQL & RDF Geo Spatial queries. The listed functions are built-in SQL functions. As all built-in functions of Virtuoso, geo-specific functions can be called from SPARQL with prefix <code>bif:</code> (e.g. <code><nowiki>bif:earth_radius()</nowiki></code> or <code><nowiki>&lt;bif:earth_radius>()&gt;</nowiki></code>)218d219> The following Virtuoso Geospatial geometry functions are available for use in both SQL & RDF Geospatial queries. The listed functions are built-in SQL functions. As all built-in functions of Virtuoso, geo-specific functions can be called from SPARQL with prefix <code>bif:</code> (e.g., <code><nowiki>bif:earth_radius()</nowiki></code> or <code><nowiki>&lt;bif:earth_radius>()&gt;</nowiki></code>)217a217< ---++ Virtuoso Geo Spatial geometry functions216d217> ---++ Virtuoso Geospatial geometry functions9a9< ---++ Virtuoso Geo Spatial Geometry data types and sample queries8d9> ---++ Virtuoso Geospatial Geometry data types and sample queries7a7< As of Virtuoso 7.1 (both Open Source and Commercial Editions), a number of major enhancements have been made to Geo Spatial support, improving the Geometry data types and functions supported, and increasing compliance with the emerging [[http://www.geosparql.org][GeoSPARQL]] and [[http://www.opengeospatial.org][OGC]] standards.6d7> As of Virtuoso 7.1, in both Open Source and Commercial/Enterprise Editions, a number of major enhancements have been made to Geospatial support, improving the Geometry data types and functions supported, and increasing compliance with the emerging [[http://www.geosparql.org][GeoSPARQL]] and [[http://www.opengeospatial.org][OGC]] standards.2a2< ---+ Virtuoso Geo Spatial Enhancements1d2> ---+ Virtuoso Geospatial Enhancements ```