Google
Geonames
Google
Børre Stenseth

Google maps

Hva

I denne modulen skal vi lage en enkel vevside som lar oss finne fram noe informasjon om land i verden. Utgangspunktet er data fra geonames [1] .

De dataene vi skal bruke er i json-format og de er referert i modulen [2] , og har adresse:
https://borres.hiof.no/wep/data/geografi/land.json.
Fila ser slik ut: land.json

Vi bruker GoogleMaps [3] . Merk at for å bruke Google Maps må du skaffe deg en ID som gjelder for et domene.

verden.html https://borres.hiof.no/wep/gog/maps/verden.html

Dette lar seg løse på mange måter. Jeg har valgt en enkel løsning der alle dataene, JSON-fila, lastes opp når siden lastes. Det vi si at vi skal kunne velge nye land uten å hente data fra tjeneren hver gang. Jeg bruker jQuery/AJAX til å hente data.

Javascriptbiblioteket til Google som er nødvendig for å sette opp kartet gjøres tilgjengelig med følgende script-element på siden:


<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=<my google key>&sensor=true">
</script>

Javascriptet

Javascriptet leser lista over land og plasserer en option for hvert land i listeboksen.

// array of countries, as from the JSON data
var countries;
//------------------
// when we select a country
function showmap()
{
    // unpack data from selected country
    var index=document.form1.ListBox1.value;
    // console.log(index);
    // capital,population,areaInSqKm,west,north,east,south
    document.getElementById('capital').innerHTML=
        countries[index].capital;
    document.getElementById('population').innerHTML=
        countries[index].population;
    document.getElementById('areaInSqKm').innerHTML=
        countries[index].areaInSqKm;
    document.getElementById('countryName').innerHTML=
        countries[index].countryName;
      
    var W=countries[index].west;
    var N=countries[index].north;    
    var E=countries[index].east;
    var S=countries[index].south;
    // make map in the  div with ID="map_canvas"
    map = new google.maps.Map(document.getElementById("map_canvas"),{
        mapTypeId: google.maps.MapTypeId.HYBRID
    });
    // limit the area shown to country box
    // implicitely produces zoom
    mbounds=new google.maps.LatLngBounds(new google.maps.LatLng(S,W),
                                         new google.maps.LatLng(N,E));
    map.fitBounds(mbounds);   
}
//------------------------------
// on page load, load data with jQuery / AJAX
function init(){
    $.ajax({
        url:'https://borres.hiof.no/wep/data/geografi/land.json',
        success:function(data)
        {
            // get the JSON-list
            countries=data.geonames;
            // sort alphabetically
            sortCountries();
            //when debugging:console.log(countries[1].countryName);
            // set up selection box with an option for each country
            var list=document.getElementById("ListBox1");
            var S="";
            for(var ix=0;ix < countries.length;ix++){
                S+="<option value="+ix+">"+
                   countries[ix].countryName+
                   "</option>\n";
            }
            list.innerHTML=S;
            // select Norway as a starter
            document.form1.ListBox1.selectedIndex=156;
            showmap();
        },
        error:function(data)
        {
            // we failed , tell it
            var elt=document.getElementById("all");
            elt.innerHTML="Fikk ikke tak i data";
        }
        });    
}
//---------------------------
// sort alphabetically on countryName
function sortCountries(){
    countries.sort(
        function(a, b){
            if (a.countryName < b.countryName)
                return -1;
            return 1;
        }
    );
}

Eller du kan se et eksempel der google-maps, ammen med noen andre komponenter, er brukt til vise plasseruing av noen fotballklubber i Europa

Referanser
  1. Geonames GeoNames www.geonames.org/ 14-03-2010
  1. datasett Borres borres.hiof.no/wep/data/ 10-10-2014
  1. Google Maps API Google developers.google.com/maps/documentation/javascript/ 14-10-204