MySQL 공간 함 수 를 이용 하여 위치 카드 를 찍 는 완전한 절 차 를 실현 합 니 다.

머리말
프로젝트 수 요 는 사용자 의 현재 위치 와 주어진 지리 적 위치 범위 내 에 있 는 지 판단 하고 위치 제한 에 부합 해 야 카드 를 칠 수 있 으 며 그 중의 위치 범 위 는 하나 이상 의 불규칙 한 다각형 이다.다음 그림 은 사용자 가 칭 화대 에 있 는 지 북 대 에 있 는 지 판단 한다.

도형 가 져 오기 영역 좌표\#
프로젝트 전단 은 위 챗 애플 릿 의 wx.getLocation 를 사용 하여 지리 적 위 치 를 얻 기 때문에 좌표 의 일치 성 을 위해 배경 선택 구역 범 위 는 텐 센트 맵 의 지리 적 위치 서 비 스 를 사용 하고 응용 도구->기하학 적 도형 을 그 리 는 데 점,선,다각형 과 원형 을 편리 하 게 선택 할 수 있 습 니 다여기 봐.
정부 가 제공 한 예제 에 조금 만 변경 하면 선택 한 위치 좌 표를 얻 을 수 있다.

기억 위치
좌표 위 치 를 가 져 온 후,이어서 어떻게 저장 합 니까?
오픈 지리 공간 연합(OGC)은 250 여 개 회사,기관,대학 으로 구 성 된 국제 연합 으로 공간 데 이 터 를 관리 하 는 다양한 애플 리 케 이 션 개발 에 참여 해 사용 가능 한 공간 솔 루 션 을 공개 한다.OGC 에서 지리 정 보 를 공개 한 OpenGIS 입 니 다.®Implementation 표준,이 규범 은 OGC 사이트 에서http://www.opengeospatial.org/standards/sfs획득OGC 규범 을 따 르 기 위해 MySQL 은 공간 extensions 를 Geometry Types 환경 을 가 진 SQL 의 부분 집합 으로 구현 하여 공간 을 생 성,저장,분석 하 는 기능 을 제공 합 니 다.한 마디 로 하면 MySQL 은 우리 의 수 요 를 만족 시 킬 수 있다.
MySQL 은 하나의 저장 유형 인 POINT,LINESTRING,POLYGON 에 대응 하 는 기하학 적 도형 점,선,다각형 을 제공 합 니 다.GEOMETRY 는 세 가지 중 하 나 를 저장 할 수 있 습 니 다.동시에 다양한 유형 을 저장 하 는 능력 을 가지 고 있 으 며 MULTIPOINT,MULTILINESTRING,MULTIPOLYGON,GEOMETRYCOLLECTION 은 단일 도형 의 복수 에 순서대로 대응한다.
프로젝트 로 돌아 가면 우리 가 사용 하 는 것 은 폴리 곤 입 니 다.
건축 표 문 구 는 다음 과 같다.

CREATE TABLE `polygon` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `polygon` polygon NOT NULL,
 PRIMARY KEY (`id`),
 SPATIAL KEY `d` (`polygon`)
) DEFAULT CHARSET=utf8;
데이터 삽입
MySQL 은 Well-Known 텍스트(WKT)형식 과 Well-Known 바 이 너 리(WKB)형식 두 가지 형식 을 object 형식 으로 변환 하여 저장 하 는 것 을 지원 하 며,보다 이해 하기 쉬 운 WKT 형식 을 사용 합 니 다.WKB 에 관심 있 는 사람 은여기 봐.
삽입 문 구 는 다음 과 같 습 니 다:

INSERT INTO `polygon` VALUES ('1', '    ', GeomFromText('POLYGON((
40.01169924229143 116.31565081888039,39.99304082299905 116.31616541796757,39.99343506780591 116.33297565023167,40.00237067000859 116.33743550702275,40.01340715321479 116.33057418815224,40.01169924229143 116.31565081888039))'));

