Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hàm Mysql MBRContains không chính xác

Tôi không có MySQL để chơi ngay bây giờ. Vì vậy, trước tiên tôi cố gắng sao chép truy vấn của bạn trong SQL Server Spatial.

DECLARE @g1 geometry
DECLARE @h1 geometry
SET @g1= geometry::STGeomFromText('POLYGON((-74.05100448502202 4.7239278424321,-74.05092938316898 4.7241416902206,-74.04830618275201 4.7237460717602,-74.04643668306903 4.7234306460692,-74.04635688735101 4.7234105978214,-74.04636526925401 4.7233310730989,-74.046191260944 4.72327293317,-74.04579027069599 4.7232007594583,-74.04141290558402 4.7214258184083,-74.03746201170497 4.7197791822891,-74.03565688503801 4.7189879401666,-74.033484295736 4.7180897723398,-74.03098447693401 4.7170526009038,-74.028731840457 4.7161167561787,-74.02852820211899 4.7150714370973,-74.026398371001 4.6877232674918,-74.02558060109601 4.6874859863574,-74.02454587610401 4.686797564651,-74.024665108676 4.6863189291555,-74.025470986757 4.6857975214267,-74.02585246812498 4.6846813784365,-74.02580479605103 4.6834369175226,-74.01962984798399 4.684922743491,-74.028472839649 4.6765444849623,-74.032273278366 4.6775012677607,-74.03825980124901 4.6799297676049,-74.048215993474 4.6850422042295,-74.05718496514402 4.6867981911917,-74.05100448502202 4.7239278424321))', 4326);
SET @h1 = geometry::STGeomFromText('POINT(-74.051585 4.680108)', 4326)
SELECT @g1.STContains(@h1) contain, @g1.STDistance(@h1) distance

Và kết quả là những gì bạn có thể mong đợi:

contain      distance
0   |   0.005489581062607675

Đây là lý do đằng sau điều này:

Tôi đang sử dụng STContains không phải MBRContains dựa trên mô tả của bạn về những gì bạn đang tìm kiếm. Trước tiên, hàm MBRContains tạo một Hình chữ nhật giới hạn tối thiểu trên đa giác của bạn và sử dụng tính năng đa giác mới đó để chứa judegement. Trong ví dụ của bạn, điểm rơi vào MBR của đa giác, đó là lý do tại sao kết quả MySQL của bạn không như bạn mong đợi. Và STContains là chức năng phù hợp mà bạn đang tìm kiếm.

Tham khảo chính thức: Liên kết không gian Mysql




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào để sử dụng dplyr ::bind_rows mà không thu thập khung dữ liệu từ cơ sở dữ liệu không?

  2. Không thể kết nối với mySQL trong C #

  3. PHP MySQL PDO lastInsertID gây ra lỗi nghiêm trọng

  4. Nút xóa không hoạt động trong CodeIgniter

  5. Truy xuất Hình ảnh được lưu trữ dưới dạng BLOB trên MYSQL DB