>  기사  >  데이터 베이스  >  근처 Nkm 내의 데이터를 검색하는 mysql의 예

근처 Nkm 내의 데이터를 검색하는 mysql의 예

jacklove
jacklove원래의
2018-06-08 23:16:042088검색

파이 비율, 지구 반경 계수, 검색 지점의 경도와 위도를 기반으로 데이터 테이블에서 검색 지점을 기준으로 Nkm 이내의 데이터를 검색합니다.

1. 테스트 테이블 만들기

CREATE TABLE `location` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `longitude` decimal(13,10) NOT NULL, `latitude` decimal(13,10) NOT NULL, PRIMARY KEY (`id`), KEY `long_lat_index` (`longitude`,`latitude`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 테스트 데이터 삽입

insert into location(name,longitude,latitude) values
('广州东站',113.332264,23.156206),
('林和西',113.330611,23.147234),
('天平架',113.328095,23.165376);mysql> select * from `location`;
+----+--------------+----------------+---------------+| id | name         | longitude      | latitude      |
+----+--------------+----------------+---------------+|  1 | 广州东站      | 113.3322640000 | 23.1562060000 |
|  2 | 林和西        | 113.3306110000 | 23.1472340000 ||  3 | 天平架        | 113.3280950000 | 23.1653760000 |
+----+--------------+----------------+---------------+

3. 1km 이내의 데이터 검색

검색 지점 좌표: 타임스퀘어113.323568, 23.146436

6370.996 킬로미터는 반경입니다. 지구

구 위의 두 점 사이의 좌표 거리를 계산하는 공식

C = sin(MLatA)sin(MLatB)cos(MLonA-MLonB) + cos(MLatA)cos(MLatB)
Distance = RArccos(C)*Pi180

계산식에 따른 쿼리문은 다음과 같습니다.

select * from `location` where (
acos(sin(([#latitude#]*3.1415)/180) * sin((latitude*3.1415)/180) + cos(([#latitude#]*3.1415)/180) * cos((latitude*3.1415)/180) * cos(([#longitude#]*3.1415)/180 - (longitude*3.1415)/180))*6370.996)<=1;

쿼리 실행:

mysql> select * from `location` where (    -> acos(    -> sin((23.146436*3.1415)/180) * sin((latitude*3.1415)/180) +     -> cos((23.146436*3.1415)/180) * cos((latitude*3.1415)/180) * cos((113.323568*3.1415)/180 - (longitude*3.1415)/180)    -> )*6370.996    -> )<=1;
+----+-----------+----------------+---------------+| id | name      | longitude      | latitude      |
+----+-----------+----------------+---------------+|  2 | 林和西     | 113.3306110000 | 23.1472340000 |
+----+-----------+----------------+---------------+

이 글에서는 mysql 내의 데이터 검색 관련 내용을 설명합니다. N킬로미터 근처, 관련 정보가 더 필요하면 PHP 중국어 웹사이트를 참고하세요.

관련 권장 사항:
연결 중단 후 자동으로 다시 연결되는 Mysql 방법

php는 HTML 엔터티 번호와 비ASCII 문자열 간의 상호 변환 클래스를 실현합니다.

php는 자동 증가 ID

위 내용은 근처 Nkm 내의 데이터를 검색하는 mysql의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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