Presumibilmente gli elementi xey nei tuoi dati POINT nella tua geometry
la colonna è in gradi di latitudine e longitudine.
Per eseguire questa ricerca in modo efficiente in MySQL, avrai bisogno di alcune cose.
- Una tabella MyISAM (o MySQL versione 5.7 e successive e InnoDB o MyISAM)
- Una qualifica NON NULL sulla colonna della geometria
- Un indice spaziale
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- Codice per creare una rappresentazione testuale del rettangolo che vuoi cercare
- Utilizzo delle funzioni GeomFromText e MBRContains / MBRWithin nell'istruzione SELECT.
Supponiamo che il tuo box lat/long sia un rettangolo di estensione di un grado centrato su Cattedrale di Winchester (51.0606, -1.3131) . Hai bisogno di un rettangolo di selezione attorno a quel punto. Questa query MySQL genererà un LINESTRING (testo) per una linea che attraversa diagonalmente quel riquadro di delimitazione.
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
La query ti ottiene questo:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
Puoi anche utilizzare l'elaborazione delle stringhe in una lingua host per ottenere un tipo simile di stringa di testo. Il formato che ti serve è questo.
LINESTRING(lat1 long1, lat2 long2)
Quindi puoi usarlo per cercare la tua tabella spaziale come segue:
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
Questo sfrutterà l'indice spaziale e troverà ogni riga di flags
le cui coordinate si trovano all'interno del riquadro di delimitazione di quella linea diagonale.
Ecco alcuni documentazione .
Se i tuoi flags
table contiene meno di poche centinaia di migliaia di righe, potresti scoprire che anche una tabella normale (non una tabella spaziale) con colonne di latitudine e longitudine (tipi di dati FLOAT, indicizzati) funziona ed è più facile da sviluppare ed eseguire il debug.
Ho scritto un tutorial su quella tecnica. http://www.plumislandmedia.net/mysql/harsine-mysql- loc-più vicino/