INSERT INTO `polygon` VALUES ('2', '    ', GeomFromText('POLYGON((39.99711457525893 116.30450117461078,39.98673259872773 116.30535884106575,39.98673259872773 116.31702308311287,39.99963848242885 116.31598375134854,39.99711457525893 116.30450117461078))'));
주의해 야 할 것 은 텐 센트 맵 이 되 돌아 오 는 다각형 의 점 은 닫 힌 것 이 아니 라 polygon 함 수 는 다각형 의 닫 힌 여 부 를 확인 하기 위해 첫 번 째 점 과 마지막 점 이 같 아야 합 니 다.닫 힌 polygon 이 돌아 오지 않 으 면 NULL 이 되 고 삽입 문 구 는 실 패 됩 니 다.
이러한 목록 의 조건 을 기하학 적 으로 만족 시 키 면 문법 적 으로 well-formed 입 니 다.
4.567917.꼬치 는 적어도 두 개의 점 이 있다.4.567918.
다각형 은 적어도 하나의 고리 가 있다.
4.567917.다각형 고리 닫 기(첫 번 째 와 마지막 점 이 같 음)4.567917.다각형 링 은 적어도 4 개의 점(최소 다각형 은 삼각형 이 고 첫 번 째 는 마지막 점 과 같다)이 있다.
집합 이 비어 있 지 않 음(Geometry Collection 제외)
조회 판단

SELECT * FROM polygon WHERE
	MBRWithin (ST_GeomFromText('POINT(39.991333490218544 116.30964748487895)'), polygon);
#      

SELECT * FROM polygon WHERE
	MBRWithin (ST_GeomFromText('POINT(39.988967560246685 116.3286905102832)'), polygon);
#     
세심 한 학생 들 은 이곳 의 검색 어 에 함 수 를 사용 하 는 것 을 발견 할 수 있 습 니 다.예전 의 SQL 에 검색 필드 에 함 수 를 사용 하면 색인 이 효력 을 잃 고 전체 표 가 스 캔 되 지만 공간 데이터 에 있어 서 는 그렇지 않 습 니 다.먼저 EXPLAIN 문장 과 결 과 를 보 세 요.

MySQL 공간 형식의 데이터 역시 색인 을 만 들 수 있 음 을 알 수 있 습 니 다.사용 하 는 키 워드 는 SPATIAL 입 니 다.
용법 은 다음 과 같다.

CREATE TABLE geom (g GEOMETRY NOT NULL);
CREATE SPATIAL INDEX g ON geom (g);
상용 공간 계산 함수
1.두 점 사이 의 거 리 를 판단 한다.
ST_Distance(g1,g2),g1 과 g2 사이 의 거 리 를 되 돌려 줍 니 다.모든 인자 가 NULL 또는 빈 기하학 이면 return value 는 NULL 입 니 다.
2.도형 1 이 도형 2 를 완전히 포함 하 는 지 여부
ST_Contains(g1,g2),g1 이 g2 를 완전히 포함 하 는 지 1 또는 0 으로 되 돌려 줍 니 다.STWithin(g2,g1)은 같은 효 과 를 얻는다.
3.사 귀지 않 음
ST_Disjoint(g1,g2)는 g1 이 공간 적 으로 g2 와 교차 하지 않 는 지 1 또는 0 으로 되 돌아 갑 니 다.
4.도형 이 교차 하 는 상황 이 비교적 복잡 하고 중첩,외부 교차 등 상황 을 포함 하 며 구체 적 으로 는여기 봐.
총결산
본 고 는 지리 적 위치 에서 카드 를 찍 는 수 요 를 통 해 MySQL 이 자체 적 으로 가지 고 있 는 Polygon 데이터 형식 으로 공간 데이터 의 저장 을 실현 하고 STContains(g1,g2)함수 가 배경 에 미리 설 치 된 지리 적 영역 과 전단 에서 얻 은 사용자 의 지리 적 위 치 를 대 입 하면 사용자 가 카드 를 치 는 범위 내 에 있 는 지 여 부 를 알 수 있 습 니 다.그 중에서 MySQL 은 함 수 를 검색 필드 로 사용 하 는 상황 에서 도 색인 을 사용 할 수 있 고 마지막 으로 다른 공간 처리 함 수 를 연장 했다.
MySQL 공간 함 수 를 이용 하여 위치 카드 를 만 드 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 MySQL 공간 함수 위치 카드 를 만 드 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기