Вероятно елементите x и y във вашите POINT данни във вашата geometry
колоната е в градуси на географска ширина и дължина.
За да направите това търсене ефективно в MySQL, ще ви трябват няколко неща.
- Таблица MyISAM (или MySQL версия 5.7 и по-нова и InnoDB или MyISAM)
- Квалификация, която НЕ НУЛЕВА за вашата геометрична колона
- Пространствен индекс
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- Код за създаване на текстово представяне на правоъгълника, който искате да търсите
- Използване на функциите GeomFromText и MBRContains / MBRWithin във вашия оператор SELECT.
Да предположим, че вашата широчина/дълга кутия е правоъгълник един градус в степен, центриран около Катедралата Уинчестър (51.0606, -1.3131) . Имате нужда от ограничаваща кутия около тази точка. Тази MySQL заявка ще генерира LINESTRING (текст) за линия, минаваща диагонално през това ограничаващо поле.
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
Заявката ви дава това:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
Можете също да използвате обработка на низове на хост език, за да излезете с подобен вид текстов низ. Форматът, от който се нуждаете, е този.
LINESTRING(lat1 long1, lat2 long2)
След това можете да го използвате, за да търсите във вашата пространствена таблица, както следва:
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
Това ще използва пространствения индекс и ще намери всеки ред flags
чиито координати се намират в рамките на ограничителната кутия на тази диагонална линия.
Ето малко документация .
Ако вашите flags
таблицата съдържа по-малко от няколкостотин хиляди реда, може да откриете, че обикновена таблица (не пространствена таблица) с колони за географска ширина и дължина (типове данни FLOAT, индексирани) също работи и е по-лесна за разработване и отстраняване на грешки.
Написах урок за тази техника. http://www.plumislandmedia.net/mysql/haversine-mysql- най-близкото местоположение/