Saya tidak memiliki MySQL untuk dimainkan sekarang. Jadi pertama-tama saya mencoba menduplikasi kueri Anda di 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
Dan hasilnya adalah apa yang Anda harapkan:
contain distance
0 | 0.005489581062607675
Inilah alasan di balik ini:
Saya menggunakan STContains bukan MBRBerisi berdasarkan deskripsi Anda tentang apa yang Anda cari. Fungsi MBRContains pertama-tama buat Persegi Panjang Batas Minimal di atas poligon Anda, dan gunakan fitur poligon baru itu untuk melakukan penilaian berisi. Dalam contoh Anda, intinya jatuh ke dalam MBR poligon Anda sehingga itu sebabnya hasil MySQL Anda tidak seperti yang Anda harapkan. Dan STContains adalah fungsi yang tepat yang Anda cari.
Referensi resmi:Tautan spasial MySQL