search.ch

Introduzione

map.search.ch API permette di integrare la mappa interattiva della Svizzera in una website oppure in un'applicazione web, con la possibilità di posizionare dei propri Points-of-Interest (POIs). Mediante la qui seguente documentazione di API, potrà acquisire familiarità e apprendere dagli esempi riportati.

Primi passi

La variante più semplice per integrare le mappe interattive è data dalla funzione "integrare mappa" a sinistra, a fianco della mappa normale. Essa può essere utilizzata anche da persone senza conoscenza di JavaScript.

Integrazione manuale

API e la presente documentazione è ideata per persone che hanno familiarità con JavaScript e con la programmazione secondo gli oggetti. Premesse necessarie sono anche le conoscenze basilari di HTML e CSS

Ai fini dell'integrazione della mappa è sufficiente caricare il nostro API-JavaScript e instanziare la classe map, indicando alcuni parametri. L'estratto della mappa viene collegato ad un container esistente (ad es., un <div>) e assume la sua dimensione e posizione nel documento. L'esempio qui di seguito riportato evidenzia una mappa di 500x400 pixel, con al centro Zurigo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>search.ch/map/ API Example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <script type="text/javascript" src="//search.ch/map/api/map.js"></script>
  <script type="text/javascript">
  //<![CDATA[

  var map = new SearchChMap({ center:"Zürich" });

  //]]>
  </script>
</head>
<body>
  <div id="mapcontainer" style="max-width:500px; height:400px; border:2px inset #ccc"></div>
</body>
</html>

L'esempio, spiegato passo per passo

Come prima cosa occorre caricare l'API-Script di map.search.ch. A titolo opzionale, tramite il parametro è possibile indicare anche la lingua (lang):

<script type="text/javascript" src="//search.ch/map/api/map.js?lang=it"></script>

In un proprio Script-Tag sarà instanziata la classe SearchChMap e legata al container "mapcontainer" (nome default), definito nel body della pagina HTML. In fase di instanziamento sarà anche indicato come parametro il centro della mappa (Zurigo):

<script type="text/javascript"> var map = new SearchChMap({ center:"Zürich" }); </script>

La mappa si avvia automaticamente, appena la pagina sarà stata completamente caricata. Naturalmente API offre anche altre funzioni per la configurazione e il pilotaggio della mappa. Tali funzioni sono documentate nel Riferimento di classe e sono descritte più dettagliatamente negli esempi.

Riferimento Geo

Per definire il centro della mappa e per posizionare dei propri POI, può utilizzare i seguenti modi di scrittura:

Esempi

Un modo semplice per integrare la mappa nella sua website è quello di scegliere un esempio riportato e di adattarlo alle sue esigenze. Gli esempi qui di seguito riportati descrivono solo la parte rilevante del JavaScript-Code e non mostrano più tutto il file HTML. Potrà tuttavia scaricare l'esempio di interesse tramite il link e adeguarla.

Mappa con elementi di pilotaggio

Elementi di pilotaggio come zoom, tipo di mappa o scala della mappa possono essere indicati come parametri al costruttore, o attivati/disattivati anche in riferimento al tempo di funzionamento tramite il metodo set().

var map = new SearchChMap({ center:[679520, 212273], controls:"type,zoom,ruler" });

// Hide map controls except ruler
function hideControls() {
  map.set({ controls:"ruler" });
}

// Show all map controls
function showControls() {
  map.set({ controls:"all" });
}

Prima viene creata una mappa con elementi di pilotaggio per zoom, tipo di mappa e scala della mappa. La funzione hideControls() disattiva tutti gli elementi, ad eccezione della scala della mappa, showControls() fa nuovamente apparire tutti gli elementi di pilotaggio disponibili.

Centro della mappa e animazione

Il centro della mappa può essere indicato anche in riferimento al tempo di funzionamento tramite il metodo set(). Il metodo go() muove la mappa in maniera animata verso il nuovo centro e verso il nuovo grado di zoom (optional).

var map = new SearchChMap({ controls:"all" });

// Set new center of the map
function gotoZuerich() {
  map.set({ center:"Zürich", zoomlevel:11 });
}

// Animated movement to Zürich-Seebach
function movetoSeebach() {
  map.go({ center:[683371,252535], zoomlevel:15 })
}

I valori valevoli per il parametro zoom sono riportati nel Riferimento di classe.

Visualizzazione di Points-of-Interest

map.search.ch dispone di numerosi POI, suddivisi in diversi gruppi. Tramite API, potrà visualizzare sulla mappa singole categorie o interi gruppi di POI. A tale scopo sono a disposizione i metodi per oggetto showPOIGroup() e hidePOIGroup().

var map = new SearchChMap({ container:"mapwidget", center:"Zürich,Niederdorfstr.10", poigroups:"verkehr" });

// Show POI layer with restaurants, bars and cafes
function showRestaurants() {
  map.showPOIGroup("restaurant,bar,cafe");
}

// Hide all public transport POIs
function hidePublicTransports() {
  map.hidePOIGroup("verkehr");
}

I livelli di POI preferiti possono essere attivati anche già nel costruttore, tramite il parametro poigroups come mostrato nell'esempio. Durante l'esecuzione possono essere attivate e disattivate a piacimento tutti i livelli voluti. La lista completa di tutte le categorie POI e i relativi raggruppamenti sono riportati nel Riferimento di classe.

