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