2017-02-07 15 views
2

MySQL 데이터베이스에 이러한 방식으로 공간 데이터 삽입 :은 PHP()에서 데이터 형식 열을 I 점에 데이터를 삽입하려고

INSERT INTO table (coordinates) VALUES ("48.20 14.80"); 

또는

INSERT INTO table (coordinates) VALUES ("POINT(48.20 14.80)"); 

하고 그때마다 삽입 또는 업데이트하기 전에 트리거를인가 :

BEGIN 
SET @lat = SUBSTRING(NEW.coordinates, 1, LOCATE(' ', NEW.coordinates)); 
SET @lng = SUBSTRING(NEW.coordinates, LOCATE(' ', NEW.coordinates) + 1); 
SET @coor = PointFromWKB(POINT(@lat, @lng)); 
SET NEW.coordinates = @coor; 
END 

또는

BEGIN 
SET NEW.coordinates = GEOMFROMTEXT(NEW.coordinates); 
END 

그러나 반환

SQLSTATE[22003]: Numeric value out of range: 1416 Cannot get geometry object from data you send to the GEOMETRY field 

당신의 사람이 문제가 무엇을 알고 있나요? 감사.

+0

좌표 데이터 유형을 확인하십시오. – Gulshan

답변

0

가장 좋은

  1. 두 변수로 좌표 값을하게 분할 콜럼 두 colums 예컨대 coord_lat 및 coord_long으로 테이블에 데이터를 삽입하기 전에 좌표 분할된다.

또는 2. 좌표 열 데이터 유형을 텍스트로 변경하십시오.

+0

좋은 해결책이지만, 나는 그 열에 공간 인덱스를 적용하고 싶습니다. – KRiSTiN

2

이 시도 :

1

BEGIN 
    SET @lat = ST_X(NEW.coordinates); 
    SET @lng = ST_Y(NEW.coordinates); 
    SET t.coordinates = GEOMFROMTEXT(CONCAT('POINT(', @lat, ' ', @lng, ')')) ... --update point table 
    END 

2

INSERT INTO table (coordinates) VALUES (ST_GeomFromText('POINT(48.20 14.80)')); 
+0

작동하지만 데이터를 수동으로 추가 할 때만 작동합니다. 나는 "raw"데이터 (애플리케이션이 프레임 워크를 기반으로 함)를 보내는 방법을 파악할 수 있으며 INSERT에서 명령 (ST_GeomFromText (value))으로 실행해야합니다. 그래서 나는이 줄을 시작한 직후에 SET NEW.coordinates = ST_GeomFromText (NEW.coordinates)를 추가했다. 그리고 그것은 물론 작동하지 않습니다. – KRiSTiN

+0

대기'value'는'text'이어야하기 때문에 작동하지 않습니다. –

+0

어떻게 든 연락 할 수 있습니까? 나는 그 문제에 대해 더 이상의 질문이 없다. – KRiSTiN

0

늦었 좀입니다하지만 난 문제에이 솔루션을 개발

$cord= $long." ".$lat; 

그리고에 삽입 내가 이것을 사용했습니다. 참고 codeigniter 활성 레코드를 사용하여 데이터를 삽입하는 중

$this->db->set("coord",'geomfromtext("POINT("'."'$cord'".'")")',false); 
$this->db->insert("gisdata"); 

희망이 도움이 되길 바랍니다. 건배!