User Tools

Site Tools


tecnica:gps_cartografia_gis:openlayers_tips

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tecnica:gps_cartografia_gis:openlayers_tips [2011/07/19 18:05] – [Click destro] niccolotecnica:gps_cartografia_gis:openlayers_tips [2013/03/18 16:25] (current) – [Layer supportati da OpenLayers] niccolo
Line 6: Line 6:
   * [[http://trac.osgeo.org/openlayers/wiki/Documentation|More documentation]]   * [[http://trac.osgeo.org/openlayers/wiki/Documentation|More documentation]]
   * [[http://openlayers.org/dev/examples/|Examples gallery]]   * [[http://openlayers.org/dev/examples/|Examples gallery]]
 +  * [[http://ole.geops.de/|OpenLayers Editor]] extend OpenLayers functionality
 ===== Layer supportati da OpenLayers ===== ===== Layer supportati da OpenLayers =====
  
Line 12: Line 12:
 ^ Markers  | Visualizza delle icone, è possibile attivare un pop-up al click sull'icona. Ogni feature può avere un'icona diversa. I marker vengono aggiunti o rimossi da programma.  | ^ Markers  | Visualizza delle icone, è possibile attivare un pop-up al click sull'icona. Ogni feature può avere un'icona diversa. I marker vengono aggiunti o rimossi da programma.  |
 ^ Text  | Del tutto simile al ''Marker'', ma carica le feature, i nomi delle icone e il contenuto del pop-up da un file di testo. Carica il layer una sola volta, per aggiornarne il contenuto bisogna svuotarlo e forzare la funzione **''loadText()''**.  | ^ Text  | Del tutto simile al ''Marker'', ma carica le feature, i nomi delle icone e il contenuto del pop-up da un file di testo. Carica il layer una sola volta, per aggiornarne il contenuto bisogna svuotarlo e forzare la funzione **''loadText()''**.  |
-^ GeoRSS  | Carica un elenco di features da un file XML, ogni feature viene mostrata con un simbolo eventualmente personalizzto con un uno stile. Lo stile può dipendere dagli attributi della singola feature, non può essere un'icona bitmap. Carica il file .xml una sola volta, per aggiornarne il contenuto bisogna svuotarlo e forzare la funzione **''loadRSSt()''**. +^ GeoRSS  | Carica un elenco di features da un file XML, ogni feature viene mostrata con un simbolo eventualmente personalizzato con un uno stile. Lo stile può dipendere dagli attributi della singola feature, non può essere un'icona bitmap. Carica il file .xml una sola volta, per aggiornarne il contenuto bisogna svuotarlo e forzare la funzione **''loadRSSt()''**. 
-^ Vector  | Carica una gemoetria con un dato protocollo (es. HTTP) in un dato formato (es. GPX, GML, KML, ecc). La vestizione può essere fatta con uno stile, non si possono usare icone bitmap. Il file viene caricato con un protocollo specificato (es. HTTP) e con delle strategie specificate (ad esempio al variare della bounding box). La strategia **''BBOX''** fa uso di richieste XMLHttpRequest per caricare nuovi dati in modo asincrono, al cambiare della bounding box. Per forzare l'aggiornamento da programma si modifica l'URL di origine con **''setUrl()''** aggiungendo un parametro univoco (ad esempio un ''t=timestamp''), in tal modo si invalida la cache.  |+^ Vector  | Carica una geometria con un dato protocollo (es. HTTP) in un dato formato (es. GPX, GML, KML, ecc). La vestizione può essere fatta con uno stile, non si possono usare icone bitmap. Il file viene caricato con un protocollo specificato (es. HTTP) e con delle strategie specificate (ad esempio al variare della bounding box). La strategia **''BBOX''** fa uso di richieste XMLHttpRequest per caricare nuovi dati in modo asincrono, al cambiare della bounding box. Per forzare l'aggiornamento da programma si modifica l'URL di origine con **''setUrl()''** aggiungendo un parametro univoco (ad esempio un ''t=timestamp''), in tal modo si invalida la cache.  |
 ^ KML  | Layer vettoriale. Supporta diverse strategie di caricamento, in generale si richiede via HTTP e può essere circoscritto alla BBOX inquadrata in quel momento. I vari attributi inclusi nello standandard KML possono essere utilizzati da OpenLayers per definire lo stile, ecc.   | ^ KML  | Layer vettoriale. Supporta diverse strategie di caricamento, in generale si richiede via HTTP e può essere circoscritto alla BBOX inquadrata in quel momento. I vari attributi inclusi nello standandard KML possono essere utilizzati da OpenLayers per definire lo stile, ecc.   |
 ^ WFS  |  | ^ WFS  |  |
Line 235: Line 235:
 il **rettangolo che evidenzia l'estensione** nella overview potrà variare dalla **metà** dell'estensione dell'overview fino a **un decimo**. Oltre questi limiti l'overview viene zoommata opportunamente. il **rettangolo che evidenzia l'estensione** nella overview potrà variare dalla **metà** dell'estensione dell'overview fino a **un decimo**. Oltre questi limiti l'overview viene zoommata opportunamente.
  
-===== Sistemi di riferimento =====+===== Sistemi di riferimento extra =====
  
 OpenLayers supporta alcuni sistemi di riferimento, di questi è posibile fare la riproiezione al volo (layer vettoriali). Tra i sistemi supportati nativamente ci sono: OpenLayers supporta alcuni sistemi di riferimento, di questi è posibile fare la riproiezione al volo (layer vettoriali). Tra i sistemi supportati nativamente ci sono:
Line 246: Line 246:
 <code html> <code html>
 <script type="text/javascript" src="libs/proj4js/lib/proj4js-compressed.js"></script> <script type="text/javascript" src="libs/proj4js/lib/proj4js-compressed.js"></script>
 +<script type="text/javascript" src="libs/proj4js/lib/defs/EPSG3003.js"></script>
 +<script type="text/javascript" src="libs/proj4js/lib/defs/EPSG23032.js"></script>
 <script type="text/javascript" src="libs/openlayers/OpenLayers.js"></script> <script type="text/javascript" src="libs/openlayers/OpenLayers.js"></script>
 </code> </code>
  
-In teoria OpenLayers dovrebbe scoprire automaticamente che è disponibile la libreria proj4js, ma non è chiaro come.+In teoria OpenLayers dovrebbe scoprire automaticamente che è disponibile la libreria proj4js, senza bisogno di includere lo script. ma non è chiaro come.
  
-Sistemi di riferimento aggiuntivi possono essere definiti con la stessa sintassi di PROJ.4. Il sistema più comodo è aggiungere dei file nella directory **''proj4js/lib/defs/''** sull'esempio dei file esistentiAd esempio si aggiunge il file **''EPSG3003.js''**:+Sistemi di riferimento aggiuntivi vengono definiti con la stessa sintassi di PROJ.4, aggiungendo dei file nella directory **''proj4js/lib/defs/''**, nell'esempio sopra sono stati inclusi ''EPSG:3003'' e ''EPSG:23032''. 
 + 
 +Ecco ad esempio il file **''EPSG3003.js''**:
  
 <code javascript> <code javascript>
Line 259: Line 263:
 </code> </code>
  
-Se non si aggiunge manualmente la definizioneproj4js tenta di scaricarla da spatialreference.org. L'operazione viene effettuata a runtime e in modo asincorno, quindi potrebbe causare problemi difficili da risolvere.+Dopo aver incluso il JavaScript di cui sopra, diventa possibile fare operazioni del tipo: 
 + 
 +<code javascript> 
 +var lonLat = new OpenLayers.LonLat(1554000, 4678000); 
 +alert("lonLat = " + lonLat); 
 +lonLat.transform(new OpenLayers.Projection('EPSG:3003'), new OpenLayers.Projection('EPSG:23032')); 
 +alert("lonLat = " + lonLat); 
 +</code> 
 + 
 +:!: **ATTENZIONE!** Se non si aggiunge manualmente la definizione del sistema di riferimento (inline nel codice o tramite un file in **''lib/defs/''**) proj4js tenta di scaricarla da spatialreference.org. L'operazione **viene effettuata a runtime e in modo asincorno**, quindi potrebbe causare **problemi difficili da risolvere**. Un sintomo è che l'oprazione ''transform()'' pare non avere effetto sull'oggetto, in quanto il JavaScript non ha fatto in tempo a recuperare la definizione del sistema di riferimento.
  
 ===== i18n ===== ===== i18n =====
Line 296: Line 309:
 </code> </code>
  
-Infine si registra la funzione handler. NOTA pare che l'evento ''rightclick'' non esista, ci si deve registrare per l'evento ''mousedown''quindi verificare quale pulsante lo ha scatenato:+ 
 +Infine si registra la funzione handler per l'evento. 
 + 
 +Per vedere gli eventi supportati dalla mappa basta vedere la proprietà **''map.events.eventTypes''**Stranamente l'evento **''rightclick''** esistema non si riesce ad agganciarlo. Per aggirare il problema ci si registra per l'evento **''mousedown''** nell'handler si verifica quale pulsante lo ha scatenato:
  
 <code javascript> <code javascript>
-function mouse_right_click() {+function mousedown_handler(e) { 
 +    if (OpenLayers.Event.isRightClick(e)) { 
 +        alert("mouse right click event!"); 
 +        OpenLayers.Event.stop(e); 
 +        return false; 
 +    }
 } }
  
-map.events.register('mousedown', map, mouse_right_click);+map.events.register('click', map, click_handler); 
 +map.events.register('mousedown', map, mousedown_handler);
 </code> </code>
 +
 +===== Problema con Layer.Markers e pop-up =====
 +
 +Se si disegna un layer di tipo **''OpenLayers.Layer.Markers()''** che contiene delle **''OpenLayers.Feature()''** con il relativo attributo **''popupClass''**, bisogna fare in modo che questi layer siano aggiunti alla mappa per ultimi, altrimenti si rischia che un altro layer (es. un **''OpenLayers.Layer.Vector()''**) aggiunto sopra intercetti il clik e impedisca la comparsa del popup.
 +
 +È possibile anche usare il metodo **''raiseLayer()''** per abbassare di livello un layer, in modo che venga messo in fondo e non intercetti il clik che fa apparire il popup:
 +
 +<code javascript>
 +map.addLayer(vectorLayer);
 +map.raiseLayer(vectorLayer, 2 - map.getNumLayers());
 +</code>
 +
 +Si decrementa di 2 per tenere in conto il layer stesso e un solo baselayer, di 3 se i baselayer sono due, ecc.
tecnica/gps_cartografia_gis/openlayers_tips.1311091547.txt.gz · Last modified: 2011/07/19 18:05 by niccolo