У мене є таблиця поштових індексів, яка включає центр lat, lng для кожного поштового індексу. Я використовую його для отримання списку поштових індексів у межах даного радіусу милі з будь-якої довільної точки.
Мені просто прийшло в голову, що те, що центральна точка блискавки не знаходиться в заданому радіусі, не означає, що сам поштовий блиск не знаходиться в радіусі.
Я використав свої супердосконалі навички мистецтва, щоб проілюструвати суть тут:
Зелені смугасті краплі представляють поштові індекси A, B і C.
Червоні плями є географічними центрами для кожного поштового індексу
Точка фуксії - цільове місце розташування, і ..
Колоподібне синє коло - це радіус 1 милі від цільового місця
Якщо я запускаю запит на всі поштові індекси в радіусі 1 милі від рожевого розмазування, тільки поштові індекси B і C будуть повернуті, оскільки центральна точка для поштового індексу A знаходиться не в радіусі однієї милі, хоча сама рожева розмазаність чітко в поштовому індексі А.
SELECT *,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.y))
* COS(RADIANS(p.longpoint) - RADIANS(z.x))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.y)))) AS dist
FROM standard_zip AS z
JOIN ( /* these are the query parameters */
SELECT $lat AS latpoint, $lng AS longpoint,
$miles AS radius, 69 AS distance_unit
) AS p ON 1=1
WHERE z.y
BETWEEN p.latpoint - (p.radius / p.distance_unit)
AND p.latpoint + (p.radius / p.distance_unit)
AND z.x
BETWEEN p.longpoint - (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
ORDER BY dist
Як, до біса, я пишу запит, який буде включати zip A в результати?
У мене є доступ до просторової / геометрії для кожного поштового індексу, який я можу додати до таблиці, якщо це потрібно, але я не маю уявлення, як би я використовував його для цієї мети в MySQL.
Редагувати : Я провів день, читаючи документи Oracle та MySQL для просторових даних і вдалося успішно перетворити свої просторові дані в MySQL . Як мені почати писати подібний запит, який використовує стовпчик геометрії замість lat та long? Я використовую 2D дані .. геометрія - це лише багатокутники та багатокутники ..
Я думаю, що я щось зрозумів.
select
*
from
(
select
MIN(st_distance(geom, POINT(-82.765136, 28.0914015))) * 69 as miles,
zip
from
zip_spatial
group by
zip
order by
miles asc
) d
where
d.miles < 5
На сьогоднішній день я залишу щедріше відкритим, якщо хтось матиме краще, ефективніше рішення.