Bonjour,
Je suis nouveau pour l'utilisation des SIG sur internet.
Je cherche à créer une carte (via l'api géoportail) avec des marqueurs provenant d'une base postgre/postgis.
Pour commencer J'ai pris une base test avec juste un identifiant, libelle, description et la variable spatial the_geom.
Pour le moment j'arrive via une page Php à afficher les coordonnées long et lat de postgresql.
Voici mon code Php :
Code PHP:
<?php
include ('./inclusion/connexion.inc');
$idc = connect();
$sql="select id, lib, description, st_asgeojson(the_geom) as geom from ponctuel";
$res=pg_exec($idc, $sql);
$json = 'type: FeatureCollection,'."\n";
$json.= 'features : '."\n<br>";
while ($row=pg_fetch_assoc($res)){
if($row["geom"]!=''){
$json.= 'type : Feature,'."\n";
$json.= 'géométrie :'.$row["geom"].", \n";
$json.= 'propriétés : {'."\n";
$json.= 'libellé : '.$row['lib'].''.", \n";
$json.= 'description : '.$row['description'].''."\n, ";
$json.= 'id :'.$row['id'].''."\n"; // derniere champ (sans virgule)
$json.= "}\n";
$json.= "},\n <br>";
}
}
$json=substr($json,0, strlen($json)-2);
$json.= ""."\n";
$json.="}";
echo $json;
?>
Par contre je ne trouve pas le code pour faire le lien avec ma base postgres afin d'afficher mes marqueurs sur ma carte.
Voici mon code HTML:
//____________Le clic sur marqueur ouvre une nouvelle fen뵲e
function ouvrePopup(feature) {
if (feature) {
if (!feature.popup) {
var ll= feature.geometry.getBounds().getCenterLonLat();
var me= VISU.getMap().getExtent();
var inView= me.containsLonLat(ll,false);
if (!inView) { // Hors de la visualisation = renvoi au centre
ll= me.getCenterLonLat();
}
feature.popup= new OpenLayers.Popup.FramedCloud(
"chicken",
ll,
null,
//____________Ajout des attributs 'NAME' et 'DESCRIPTION' dans l'info-bulle :
'<div style="font-size:.75em">' + "<b>" + feature.attributes.lib + "</b><br>" + feature.attributes.description,
null,
false), // Croix de fermeture (true=oui false=non)
null;
}
if (feature.popup) { // Ajout de la popup a carte
VISU.getMap().addPopup(feature.popup,true); // True = l'une ou l'autre. False = en cumul
}
}
}
function outPopup(feature) {
if (feature && feature.popup) {
feature.popup.destroy();
feature.popup= null;
}
}
//____________La variable VISU est d꤬arꥠpar l'API via le param鵲e instance
function initGeoportalMap() {
if (typeof(geoportalLoadVISU) != 'function') {
}
geoportalLoadVISU("geoportalCarteDiv", "normal", 'FXX', null, null);
if (VISU.getMap().allowedGeoportalLayers) {
//____________Affichage d'une "partience" pendant le tꭩchargement
VISU.getMap().addControl(new OpenLayers.Control.LoadingPanel());
if (VISU) {
VISU.addGeoportalLayers();
}
//____________Affichage des marqueurs Json
var geojson = VISU.getMap().addLayer("Json", "Marqueurs GeoJson", "./st_asgeojson.php",{
isBaseLayer: false,
visibility: true,
minZoomLevel: 0,
maxZoomLevel: 20,
},
{
onSelect: ouvrePopup,
onUnselect: outPopup,
hover: false // Ouverture au sꭥct = false. Au survol = true
});
//____________Positionnement du point central de la carte (coordonn꦳ + niveau de zoom)
VISU.getMap().setCenterAtLonLat(5.56, 46.67, 8.5);
}
}
La carte s'affiche bien mais ma couche "Marqueurs GeoJson" est inexistante...
Je continu à chercher mais si vous avez des idées je suis preneur.
Merci par avance de votre aide
Partager