문제

이 질문은 MySQL 지리 공간 확장 전문가를위한 것입니다.

다음 쿼리는 내가 기대하는 결과가 아닙니다.

create database test_db;

use test_db;

create table test_table (g polygon not null);

insert into test_table (g) values (geomfromtext('Polygon((0 5,5 10,7 8,2 3,0 5))'));
insert into test_table (g) values (geomfromtext('Polygon((2 3,7  8,9 6,4 1,2 3))'));

select

X(PointN(ExteriorRing(g),1)), Y(PointN(ExteriorRing(g),1)),
X(PointN(ExteriorRing(g),2)), Y(PointN(ExteriorRing(g),2)),
X(PointN(ExteriorRing(g),3)), Y(PointN(ExteriorRing(g),3)),
X(PointN(ExteriorRing(g),4)), Y(PointN(ExteriorRing(g),4))

from test_table where MBRContains(g,GeomFromText('Point(3 6)'));

기본적으로 우리는 2 개의 다각형을 만들고 있으며, MBRContains를 사용하여 포인트가 두 다각형 중 하나 내에 있는지 여부를 결정하려고합니다.

놀랍게도, 그것은 두 다각형을 반환합니다! 지점 3,6은 첫 번째 삽입 다각형에만 존재해야합니다.

두 다각형이 기울어 져 있습니다 (종이에 다각형을 그리면 볼 수 있습니다).

MySQL은 어떻게 두 다각형을 반환합니까? MySQL Community Edition 5.1을 사용하고 있습니다.

도움이 되었습니까?

해결책

업데이트:이 답변은 mySQL에 의해 쓸모없는 것입니다. http://forge.mysql.com/wiki/gis_functions! 이전 MBRContains 구현에 대한 참조로 남겨 둘 것입니다. 그러나 변경 사항을 설명하는 새로운 답변은 환영받을 것이며이 중 "수락"해야합니다.

쓸모없는 대답을 시작하십시오

당신은 (필요에 따라) 사용 중입니다. 최소 경계 사각형, 그와 같은 다각형이 아닙니다. 쿼리의 목적을 위해 비교되는 모양은 다음과 같습니다.

'POLYGON(0 2,0 10,7 10,7 2,0 2)'

첫 번째 모양과 :

'POLYGON(2 1,9 1,9 9,2 9,2 1)'

두 번째. (3,6)은 둘 다 있습니다.

MBR은 대략적인 추정 방식이며, 사각형을 최소 (x) 및 최대 (x)에 수직선, 최대 (y) 및 최소 (y)의 수평선을 갖는 것으로 묘사합니다. 이러한 모양은 데이터베이스를 계산하기가 더 쉽고 MySQL은 모든 다각형 기능을 지원하지 않습니다. (예, Linestrings 일반적으로 예, contains 아직 아님. 자세한 내용은 여기.). 더 정확한 지리 공간 기하학을 원한다면 현재 오픈 소스 측에서 최선의 선택은 Postgis.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top