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-