Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql функцията MBRContains не е точна

В момента нямам MySQL, с който да играя. Затова първо се опитвам да дублирам вашата заявка в 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

И резултатът е това, което може да очаквате:

contain      distance
0   |   0.005489581062607675

Ето причината за това:

Използвам STContains не MBRC съдържа въз основа на вашето описание на това, което търсите. Функцията MBRContains първо създайте минимален ограничаващ правоъгълник върху вашия многоъгълник и използвайте тази нова функция за многоъгълник, за да прецените съдържа. Във вашия пример точката попада в MBR на вашия многоъгълник, така че ето защо вашият MySQL резултат не е това, което очаквате. И STContains е правилната функция, която търсите.

Официална справка: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. Защо INNER JOIN не е равно (!=) да виси завинаги

  2. mysql/php това защитен начин за свързване с mysql DB ли е?

  3. Laravel динамично падащо меню държава и щат

  4. Вмъкване на json кодирани данни в mysql

  5. Cronjob или MySQL събитие?