Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Funkcja MySQL MBRContains nie jest dokładna

Nie mam teraz MySQL do zabawy. Dlatego najpierw próbuję zduplikować zapytanie w 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

A wynik jest taki, jakiego możesz się spodziewać:

contain      distance
0   |   0.005489581062607675

Oto powód tego:

Używam STContains nie MBBRContains na podstawie Twojego opisu tego, czego szukasz. Funkcja MBRContains najpierw tworzy minimalny prostokąt ograniczający nad wielokątem i używa tej nowej funkcji wielokąta do oceny zawartości. W twoim przykładzie punkt wpada do MBR twojego wielokąta, więc dlatego twój wynik MySQL nie jest taki, jakiego oczekujesz. A STContains to właściwa funkcja, której szukasz.

Oficjalne odniesienie:Łącze przestrzenne 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. Max_connections w MySQL 5.7

  2. Jak obliczyć procentowy wzrost z poprzedniego wiersza/dzień po złożonej Grupie według?

  3. Aktualizacja MySQL z wyborem podrzędnym

  4. Formularz Ajax Prześlij z przyciskiem prześlij

  5. Błąd krytyczny:wywołanie niezdefiniowanej funkcji mysql_connect_errno() in