ST_Khu vực MySQL

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> 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] |
+------------------------+--------------------------------------------+
0 hoặc
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] |
+------------------------+--------------------------------------------+
1, như được đo trong hệ quy chiếu không gian của nó

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> 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] |
    +------------------------+--------------------------------------------+
    
    0 hoặc
    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] |
    +------------------------+--------------------------------------------+
    
    1, sẽ xảy ra lỗi

  • Nếu hình học là một

    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] |
    +------------------------+--------------------------------------------+
    
    0 hợp lệ trong SRS Descartes, thì kết quả là diện tích Descartes của đa giác

  • Nếu hình học là một

    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] |
    +------------------------+--------------------------------------------+
    
    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ác

  • Nếu hình học là một

    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] |
    +------------------------+--------------------------------------------+
    
    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ông

  • Nếu hình học là một

    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] |
    +------------------------+--------------------------------------------+
    
    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ông

  • Nếu kết quả tính toán diện tích là

    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] |
    +------------------------+--------------------------------------------+
    
    7, sẽ xảy ra lỗi

  • 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> 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]                    |
    +----------------------------------------------------+
    
    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> 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] |
    +------------------------+--------------------------------------------+
    
    0 hoặc
    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] |
    +------------------------+--------------------------------------------+
    
    1 dưới dạng
    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]                    |
    +----------------------------------------------------+
    
    6. Kết quả không được đảm bảo là trên
    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] |
    +------------------------+--------------------------------------------+
    
    1

    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> 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] |
    +------------------------+--------------------------------------------+
    
    1,
    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]                    |
    +----------------------------------------------------+
    
    9 hoặc
    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_InteriorRingN[ST_GeomFromText[@poly],1]];
    +-------------------------------------------------------+
    | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] |
    +-------------------------------------------------------+
    | LINESTRING[1 1,1 2,2 2,2 1,1 1]                       |
    +-------------------------------------------------------+
    
    0 duy nhất để tính toán trung tâm

    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> 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]                    |
      +----------------------------------------------------+
      
      0 cho điều kiện bổ sung rằng đối số là một tập hợp hình trống

    • 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> 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] |
    +------------------------+--------------------------------------------+
    
    0
    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_InteriorRingN[ST_GeomFromText[@poly],1]];
    +-------------------------------------------------------+
    | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] |
    +-------------------------------------------------------+
    | LINESTRING[1 1,1 2,2 2,2 1,1 1]                       |
    +-------------------------------------------------------+
    
    6 dưới dạng
    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_InteriorRingN[ST_GeomFromText[@poly],1]];
    +-------------------------------------------------------+
    | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] |
    +-------------------------------------------------------+
    | LINESTRING[1 1,1 2,2 2,2 1,1 1]                       |
    +-------------------------------------------------------+
    
    7

    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> 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] |
    +------------------------+--------------------------------------------+
    
    0
    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_InteriorRingN[ST_GeomFromText[@poly],1]];
    +-------------------------------------------------------+
    | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] |
    +-------------------------------------------------------+
    | LINESTRING[1 1,1 2,2 2,2 1,1 1]                       |
    +-------------------------------------------------------+
    
    6 dưới dạng một
    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_InteriorRingN[ST_GeomFromText[@poly],1]];
    +-------------------------------------------------------+
    | ST_AsText[ST_InteriorRingN[ST_GeomFromText[@poly],1]] |
    +-------------------------------------------------------+
    | LINESTRING[1 1,1 2,2 2,2 1,1 1]                       |
    +-------------------------------------------------------+
    
    7. Nhẫn được đánh số bắt đầu bằng 1

    Làm cách nào để tìm các điểm có trong đa giác bằng MySQL?

    Cách tìm các điểm trong đa giác bằng MySQL .
    ST_Distance_Sphere để tính khoảng cách giữa hai điểm trên một hình cầu
    Chỉ mục không gian cho InnoDB
    Tích hợp GeoJSON, trích dẫn từ RFC, “một định dạng trao đổi dữ liệu không gian địa lý dựa trên JSON. ”

    LineString trong MySQL là gì?

    LineString là Đường cong có phép nội suy tuyến tính giữa các điểm . Ví dụ LineString. Trên bản đồ thế giới, các đối tượng LineString có thể đại diện cho các con sông. Trong bản đồ thành phố, đối tượng LineString có thể đại diện cho đường phố.

    Điểm trong MySQL là gì?

    POINT không phải là một hàm, nó là một loại dữ liệu . Bạn sử dụng nó như POINT[100, 20] để cung cấp cho bạn tọa độ x = 100, y = 20. Nó được ghi lại vào lúc 12. 16. 2. 3 điểm lớp. Điểm là một hình học đại diện cho một vị trí duy nhất trong không gian tọa độ.
  • Chủ Đề