Thêm các loại và chức năng bạn cần vào tệp cấu hình Symfony của bạn. Tên loại học thuyết không được mã hóa cứng
doctrine:
dbal:
types:
geometry: CrEOF\Spatial\DBAL\Types\GeometryType
point: CrEOF\Spatial\DBAL\Types\Geometry\PointType
polygon: CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
orm:
dql:
numeric_functions:
st_contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STContains
contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Contains
st_area: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Area
st_geomfromtext: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GeomFromText
st_intersects: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STIntersects
st_buffer: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STBuffer
point: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Point
Đối với hình học đầu vào, ST_Area trả về diện tích Cartesian của phép chiếu 2D. Đơn vị diện tích giống như đơn vị thể hiện tọa độ của hình học đầu vào. Đối với điểm, linestrings, multipoints và multilinestrings, hàm trả về 0. Đối với các tập hợp hình học, nó trả về tổng diện tích của các hình học trong tập hợp
Đối với địa lý đầu vào, ST_Area trả về vùng trắc địa của hình chiếu 2D của địa lý khu vực đầu vào được tính toán trên hình cầu được xác định bởi SRID. Đơn vị đo độ dài là mét vuông. Hàm trả về số không [0] cho các điểm, đa điểm và địa lý tuyến tính. Khi đầu vào là một tập hợp hình học, hàm trả về tổng diện tích của các vùng địa lý trong tập hợp
cú pháp
ST_Area[geo]
Tranh luận
địa lý
Một giá trị của kiểu dữ liệu
ST_Area[geo]
6 hoặc ST_Area[geo]
7 hoặc một biểu thức đánh giá thành một kiểu ST_Area[geo]
6 hoặc ST_Area[geo]
7 Mô tả một số hàm Dữ liệu không gian thường được sử dụng như ST_GeomFromText[], ST_AsText[], ST_GeometryType[], POINT[], ST_X[], ST_Y[], ST_NumPoints[], ST_PointN[], ST_Area[], v.v.
MySQL hỗ trợ một số hàm dựng sẵn cho phép bạn thao tác với các đối tượng dữ liệu không gian
ST_GeomFromText[string] - Trả về một đối tượng dữ liệu không gian từ một chuỗi Well-Known Text [WKT] đã cho
ST_AsText[object] - Trả về chuỗi Well-Known Text [WKT] của một đối tượng dữ liệu không gian đã cho
ST_GeometryType[object] - Trả về kiểu hình học của một đối tượng dữ liệu không gian nhất định
ST_SRID[đối tượng] - Trả về SRID [Mã định danh tham chiếu không gian] của một đối tượng dữ liệu không gian nhất định
POINT[x, y] - Trả về đối tượng dữ liệu không gian "Điểm" với tọa độ đã cho
ST_X/ST_Y[điểm] - Trả về tọa độ X/Y của một "Điểm" đã cho
ST_PointFromText[string] - Trả về một đối tượng dữ liệu không gian "Điểm" từ một chuỗi Điểm Văn bản Nổi tiếng [WKT] đã cho
ST_LineStringFromText[string] - Trả về một đối tượng dữ liệu không gian "LineString" từ một chuỗi LineString Văn bản Nổi tiếng [WKT] nhất định
Trả về một số có độ chính xác kép cho biết diện tích của đối số
mysql>0 hoặcSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>1, như được đo trong hệ quy chiếu không gian của nóSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
Kể từ MySQL 8. 0. 13, xử lý các đối số của nó như được mô tả trong phần giới thiệu của phần này, với những ngoại lệ này
Nếu hình học không hợp lệ về mặt hình học, thì kết quả là một khu vực không xác định [nghĩa là nó có thể là bất kỳ số nào] hoặc xảy ra lỗi
Nếu hình hợp lệ nhưng không phải là đối tượng
mysql>
0 hoặcSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+mysql>
1, sẽ xảy ra lỗiSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu hình học là một
mysql>
0 hợp lệ trong SRS Descartes, thì kết quả là diện tích Descartes của đa giácSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu hình học là một
mysql>
1 hợp lệ trong SRS Đề-các thì kết quả là tổng diện tích Đề-các của các đa giácSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu hình học là một
mysql>
0 hợp lệ trong SRS địa lý, thì kết quả là diện tích trắc địa của đa giác trong SRS đó, tính bằng mét vuôngSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu hình học là một
mysql>
1 hợp lệ trong SRS địa lý, thì kết quả là tổng diện tích trắc địa của các đa giác trong SRS đó, tính bằng mét vuôngSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu kết quả tính toán diện tích là
mysql>
7, sẽ xảy ra lỗiSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+Nếu hình học có SRS địa lý có kinh độ hoặc vĩ độ nằm ngoài phạm vi, thì sẽ xảy ra lỗi
Phạm vi được hiển thị theo độ. Giới hạn phạm vi chính xác hơi lệch do số học dấu phẩy động
Trước MySQL 8. 0. 13, xử lý các đối số của nó như được mô tả trong phần giới thiệu của phần này, với những ngoại lệ này
Đối với các đối số của thứ nguyên 0 hoặc 1, kết quả là 0
Nếu một hình trống, giá trị trả về là 0 thay vì
mysql>
0SET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]];
+----------------------------------------------------+ | ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]] | +----------------------------------------------------+ | LINESTRING[0 0,0 3,3 3,3 0,0 0] | +----------------------------------------------------+Đối với tập hợp hình học, kết quả là tổng giá trị diện tích của tất cả các thành phần. Nếu bộ sưu tập hình học trống, diện tích của nó được trả về là 0
Nếu hình học có giá trị SRID cho hệ thống tham chiếu không gian địa lý [SRS], sẽ xảy ra lỗi
mysql>SET @poly =
'Polygon[[0 0,0 3,3 0,0 0],[1 1,1 2,2 1,1 1]]';
mysql>SELECT ST_Area[ST_GeomFromText[@poly]];
+---------------------------------+ | ST_Area[ST_GeomFromText[@poly]] | +---------------------------------+ | 4 | +---------------------------------+ mysql>SET @mpoly =
'MultiPolygon[[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]]';
mysql>SELECT ST_Area[ST_GeomFromText[@mpoly]];
+----------------------------------+ | ST_Area[ST_GeomFromText[@mpoly]] | +----------------------------------+ | 8 | +----------------------------------+
Trả về trọng tâm toán học cho đối số
mysql>0 hoặcSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>1 dưới dạngSET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>6. Kết quả không được đảm bảo là trênSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]];
+----------------------------------------------------+ | ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]] | +----------------------------------------------------+ | LINESTRING[0 0,0 3,3 3,3 0,0 0] | +----------------------------------------------------+
mysql>1SET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
Hàm này xử lý các tập hợp hình học bằng cách tính điểm trọng tâm cho các thành phần có kích thước cao nhất trong tập hợp. Các thành phần như vậy được trích xuất và tạo thành một
mysql>1,SET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>9 hoặcSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]];
+----------------------------------------------------+ | ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]] | +----------------------------------------------------+ | LINESTRING[0 0,0 3,3 3,3 0,0 0] | +----------------------------------------------------+
mysql>0 duy nhất để tính toán trung tâmSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]];
+-------------------------------------------------------+ | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] | +-------------------------------------------------------+ | LINESTRING[1 1,1 2,2 2,2 1,1 1] | +-------------------------------------------------------+
xử lý các đối số của nó như được mô tả trong phần giới thiệu của phần này, với những ngoại lệ này
Giá trị trả về là
mysql>
0 cho điều kiện bổ sung rằng đối số là một tập hợp hình trốngSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]];
+----------------------------------------------------+ | ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]] | +----------------------------------------------------+ | LINESTRING[0 0,0 3,3 3,3 0,0 0] | +----------------------------------------------------+Nếu hình học có giá trị SRID cho hệ thống tham chiếu không gian địa lý [SRS], sẽ xảy ra lỗi
mysql>SET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
Trả về vòng ngoài của giá trị
mysql>0SET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>6 dưới dạngSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]];
+-------------------------------------------------------+ | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] | +-------------------------------------------------------+ | LINESTRING[1 1,1 2,2 2,2 1,1 1] | +-------------------------------------------------------+
mysql>7SET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]];
+-------------------------------------------------------+ | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] | +-------------------------------------------------------+ | LINESTRING[1 1,1 2,2 2,2 1,1 1] | +-------------------------------------------------------+
xử lý các đối số của nó như được mô tả trong phần giới thiệu của phần này
mysql>SET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]];
+----------------------------------------------------+ | ST_AsText[ST_ExteriorRing[ST_GeomFromText[@poly]]] | +----------------------------------------------------+ | LINESTRING[0 0,0 3,3 3,3 0,0 0] | +----------------------------------------------------+
Trả về vòng trong thứ
ST_Area[geo]
30 cho giá trị mysql>0SET @poly =
ST_GeomFromText['POLYGON[[0 0,10 0,10 10,0 10,0 0],[5 5,7 5,7 7,5 7,5 5]]'];
mysql>SELECT ST_GeometryType[@poly],ST_AsText[ST_Centroid[@poly]];
+------------------------+--------------------------------------------+ | ST_GeometryType[@poly] | ST_AsText[ST_Centroid[@poly]] | +------------------------+--------------------------------------------+ | POLYGON | POINT[4.958333333333333 4.958333333333333] | +------------------------+--------------------------------------------+
mysql>6 dưới dạng mộtSET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]];
+-------------------------------------------------------+ | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] | +-------------------------------------------------------+ | LINESTRING[1 1,1 2,2 2,2 1,1 1] | +-------------------------------------------------------+
mysql>7. Nhẫn được đánh số bắt đầu bằng 1SET @poly =
'Polygon[[0 0,0 3,3 3,3 0,0 0],[1 1,1 2,2 2,2 1,1 1]]';
mysql>SELECT ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]];
+-------------------------------------------------------+ | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] | +-------------------------------------------------------+ | LINESTRING[1 1,1 2,2 2,2 1,1 1] | +-------------------------------------------------------+