Presumivelmente, os itens x e y em seus dados POINT em sua
geometry
coluna está em graus de latitude e longitude. Para fazer essa pesquisa com eficiência no MySQL, você precisará de algumas coisas.
- Uma tabela MyISAM (ou MySQL versão 5.7 e posterior e InnoDB ou MyISAM)
- Uma qualificação NOT NULL em sua coluna de geometria
- Um índice espacial
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- Código para criar uma representação textual do retângulo que você deseja pesquisar
- Uso das funções GeomFromText e MBRContains/MBRWithin em sua instrução SELECT.
Suponha que sua caixa lat/long seja um retângulo de um grau de extensão centrado em Catedral de Winchester (51.0606, -1.3131) . Você precisa de uma caixa delimitadora em torno desse ponto. Esta consulta MySQL irá gerar uma LINESTRING (texto) para uma linha que passa diagonalmente pela caixa delimitadora.
SELECT
CONCAT('LINESTRING(',
latitude-0.5,' ',longitude-0.5,
',',
latitude+0.5 ,' ',longitude +0.5,
')') AS box
FROM (
SELECT 51.0606 AS latitude, -1.3131 AS longitude
) AS coord
A consulta te dá isso:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
Você também pode usar o processamento de string em um idioma de host para criar um tipo semelhante de string de texto. O formato que você precisa é este.
LINESTRING(lat1 long1, lat2 long2)
Então você pode usá-lo para pesquisar sua tabela espacial da seguinte forma:
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
Isso irá explorar o índice espacial e encontrar cada linha de
flags
cujas coordenadas estão dentro da caixa delimitadora dessa linha diagonal. Aqui está alguma documentação .
Se seus
flags
table contiver menos de algumas centenas de milhares de linhas, você poderá descobrir que uma tabela comum (não uma tabela espacial) com colunas de latitude e longitude (tipos de dados FLOAT, indexados) funciona bem e é mais fácil de desenvolver e depurar. Eu escrevi um tutorial sobre essa técnica. http://www.plumislandmedia.net/mysql/haversine-mysql- local-proximo/