2017-02-07 21 views
2

Я попытался вставить данные в точку() тип данных столбца из PHP так:Вставка пространственных данных в базу данных MySQL

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 и перед вставкой данных в таблицу разделить значение координаты в двух переменных.

OR 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

Работает, но только когда я добавляю данные вручную. Я могу «выяснить, как отправлять« необработанные »данные (приложение основано на структуре), которое должно выполняться как команда (ST_GeomFromText (значение) в INSERT). Поэтому я добавил сразу после BEGIN этой строки: SET NEW.coordinates = ST_GeomFromText (NEW.координаты). И это, конечно, не работает. – KRiSTiN

+0

Не работает, потому что wait 'value' должен быть' text'. –

+0

Могу я как-нибудь связаться с вами? У меня еще несколько вопросов по этой проблеме. – KRiSTiN

0

Это своего рода поздно, но я создал это решение проблемы

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

И Вставить я использовал это. Примечание. Я использую активную запись codeigniter для вставки данных.

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

Надеюсь, что это поможет. Приветствия!