Вставка пространственных данных в базу данных MySQL

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

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

Кто-нибудь из вас знает в чем проблема? Благодарю.

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)'));
3

Другие решения

Ваша лучшая ставка

  1. разделите координату столбца на два столбца, например координаты координат и координаты, и, прежде чем вставлять данные в таблицу, разделите значение координат на две переменные.

ИЛИ ЖЕ
2. Измените тип данных столбца координат на текст.

0

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

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

И на вставке я использовал это. Обратите внимание, я использую активную запись codeigniter для вставки данных

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

Надеюсь, поможет.
Ура!

0
По вопросам рекламы [email protected]