MySQL에서 두 지점 사이의 거리를 찾으십시오. (포인트 데이터 유형 사용)

StackOverflow https://stackoverflow.com/questions/2270181

문제

다음과 같은 2 개의 열 테이블이 있다고 가정합니다.

| user_id      | int(11) | NO   | UNI | NULL    |                |
| utm          | point   | NO   | MUL | NULL    |                |

보시다시피, 그것은 매우 간단합니다. UTM은 a입니다 가리키다 데이터 형식. 다음과 같이 삽입합니다.

INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));

그런 다음 공간 색인을 만듭니다.

ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)

좋아, 모든 것이 좋습니다. 자, 나는하고 싶다 * 어디서 거리 <99999를 선택하십시오.그러나 그것은 작동하지 않습니다!

//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)

그건 그렇고, 나는 Pointfromwkb없이 삽입하려고 노력했다.

도움이 되었습니까?

해결책

해결되었습니다. 이것이 내가 한 일입니다.

where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;

다른 팁

당신은 또한 이런 식으로 할 수 있습니다. 더 빠른지 확실하지 않습니다.

select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999

내가 아는 한, 당신은 이런 식으로 시도해야합니다.

select * from mytable
   where 
    (
        GLength(
          LineStringFromWKB(
            LineString(
              geoPoint, 
              GeomFromText('POINT(51.5177 -0.0968)')
            )
          )
        )
      ) < 99999999

이 답변.

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