각 우편 번호에 대한 중심 위도, 경도가 포함 된 우편 번호 표가 있습니다. 임의의 지점에서 주어진 마일 반경 내의 우편 번호 목록을 얻는 데 사용합니다.
지퍼의 중심점이 주어진 반경 내에 있지 않다고해서 지퍼 자체가 반경 내에 있지 않다는 것은 아닙니다.
나는 여기에 요점을 설명하기 위해 초 고급 예술 기술을 사용했습니다.
녹색 줄무늬 얼룩은 우편 번호 A, B 및 C를 나타냅니다.
빨간색 얼룩은 각 우편 번호의 지리적 중심입니다.
자홍색 점은 대상 위치입니다.
울퉁불퉁 한 파란색 원은 대상 위치에서 반경 1 마일입니다.
핑크 스머지에서 1 마일 반경 내의 모든 우편 번호에 대한 쿼리를 실행하면 핑크 스머지 자체가 있더라도 지퍼 A의 중심점이 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로 성공적으로 변환했습니다 . 위도 및 경도 대신 기하학 열을 사용하는 유사한 쿼리를 작성하는 방법은 무엇입니까? 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
누군가가 더 좋고 더 효율적인 솔루션을 가지고 있다면 지금 현상금을 열어 두겠습니다.