Vous trouverez ici le code d'une fonction PL/PGSQL permettant de produire des fichiers XML utilisable depuis l'API Google Map pour produire des GPolyline.
"
CREATE OR REPLACE FUNCTION extractGPolyline(wkb geometry,color text,width int,html text) RETURNS text AS $$
DECLARE
ret text;
rett text;
i int;
mymax int;
tmp geometry;
rec record;
BEGIN
i:=1;
ret:='';
SELECT Simplify(tmp,10) into tmp;
SELECT NumPoints(tmp) INTO mymax;
ret:='
';
WHILE i <= mymax LOOP
BEGIN
SELECT ' ' INTO rett;
ret:=ret||''||rett;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'ERROR ON :%',AsText(wkb);
RETURN FALSE;
END;
i=i+1;
END LOOP;
ret:=ret||' ';
RETURN ret;
END;
$$ LANGUAGE plpgsql;
DECLARE
ret text;
rett text;
i int;
mymax int;
tmp geometry;
rec record;
BEGIN
i:=1;
ret:='';
SELECT Simplify(tmp,10) into tmp;
SELECT NumPoints(tmp) INTO mymax;
ret:='
WHILE i <= mymax LOOP
BEGIN
SELECT '
ret:=ret||''||rett;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'ERROR ON :%',AsText(wkb);
RETURN FALSE;
END;
i=i+1;
END LOOP;
ret:=ret||'
RETURN ret;
END;
$$ LANGUAGE plpgsql;
Temps d'exécution obtenus lors de l'utilisation de cette fonction sur un ensemble de 10000 LINESTRING
avec la fonction simplify
:
real 1m4.948s
user 0m0.550s
sys 0m0.050s
user 0m0.550s
sys 0m0.050s
La production de tels fichiers xml n'est donc pas très couteuse. Par contre l'utilisation en l'état du document xml produit depuis cet exemple [1] demande d'utiliser un seuil de zoom minimum pour que l'affichage des GPolyline ne ralentisse pas trop l'application GMap que vous utilisez.