2011-04-22 2 views

답변

29

이 칼럼에 SPATIAL 인덱스를 원하는 :

ALTER TABLE mytable ADD coords Point; 

UPDATE mytable 
SET  coords = Point(lon, lat); 

ALTER TABLE mytable MODIFY coords NOT NULL; 

CREATE SPATIAL INDEX sx_mytable_coords ON mytable(coords); 

당신이하지 않으면, 당신은 마지막 두 단계를 생략 할 수 있습니다.

업데이트 : MySQL 이전 버전의

, 당신은 WKT를 사용 Point 열을 채울 필요가있다 : 간결

UPDATE mytable 
SET  coords = GeomFromText(CONCAT('POINT (', lon, ' ', lat, ')')) 
+1

두 번째 명령은 값을 좌표로 이동하지 않습니다. 이 오류가 발생합니다 : GEOMETRY 필드에 보내는 데이터에서 지오메트리 개체를 가져올 수 없습니다. – cannyboy

+0

@cannyboy : MySQL 버전은 무엇입니까? 'lat'와'lon'이'NULL'일까요? – Quassnoi

+0

MySQL 5.0.45. 위도 및 경도 텍스트 열은 null이 아닙니다. – cannyboy

8

: Quassnoi가에서 대답

UPDATE myTable SET coords = GeometryFromText(CONCAT('POINT(', lon, ' ', lat, ')')); 

주 올바른 입력 형식이 POINT (XY)이거나 지구 POINT (경도)의 조건. 다음 예와 같이 X()와 Y() 함수를 통해 포인트를 표시 할 수 있습니다

참고 :

SELECT X(GeometryFromText(CONCAT('POINT(', 35, ' ', 60, ')'))) AS x, Y(GeometryFromText(CONCAT('POINT(', 35, ' ', 60, ')'))) AS y; 
+0

당신은 그것이 자그마한 천성인가요? 그물에있는 그 밖의 모든 것들은 반대쪽에 있습니다. –

+0

@Jonathan 그것은 POINT (x, y)입니다. 이 증명을 보자.'SELECT X (POINT (3, 2)) AS x' 3을 얻는다. –

8

MySQL 버젼 5.5.8

내 위도와 경도는 float 형이다. 데이터를 수집하는 경우

UPDATE table_name SET coord = POINT(longitude_field, latitude_field); 

뭔가, 고려 ... 기존 행을 업데이트하고, 당신의 테이블에 트리거를 추가하는 것이 좋습니다 각각의 컬럼에 개별적으로 위도와 경도를 저장해야합니다

CREATE DEFINER=`username`@`localhost` TRIGGER `table_name`.`create_point_geom` 
BEFORE INSERT ON database_name.table_name FOR EACH ROW 
BEGIN 
    SET NEW.coord = POINT(NEW.longitude, NEW.latitude); 
END; 

지리적 태그가 지정된 소셜 미디어 데이터를 수집하고이 방법을 사용하여 테이블에 지오메트리를 추가합니다.

관련 문제