Я разрабатываю систему с фреймворком Laravel, используя базу данных Postgres с Postgis. В базе данных есть таблица с полем геометрии (3D Point). поэтому мне нужно преобразовать 3 измерения в объект Point и объекты Point в 3 измерения.
Я искал библиотеку Laravel Postgis и нашел Laravel-PostGIS, но он только что разработан для 2D-точки и не поддерживает 3D-точки. поэтому я решил использовать напрямую или разработать функцию конвертации в php для использования в Laravel.
Некоторый код, который я пытался вставить новые данные напрямую:
$arr = ['geometry' => "ST_PointFromText('POINT(' || " . Input::get('Latitude') . " || ' ' || " . Input::get('Longitude') . " || ' ' || " . Input::get('Altitude') . " || ')', 4326)"];
Location::where('id','1')->update($arr);
пример инициализации переменной $ arr похож на
ST_PointFromText (‘POINT (‘ || 1 || » || 1 || » || 1 || ‘)’, 4326)
Это как то, что я нашел в эта ссылка
Но отладчик Laravel получил ошибки для меня:
PDOException in Connection.php line 384: SQLSTATE[XX000]: Internal error: 7 ERROR: parse error - invalid geometry HINT: "ST" <-- parse error at position 2 within geometry
SQLSTATE[XX000]: Internal error: 7 ERROR: parse error - invalid geometry HINT: "ST" <-- parse error at position 2 within geometry (SQL: update "DBLocation" set "geometry" = ST_PointFromText('POINT(' || 1 || ' ' || 1 || ' ' || 1 || ')', 4326) where "id" = 1)
Я хочу знать свою ошибку.
Я не уверен в синтаксисе параметризованных запросов, но он должен выглядеть примерно так:
ST_SetSRID(ST_MakePoint(%, %, %), 4326);
с тремя параметрами: Longitude
, Latitude
, Altitude
в этой последовательности!
Других решений пока нет …