[Gfoss] openlayers + postgis
beppe
beppenapo a gmail.com
Mer 18 Nov 2009 19:41:15 CET
Ringrazio per le tempestive risposte!
> da postgis puoi uscire direttamente con WKT, che openlayer "capisce al
> volo" e
> con un po' di fatica in più anche con GML o KML che vengono entrambi
> ben
> digeriti da openlayers.
>
> Chiaramente ti serve qualche forma più o meno sofisticata di cgi per
> gestire
> la richieste/risposte ma mapserver non è strettamente necessario.
>
Avevo pensato ad una soluzione del genere ma, immagino, che usando un
file wkt o gml sarebbe necessario "aggiornarlo" ad ogni modifica delle
tabelle, mentre usando un mapfile l'aggiornamento sarebbe automatico; mi
spiego meglio: se aggiungo un punto alla tabella di postgis, dovrei
ricreare il wkt, con un mapfile no...giusto?
> Un esempio minimale di riproiezione di layer vettoriale EPSG:4326
> su raster EPSG:900913 (OSM) lo trovi qui:
>
> http://www.rigacci.org/openlayers/
>
> Vedi l'html di "OpenLayers with WFS overlay".
>
Ho dato un'occhiata, e adattando il tuo script...mi ritrovo in mezzo al
mare tra corsica e francia invece che in trentino!!! E non vedo il mio
layer
Il codice è:
<script type="text/javascript">
var map = new OpenLayers.Map('map', {
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
20037508.34, 20037508.34),
numZoomLevels: 19,
maxResolution: 156543.0399,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:3003")
});
var osm = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
var wfs = new OpenLayers.Layer.WFS("Comuni",
"http://localhost/cgi-bin/mapserv?map=/var/www/mtsc-2.1/config/default/map.map",
{layers:'confini_com', format:'image/png', transparent:'off'}
);
map.addLayer(osm);
map.addLayer(wfs);
map.setBaseLayer(osm);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var extent = new OpenLayers.Bounds(653890.824038,
5121367.412500, 673982.300962, 5139410.087500);
map.zoomToExtent(extent);
</script>
Usando questo codice, invece, con epsg 4326 mi ritrovo in trentino nella
zona giusta ma non vedo il mio layer (e comunque non è la proiezione
giusta!)
Con epsg 3003 mi ritrovo in guinea!
Il codice è:
<script type="text/javascript">
var lat=46.203
var lon=11.228
var zoom=8
var map;
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,
-20037508.34, 20037508.34, 20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new
OpenLayers.Projection("EPSG:3003")
} );
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
wfs = new OpenLayers.Layer.WFS("Comuni",
"http://localhost/cgi-bin/mapserv?map=/var/www/mtsc-2.1/config/default/map.map",
{layers:'confini_com', format:'image/png', transparent:'off'}
);
map.addLayer(wfs);
var lonLat = new OpenLayers.LonLat(lon, lat).transform(new
OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter (lonLat, zoom);
}
</script>
Grazie mille per i consigli!
-beppe-
Il giorno mer, 18/11/2009 alle 16.09 +0100, beppe ha scritto:
> Salve a tutti,
> cogliendo l'occasione offertami da un lavoro che devo fare, volevo
> approfondire la conoscenza di openlayers.
> La sintassi è, ad un primo approccio, "complicatina" per chi non ha basi
> informatiche, ma abbastanza intuitiva per chi ha buona volontà!
> Detto questo vi chiedo qualche consiglio:
> il progetto consiste in un semplicissimo webgis formato da 2 soli layer
> (motivo per cui volevo evitare p.mapper, ka-map ecc.).
> Entrambi i layer sono "gestiti" da due tabelle postgis, di cui uno è un
> semplice "sfondo", mentre sull'altro andrebbero fatte una serie di
> ricerche (la tabella che contiene la geometria è collegate ad altre
> tabelle del db).
> Dubbi:
> 1. nella documentazione che ho trovato in giro non mi sembra ci siano
> modi per estrarre i dati direttamente, ma dovrei passare da mapserver,
> quindi: creo un mapfile con i collegamenti alle tabelle (magari
> creandomi delle view, in modo da estrarre tutti i dati che mi servono
> per le ricerche) e crearmi la variabile:
> layer = new OpenLayers.Layer.WMS ("MioLayer", "http://url...",
> {layers:'nomelayer', format:'image/png', transparent:'true'});
> Giusto?
>
> 2. Per vestire la mappa volevo usare come "sfondo" (layer basic) gli
> strati offerti dal portale cartografico nazionale (ortofoto e igm
> 25000). C'è qualche "controindicazione" per la quale è meglio usare osm
> o mapnik?
>
> 3. Come gestire le proiezioni...questo è il punto che più mi angoscia!!!
> I miei layer sono in epsg 3003, quelli del portale cartografico che mi
> interessano hanno epsg 32632 (se non sbaglio), mentre openstreetmap usa
> un'altra proiezione ancora. Nei vari esempi che ho trovato sul sito di
> openlayers ci sono diverse sintassi per gestire le proiezioni,
> sicuramente equivalenti, ma che possono confondere chi ha poca
> esperienza come me!
>
> Nell'attesa di consigli e "dritte" mi metto al lavoro...e che Dio (o chi
> per lui) me la mandi buona!
>
> Saluti
>
> -beppe-
Maggiori informazioni sulla lista
Gfoss