Erweitertes SQL Insert / Update über prepare (Datentyp:Geometrie)
Hallo zusammen,
momentan entwickele ich ein Modul, dass Geometrien in eine MySQL-Tabelle speichern soll.
Leider stoße ich momentan an meine Grenzen bei dem folgendem Insert-Statement :
PHP-Code:
// Value-Array
$set = array
(
username => $this->User->username,
type => $object->properties->type,
geom_color => $object->properties->geom_color,
area => $object->properties->area,
wkt_geometry=> $wkt,
geom => "GeomFromText('" . $wkt_gk . "',31466)"
);
// Insert values into DB
$this->Database ->prepare("INSERT INTO tl_geocart_candidates %s")
->set ($set)
->execute();
In der error.log - Datei wird folgendes geloggt:
PHP Fatal error: Uncaught exception 'Exception' with message 'Query error:
Cannot get geometry object from data you send to the GEOMETRY field
(INSERT INTO tl_geocart_candidates (username, type, geom_color, area, wkt_geometry, geom)
VALUES ('t_gf', 'Polygon', '', '0.016105253062304797'
, 'Polygon((17.60408401489 60.3629189801 ... ,17.60408401489 60.3629189801))'
, 'GeomFromText(\'Polygon((1768068.44992 8937976.23409,...,1768068.44992 8937976.23409))\',31466)'))'
thrown in D:\...\typolight-2.7.2\system\libraries\Database.php on line 519
Der Knackpunkt ist der Update-Wert "geom", da dieser über eine Funktion befüllt wird die ihrerseits eine WKT (Well Known Text) beherbergt.
Das richtige Insert-Statement (auf der DB ausgeführt) lautet:
Code:
INSERT INTO tl_geocart_candidates
(username, type, geom_color, area, wkt_geometry, geom)
VALUES ('t_gf', 'Polygon', '', '0.027865428393143855'
, 'Polygon((17.60279655457 60.3615501271,...,17.60279655457 60.3615501271))'
, GeomFromText('Polygon((1767846.70806 8937795.19132,...,1767846.70806 8937795.19132))',31466)
)
In TYPOlight werden die Datenbankabfragen über die Methoden prepare/execute gehandhabt, dies würde ich gerne weiter so handhaben jedoch mit einer Anpassung/Erweiterung die auch Geometrien unterstützt bzw. die Funktion "GeomFromText" mit einem WKT.
Ist dies in TYPOlight realisierbar ohne die Sicherheit zu vernachlässigen?
Alternativ könnte ich auch einen DB-Trigger schreiben, jedoch interessiert mich der Lösungsweg über TYPOlight.
Gruß,
greq
Lesezeichen