Home > javascript > Open Layers: applicare stili agli elementi di layers vettoriali

Open Layers: applicare stili agli elementi di layers vettoriali

9 luglio 2011 No Comments

Con OpenLayers è possibile visualizzare overlays vettoriali sopra alle mappe per mostrare ad esempio informazioni aggiuntive di un punto / zona.

Ai vettori aggiunti è possibile applicare degli stili differenti (dimensioni, colori, icone, …) in base alle proprietà di ciascun oggetto (feature) tramite la classe OpenLayers.Rule() .
Un insieme di “features” sono descritte in formato GeoJSON nel seguente modo:

{	"type": "FeatureCollection",
	"features":
	[
		{
		"type":"Feature",
		"id":"OpenLayers.Feature.Vector_1",
		"properties":{
			"colore":"1"
		},
		"geometry":{
			"type":"Point",
			"coordinates":["13.38920500", "45.67558400"]
		},
		"crs":{
			"type":"name",
			"properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}
		}
	},
		{
		"type":"Feature",
		"id":"OpenLayers.Feature.Vector_2",
		"properties":{
			"colore":"2",
		},
		"geometry":{
			"type":"Point",
			"coordinates":["13.38921800", "45.67546900"]
		},
		"crs":{
			"type":"name",
			"properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}
		}
	},
		{
		"type":"Feature",
		"id":"OpenLayers.Feature.Vector_3",
		"properties":{
			"colore":"3",
		},
		"geometry":{
			"type":"Point",
			"coordinates":["13.38917800", "45.67540000"]
		},
		"crs":{
			"type":"name",
			"properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}
		}
	}
   ]
}

Ogni feature presenta una serie di parametri per identificare univocamente l’oggetto (id), la posizione (geometry) e  il sistema di riferimento (crs) , i quali vengono automaticamente interpretati da OpenLayers.
All’interno di  ”properties” è invece possibile definire una serie di parametri custom (nell’esempio c’è solo il colore ma se ne possono aggiungere altri in base alle necessità).

Nel codice seguente è possibile vedere come vengono definiti gli stili nel metodo addLayers() tramite la creazione di regole personalizzate in base al parametro “colore” delle features. Successivamente nel metodo showElements() le features vengono aggiunte al layer vettoriale.
E’ possibile visualizzare il codice completo nel codice sorgente della pagina DEMO.

function Mappa ( options ) {

	//codice INIZIALIZZAZIONE

	// World Geodetic System 1984 projection
	this.WGS84 = new OpenLayers.Projection("EPSG:4326");
	// WGS84 Google Mercator projection
	this.WGS84_google_mercator = new OpenLayers.Projection("EPSG:900913");
	//layers
	this.near_elements_layer = null;

	//codice AGGIUNTA MAPPE BASE

	/**
	* Aggiunge layer vettoriale
	*/
	this.addLayers = function(){
		//stile base dei punti vettoriali
		var style = new OpenLayers.Style({
			fillOpacity : 0.8,
			pointRadius : 5,
			strokeWidth : 0,
			graphicName : "circle",
			cursor: 'pointer'
		});
		//stili personalizzati in base alla proprietà "colore"
		var rA = new OpenLayers.Rule({
			filter: new OpenLayers.Filter.Comparison({
				property: "colore",type: OpenLayers.Filter.Comparison.EQUAL_TO,value: 1
			}),
			symbolizer: {fillColor: "#00ff00"}
		});
		var rB = new OpenLayers.Rule({
			filter: new OpenLayers.Filter.Comparison({
				property: "colore",type: OpenLayers.Filter.Comparison.EQUAL_TO,value: 2
			}),
			symbolizer: {fillColor: "#0000ff"}
		});
		var rC = new OpenLayers.Rule({
			filter: new OpenLayers.Filter.Comparison({
				property: "colore",type: OpenLayers.Filter.Comparison.EQUAL_TO,value: 3
			}),
			symbolizer: {fillColor: "#ff0000"}
		});
		var rD = new OpenLayers.Rule({
			filter: new OpenLayers.Filter.Comparison({
				property: "colore",type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,value: 4
			}),
			symbolizer: {fillColor: "#000000"}
		});

		style.addRules([rA,rB,rC,rD]);
		//creazione del layer
		this.near_elements_layer = new OpenLayers.Layer.Vector("Elementi vicini", {
			displayInLayerSwitcher:false,
			name:'near_elements_layer',
			projection: this.WGS84,
			styleMap: style //stili da applicare al layer
		});

		//aggiunge layer alla mappa
		this.map.addLayers([this.near_elements_layer]);
	}
	/**
	* Visualizzazione degli elementi
	*/
	this.showElements = function(){
		//ricava lista features da una textarea (possono essere ricavate anche tramite AJAX o altri metodi)
		var data = $('.input_data').val();
		$this = this;
		//eliminazione features aggiunte in precedenza (se presenti)
		$this.near_elements_layer.destroyFeatures();
		//inizializzazione del formato di lettura GeoJSON:
		//i punti della features sono in formato WGS84
		var geojson_format = new OpenLayers.Format.GeoJSON({
			'internalProjection': $this.map.baseLayer.projection,
			'externalProjection': $this.WGS84
		});
		//lettura delle features
		var features = geojson_format.read(data);
		//aggiunte degli elementi sul layer vettoriale
		if(features.length > 0){
			$this.near_elements_layer.addFeatures(features);
		}
	}

	//codice GESTIONE MAPPA
}

I tipi di comparazione previsti dai filtri sono:

  • OpenLayers.Filter.Comparison.EQUAL_TO = “==”;
  • OpenLayers.Filter.Comparison.NOT_EQUAL_TO = “!=”;
  • OpenLayers.Filter.Comparison.LESS_THAN = “<”;
  • OpenLayers.Filter.Comparison.GREATER_THAN = “>”;
  • OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = “<=”;
  • OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = “>=”;
  • OpenLayers.Filter.Comparison.BETWEEN = “..”;
  • OpenLayers.Filter.Comparison.LIKE = “~”;

 

Links:

Tags: javascript maps open layers webgis

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>