Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠ°ΠΌ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ .
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ , ΡΠΈΠΏΠ°:
ΠΡΠ±Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° SQL, ΡΠΈΠΏΠ° mysql ΠΈΠ»ΠΈ MySQL Query Browser.
ΠΡΠΈΠΊΠ»Π°Π΄Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ MySQL API.
4.5.1. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ° Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ
MySQL ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ WKT ΠΈΠ»ΠΈ WKB:
AsBinary(g)
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ WKB ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.SELECT AsBinary(g) FROM geom;
AsText(g)
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ WKT ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.mysql> SET @g = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(GeomFromText(@g));
+--------------------------+
| AsText(GeomFromText(@g)) |
+--------------------------+
| LINESTRING(1 1,2 2,3 3) |
+--------------------------+
GeomFromText(wkt[,srid])
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· WKT-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π ΡΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΈΠΏΠ° PointFromText() ΠΈ LineFromText().
GeomFromWKB(wkb[,srid])
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· WKB-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π ΡΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΈΠΏΠ° PointFromWKB() ΠΈ LineFromWKB().
Π€ΡΠ½ΠΊΡΠΈΠΈ 4.5.2. Geometry
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅, Π±Π΅ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΠΈΡ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ NULL, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Area() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ NULL, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΈ Polygon, Π½ΠΈ MultiPolygon.
4.5.2.1. ΠΠ±ΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
Dimension(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ g. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ 0, 1 ΠΈΠ»ΠΈ 2. Π‘ΠΌΡΡΠ» ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π°Π½ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ " 4.2.2. ΠΠ»Π°ΡΡ Geometry".mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));
+------------------------------------------------+
| Dimension(GeomFromText('LineString(1 1,2 2)')) |
+------------------------------------------------+
| 1 |
+------------------------------------------------+
Envelope(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ (MBR) Π΄Π»Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ g. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Polygon.
ΠΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΡΠ½ΠΊΡΠ°ΠΌΠΈ (ΡΠΎΡΠΊΠ°ΠΌΠΈ) ΡΠ³Π»Π° Π±Π»ΠΎΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
+-------------------------------------------------------+
| AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |
+-------------------------------------------------------+
| POLYGON((1 1,2 1,2 2,1 2,1 1)) |
+-------------------------------------------------------+
GeometryType(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΡ ΠΈΠΌΡ ΡΠΈΠΏΠ° Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ, ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π½ΠΎΠΌ g. ΠΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· instantiable ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ² Geometry.mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));
+------------------------------------------+
| GeometryType(GeomFromText('POINT(1 1)')) |
+------------------------------------------+
| POINT |
+------------------------------------------+
SRID(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΡΠΉ ID ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΡΠ»ΠΊΠΈ Π΄Π»Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ g.
Π MySQL Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ SRID ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ. ΠΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π΅Π²ΠΊΠ»ΠΈΠ΄ΠΎΠ²Ρ (ΠΏΠ»ΠΎΡΠΊΡΡ) Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ. mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
+-----------------------------------------------+
| SRID(GeomFromText('LineString(1 1,2 2)',101)) |
+-----------------------------------------------+
| 101 |
+-----------------------------------------------+
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenGIS ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ MySQL Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ:
Boundary(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΠΊΠ½ΡΡΡΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ g.
IsEmpty(g)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ 1, Π΅ΡΠ»ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ g ΠΏΡΡΡΠ°Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ, 0, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΡΡΡΠΎ, ΠΈ 1, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ NULL. ΠΡΠ»ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ ΠΏΡΡΡΠ°, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠΎΡΠ΅ΠΊ.
IsSimple(g)
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ 1, Π΅ΡΠ»ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ g Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ² (ΡΠΎΡΠ΅ΠΊ), ΡΠΈΠΏΠ° ΡΠ°ΠΌΠΎΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠΊΠ°ΡΠ°Π½ΠΈΡ. IsSimple() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡΡ, ΠΈ 1, Π΅ΡΠ»ΠΈ ΠΎΠ½ NULL.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ instantiable Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ Π² Π³Π»Π°Π²Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠ°ΠΊ Π½Π΅ ΠΏΡΠΎΡΡΠΎΠΉ.
4.5.2.2. Π€ΡΠ½ΠΊΡΠΈΠΈ Point
Point ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ X ΠΈ Y, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
X(p)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ X-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄Π»Ρ p ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.mysql> SET @pt = 'Point(56.7 53.34)';
mysql> SELECT X(GeomFromText(@pt));
+----------------------+
| X(GeomFromText(@pt)) |
+----------------------+
| 56.7 |
+----------------------+
Y(p)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Y-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄Π»Ρ p ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ.mysql> SET @pt = 'Point(56.7 53.34)';
mysql> SELECT Y(GeomFromText(@pt));
+----------------------+
| Y(GeomFromText(@pt)) |
+----------------------+
| 53.34 |
+----------------------+
4.5.2.3. Π€ΡΠ½ΠΊΡΠΈΠΈ LineString
LineString ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Point. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ½ΠΊΡΡ (ΡΠΎΡΠΊΠΈ) LineString, ΡΡΠΈΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎ ΡΠΎΡΠ΅ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π»ΠΈΠ½Ρ.
EndPoint(ls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Point, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΡ LineString ls.mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));
+-------------------------------------+
| AsText(EndPoint(GeomFromText(@ls))) |
+-------------------------------------+
| POINT(3 3) |
+-------------------------------------+
GLength(ls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π»ΠΈΠ½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ LineString ls Π² ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅.mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT GLength(GeomFromText(@ls));
+----------------------------+
| GLength(GeomFromText(@ls)) |
+----------------------------+
| 2.8284271247462 |
+----------------------------+
GLength() Π½Π΅Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΠΌΡ. ΠΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ OpenGIS Length().
NumPoints(ls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Point Π² the LineString ls.mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT NumPoints(GeomFromText(@ls));
+------------------------------+
| NumPoints(GeomFromText(@ls)) |
+------------------------------+
| 3 |
+------------------------------+
PointN(ls,N)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ N-ΡΠΉ Point Π² Linestring ls. Π’ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Ρ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 1.mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(PointN(GeomFromText(@ls),2));
+-------------------------------------+
| AsText(PointN(GeomFromText(@ls),2)) |
+-------------------------------------+
| POINT(2 2) |
+-------------------------------------+
StartPoint(ls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Point, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΌΠ΅ΡΠΊΠΎΠΉ Π½Π°ΡΠ°Π»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ point of the LineString ls.mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(StartPoint(GeomFromText(@ls)));
+---------------------------------------+
| AsText(StartPoint(GeomFromText(@ls))) |
+---------------------------------------+
| POINT(1 1) |
+---------------------------------------+
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OpenGIS ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ MySQL Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ:
IsRing(ls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 1, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ LineString value ls Π·Π°ΠΊΡΡΡΠΎ (ΡΠΎ Π΅ΡΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ StartPoint() ΠΈ EndPoint() ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅) ΠΈ ΠΏΡΠΎΡΡΠΎ (Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΡΠΎΡΠΊΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·). ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ 0, Π΅ΡΠ»ΠΈ ls Π½Π΅ ΠΊΠΎΠ»ΡΡΠΎ, ΠΈ 1, Π΅ΡΠ»ΠΈ ΡΡΠΎ NULL.
4.5.2.4. Π€ΡΠ½ΠΊΡΠΈΠΈ MultiLineString
GLength(mls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π»ΠΈΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ MultiLineString mls. ΠΠ»ΠΈΠ½Π° mls ΡΠ°Π²Π½Π° ΡΡΠΌΠΌΠ΅ Π΄Π»ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql> SELECT GLength(GeomFromText(@mls));
+-----------------------------+
| GLength(GeomFromText(@mls)) |
+-----------------------------+
| 4.2426406871193 |
+-----------------------------+
GLength() Π½Π΅Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΠΌΡ. ΠΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ OpenGIS Length().
IsClosed(mls)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 1, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ MultiLineString mls Π·Π°ΠΊΡΡΡΠΎ (ΡΠΎ Π΅ΡΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ StartPoint() ΠΈ EndPoint() ΡΠ°Π²Π½Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ LineString Π² mls). ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0, Π΅ΡΠ»ΠΈ mls Π½Π΅ Π·Π°ΠΊΡΡΡ, ΠΈ 1, Π΅ΡΠ»ΠΈ ΡΡΠΎ NULL.mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql> SELECT IsClosed(GeomFromText(@mls));
+------------------------------+
| IsClosed(GeomFromText(@mls)) |
+------------------------------+