>백엔드 개발 >PHP 튜토리얼 >경도와 위도를 기반으로 주변 위치 정보를 쿼리합니다.

경도와 위도를 기반으로 주변 위치 정보를 쿼리합니다.

WBOY
WBOY원래의
2016-10-22 00:14:222578검색

이제 현재 위치의 경도와 위도를 기준으로 데이터 테이블에서 2km 근처의 5개 장소를 쿼리하고 싶은데요. 쿼리 결과에 5개 위치가 포함되어 있지 않으면 5개가 발견될 때까지 근처 범위. 위치 위치. 저는 두 가지 옵션을 생각했습니다.

첫 번째 옵션은 sql 문으로 완전히 구현하는 것인데, sql 문으로 완전히 구현한다면 이런 sql을 어떻게 작성해야 할지 모르겠습니다.

두 번째 옵션은 먼저 쿼리한 후 사업 성과를 기준으로 판단하는 것입니다. 5개 위치가 충족되지 않으면 주변 범위를 확장하고 5개 위치를 찾을 때까지 데이터베이스에 다시 쿼리합니다.

두 가지 옵션 중 어느 것이 더 효율적인지 모르겠습니다. 조언을 부탁드립니다. 정말 감사합니다.

답글 내용:

이제 현재 위치의 경도와 위도를 기준으로 데이터 테이블에서 2km 근처의 5개 장소를 쿼리하고 싶은데요. 쿼리 결과에 5개 위치가 포함되어 있지 않으면 5개가 발견될 때까지 근처 범위. 위치 위치. 저는 두 가지 옵션을 생각했습니다.

첫 번째 옵션은 sql 문으로 완전히 구현하는 것인데, sql 문으로 완전히 구현한다면 이런 sql을 어떻게 작성해야 할지 모르겠습니다.

두 번째 옵션은 먼저 쿼리한 후 사업 성과를 기준으로 판단하는 것입니다. 5개 위치가 충족되지 않으면 주변 범위를 확장하고 5개 위치를 찾을 때까지 데이터베이스에 다시 쿼리합니다.

두 가지 옵션 중 어느 것이 더 효율적인지 모르겠습니다. 조언을 부탁드립니다. 정말 감사합니다.

두 가지 옵션을 전혀 이해하지 못합니다.

먼저 논리를 단순화할 수 없나요?

귀하의 요청은 다음과 같지 않습니까: 가장 가까운 5개 위치를 쿼리하세요. 왜 우리는 2킬로미터 이내인지 2킬로미터 떨어져 있는지를 구별해야 합니까?

최신 5개 항목을 쿼리할 경우 비즈니스 판단을 고려해야 하는 이유는 무엇입니까? 직접 SQL로 한도를 설정하는 것만으로는 충분하지 않습니까?

두 번째 옵션은 SQL을 사용하여 완전히 구현됩니다. 더 높은 효율성을 달성하려면 데이터 계층과 비즈니스 계층을 별도로 실행해야 합니다.

Amap LBS Cloud가 필요합니다. 귀하의 요구를 충족시켜 드립니다

mysql 공간좌표 데이터베이스를 사용해 보세요

<code>CREATE TABLE `spa` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `loc` point DEFAULT NULL,
    /*  ^---------------------------------- 保存经纬度  */
  PRIMARY KEY (`id`)
)</code>
<code>/* 查询 */
SELECT * FROM spa WHERE DISTANCE(POINT($当前经度, $当前纬度), loc) < ($距离(单位米) / 111195) LIMIT 5;
/*                      ^-----单位为度                                                ^---1度多少米  */</code>
정렬을 원하시면 거리순으로 주문하시면 됩니다.

GEOHASH를 사용하여 2D 좌표를 문자열로 변환한 후 비교해야 합니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.