Mysql 저장 프로시저 - Baidu 좌표를 통해 반경 및 정렬된 거리 내의 자격을 갖춘 사용자를 쿼리합니다.
예전에 비슷한 적용을 해본 적이 있는데 오늘 확인해 보니 별로 타당하지 않은 것 같아서 다시 생각해서 쿼리 저장 프로시저를 작성했습니다.
테이블은 설명되지 않습니다.
프로세스는
-- ---------------------------- -- Procedure structure for DIS -- ---------------------------- DROP PROCEDURE IF EXISTS `DIS`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `DIS`(IN `_lat` varchar(11),IN `_lng` varchar(11),IN `_ras` int,INOUT `_data` text) BEGIN DECLARE _sql text ; DECLARE EARTH_RADIUS VARCHAR(10) ; DECLARE _range VARCHAR(16); DECLARE lngR VARCHAR(16); DECLARE maxLat VARCHAR(16); DECLARE minLat VARCHAR(16); DECLARE maxLng VARCHAR(16); DECLARE minLng VARCHAR(16); SET EARTH_RADIUS = 6378.137; SET _range = 180 / pi() * _ras / EARTH_RADIUS; SET lngR = _range / cos(_lat * pi() / 180); SET maxLat = _lat + _range; SET minLat = _lat - _range; SET maxLng = _lng + lngR ; SET minLng = _lng - lngR ; SET @_sql = CONCAT('SELECT *, ceil( 2 * asin( sqrt( pow(sin((((',_lat,' * PI() / 180.0) - (',_lat,' * PI() / 180.0))) / 2),2) + cos(',_lat,' * PI() / 180.0) * cos(lat * PI() / 180.0) * pow(sin(((',_lng,' * PI() / 180.0) - (lng * PI() / 180.0)) / 2),2) ) ) * ',EARTH_RADIUS,' * 1000 ) AS di FROM dis WHERE lat BETWEEN ',minLat,' AND ',maxLat,' AND lng BETWEEN ',minLng,' AND ',maxLng,' ORDER BY di LIMIT 0,10'); PREPARE stmt FROM @_sql; EXECUTE stmt; END ;; DELIMITER ;
호출:
입니다.
CALL DIS(_lat,_lng,_ras,@_data);
_lat, 경도
_lng, 위도
_ras, 반경(단위: km); 수락 및 반환
반환 값에서 di는 정렬된 거리이며, 가까운 것부터 먼 것까지 단위는 m입니다.
저장 프로시저를 사용하지 않는 경우 PHP 프로그램으로 분할할 수 있습니다.
먼저 정사각형 좌표 영역을 얻은 다음 다음을 통해 하나로 접합합니다. sql문 위의 @_sql에 sql을 넣어서 실행하면 됩니다.
define("EARTH_RADIUS",6378.137); /** * 获取距离四个坐标 * @param $lon * @param $lat * @param int $distance 默认1KM的距离 * @return array */ function getCoor($lng,$lat,$distance = 1){ $range = 180 / pi() * $distance / EARTH_RADIUS; $lngR = $range / cos($lat * pi() / 180); $data = array(); $data["maxLat"] = $lat + $range; $data["minLat"] = $lat - $range; $data["maxLng"] = $lng + $lngR ;//最大经度 $data["minLng"] = $lng - $lngR ;//最小经度 return $data; }
여기서 얻은 결과는 원형 반경이 아닌 정사각형입니다. 여기서는 더 이상 설명하지 않는 array_filter()와 같은 2차 필터링을 나중에 수행할 수 있습니다.
위 내용은 콘텐츠 측면을 포함하여 Baidu 좌표를 사용하여 반경 및 거리 내의 자격 있는 사용자를 쿼리하는 Mysql 저장 프로시저를 소개합니다. PHP 튜토리얼에 관심이 있는 친구에게 도움이 되기를 바랍니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Oracle 선언 사용법에는 변수 선언, 상수 선언, 커서 선언 및 서브루틴 선언이 포함됩니다. 자세한 소개: 1. PL/SQL 블록에서 DECLARE 문을 사용하여 변수를 선언할 수 있습니다. 2. 상수는 PL/SQL 블록에 선언된 변경할 수 없는 값입니다. 3. PL/SQL에서 사용되는 커서 선언 쿼리 결과 세트는 블록에서 처리됩니다. 4. 서브루틴 선언은 PL/SQL 블록에 정의된 재사용 가능한 코드 블록입니다.

이 기사에서는 PHP가 배열의 모든 값을 반환하여 배열을 형성하는 방법을 자세히 설명합니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 기사를 읽고 뭔가를 얻을 수 있기를 바랍니다. . array_values() 함수 사용하기 array_values() 함수는 배열에 있는 모든 값의 배열을 반환합니다. 원래 배열의 키는 유지되지 않습니다. $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values는 ["bar","qux"]를 사용하여 루프는 루프를 사용하여 배열의 모든 값을 수동으로 가져오고 새 값에 추가할 수 있습니다.

머리말 Java에서는 Range 메서드를 IntStream 및 LongStream 클래스 모두에서 사용할 수 있습니다. IntStream 클래스에서는 함수 매개변수 범위 내에서 IntStream의 순차적 값을 반환하는 데 도움이 됩니다. 메서드에서 startInclusive(inclusive) 및 endExclusive(exclusive)는 증분 단계 크기와 함께 사용되는 두 개의 매개 변수이며 앞서 언급한 대로 시작 값은 포함되고 끝 값은 제외됩니다. LongStream의 경우 유일한 차이점은 LongStream 값이 추가된다는 것입니다. 범위 구문(Range Syntax) Java의 범위 메소드 구문을 살펴보겠습니다. IntStream 범위

Go 언어는 여러 측면에서 독특한 디자인과 기능을 갖춘 간결하고 강력한 프로그래밍 언어입니다. 가장 인상적인 기능 중 하나는 배열, 슬라이스, 맵, 채널과 같은 데이터 구조를 반복하는 데 사용되는 range 키워드입니다. 범위의 유연성과 편리함 덕분에 복잡한 데이터 구조를 쉽게 탐색할 수 있지만 많은 사람들이 그 작동 방식에 대해 혼란스러워합니다. 이 기사에서는 범위가 어떻게 작동하는지 간단하고 이해하기 쉬운 방식으로 설명하고 특정 코드 예제를 사용하여 독자의 이해를 돕습니다. 먼저 간단한 예를 살펴보자

MySQL을 사용하는 동안 날짜는 일반적으로 날짜/시간, 타임스탬프 및 기타 형식으로 저장됩니다. 그러나 때로는 특별한 필요나 역사적 이유로 인해 날짜가 varchar 형식으로 저장됩니다. 함수 사용: STR_TO_DATE(str,format) STR_TO_DATE(str,format) 함수는 DATE_FORMAT() 함수의 역함수입니다. 문자열 str과 형식 문자열 형식을 사용합니다. STR_TO_DATE()는 형식 문자열에 날짜 및 시간 구성 요소가 포함되어 있거나 단어가 다음과 같은 경우 DATETIME 값을 반환합니다.

DECLARE 문은 Oracle에서 변수, 상수 및 커서를 선언하는 데 사용되는 키워드입니다. PL/SQL 블록에서 사용할 데이터 객체를 정의하고 초기화하는 편리한 방법을 제공합니다. DECLARE 문을 사용하면 PL/SQL 코드를 더욱 모듈화하고 읽기 쉽게 만들 수 있습니다.

전설적인 에스컬레이드에 대한 GM의 전기적 해석은 방금 구성을 시작했으며 가격 범위는 인센티브 이후 $130,000에서 약 $170,000입니다. 이는 Tesla의 C를 포함하여 거의 모든 고급 전기 자동차, 픽업 또는 SUV보다 더 많은 것입니다.

mysql에서 char과 varchar의 차이점은 다음과 같습니다. 1. CHAR는 고정 길이이고 VARCHAR은 가변 길이입니다. 2. CHAR 저장 및 검색 효율성은 높지만 VARCHAR 저장 및 검색 효율성은 높지 않습니다. 3. CHAR는 저장 공간을 차지합니다. , VARCHAR을 사용하면 저장 공간을 절약할 수 있습니다.