Posizionare sulla mappa i propri simboli (POI)

API offre anche funzioni per indicare i propri Points-of-Interest sulla sua mappa. I simboli di questo tipo vengono instanziati come oggetto nella classe SearchChPOI (o una classe derivante) e aggiunti all'oggetto della mappa tramite il metodo per oggetti addPOI().

function info(html) {
  document.getElementById("info").innerHTML = html;
}

var map = new SearchChMap({ center:"Bern,Kramgasse", marker:false, poigroups:"-" });

p1 = new SearchChPOI({
  center:[601062,199596],
  title:"Point of Interest",
  html:"The mystical ghost house",
  icon:"p1.png"
});
p2 = new SearchChPOI({
  center:[600686,199650],
  title:"Sightseeing",
  html:"The famous <b>Zytglogge<\/b> tower",
  icon:"p2.png"
});
p3 = new SearchChPOI({
  center:[600500,199800],
  title:"Draggable",
  html:"Drag this POI wherever you want",
  icon:"p4.png",
  draggable:true
});
p1.addEventListener("popupopen",  function(e){ info("POI-Box popped up!"); });
p1.addEventListener("popupclose", function(e){ info(""); });
p3.addEventListener("dragstart",  function(e){ info("dragstart: " + e.mx + "," + e.my); });
p3.addEventListener("dragend",    function(e){ info("dragend: "   + e.mx + "," + e.my); });

map.addPOI(p1);
map.addPOI(p2);
map.addPOI(p3);

Centrare la mappa intorno i propri simboli

Se i propri simboli vengono posizionati sulla mappa è possibile avere la mappa di determinare automaticamente il livello di zoom e il centro per mostrare tutti i simboli non specificando center e zoom e aggiungendo centerpois:true.

var map = new SearchChMap({ centerpois:true, marker:false, poigroups:"-" });

// Add custom POIs, map will be centered around them
map.addPOI(new SearchChPOI({ center:"Förrlibuckstr. 62", title:"search.ch", html:"Office of search.ch", icon:"p1.png" }));
map.addPOI(new SearchChPOI({ center:"Zürich HB", title:"Zürich HB", html:"Zurich main station", icon:"p2.png" }));
map.addPOI(new SearchChPOI({ center:"Grossmünster Zürich", title:"Grossmünster", html:"Famous church in Zurich", icon:"p2.png" }));

Calcolo del percorso

La funzione di pianificazione dei percorsi di map.search.ch può essere utilizzata anche via API. Il percorso viene tracciato sulla mappa e vengono visualizzati la distanza e il tempo di viaggio. Per ottenere la descrizione del percorso occorre innanzitutto collegarsi direttamente a map.search.ch.

var map = new SearchChMap({ center:"Zürich,Förrlibuckstr. 62", type:"street" });

// Add event handler that gets the new properties after the map changed
map.addEventListener("change", function(e) {
  if (e.route && e.route != window.current_route) {  // Check if route info has changed
    var routeinfo = map.get('routeinfo');
    document.getElementById("info").innerHTML =
      "Drive: " + routeinfo.distance + ", ca. " + routeinfo.time +
      ', <a target="_top" href="' + map.getPermUrl('directions') + '">Directions<\/a>';
    document.getElementById("destination").value = map.get('from');
    window.current_route = e.route;
  }
});

// handler for the form submit action
function routeFormSubmit(form)
{
  if (form.elements.from.value)
    map.set({ from: form.elements.from.value, to: form.elements.to.value, routemode:form.elements.routemode.value });
  return false;
}

Il punto iniziale e il punto finale di un percorso vengono indicati al costruttore con i campi from e to o il metodo set(). Una vola caricato il percorso, questo potrà essere rilevato nell'evento change. Con get('routeinfo') vengono visualizzati dettagli quali il tempo di viaggio e la distanza. Per offrire un link alla descrizione del percorso, l'oggetto mappa fornisce con getPermUrl('directions') l'URL completo.

Lettura delle coordinate

L'API permette di leggere le coordinate svizzere in base alla posizione del mouse muovendo e facendo clic con il mouse. Tali coordinate vengono indicate anche nei campi mx e my dell'evento (mx=E, my=N).

var start, poi;
var map = new SearchChMap({ center:"Zürich,Rämistr.101", marker:false });
map.addPOI(poi = new SearchChPOI({ html:"Start", icon:"p1.png" }));
map.addEventListener("load", function(e) {
  if (e.mx)
    start = [e.mx, e.my];  // Set start first time map is ready
});
map.addEventListener("contextmenu", function(e) { // move start on right click or long press on touchscreens
  if (e.mx)
    poi.set({ center:(start = [e.mx, e.my]) });
});
map.addEventListener("mousemove", function(e) {
  if (start && e.mx) { // Check if coordinates provided
    var dx = start[0] - e.mx, dy = start[1] - e.my;
    document.getElementById("info").innerHTML =
      "Distanz vom Start (" + start + "): " + Math.round(Math.sqrt(dx*dx + dy*dy)) + " m";
  }
});

Ha voglia di saperne di più? Nel Riferimento di classe trova tutti i dettagli sulle funzioni di API.