SpatialBB – Spatial Hipster Javascript – Gis-faggruppemøte Bouvet



SpatialBB – Spatial Hipster Javascript – Gis-faggruppemøte Bouvet

0 1


SpatialBBPresentation

Presentation of Backbone.js and Leaflet and SpatialBB

On Github atlefren / SpatialBBPresentation

SpatialBB

Spatial Hipster Javascript

Gis-faggruppemøte Bouvet

Atle Frenvik Sveen, Bouvet ASA 54°23'55"S 3°24'5"E

Agenda

  • Backbone.js
  • Leaflet
  • SpatialBB
  • Eksempel
Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.

Som betyr?

  • MVC: Model, View og Collection
  • Strukturert Javascript
  • Separasjon av data og presentasjon
  • Enkelt å snakke med fornuftig API

Hvorfor backbone?

  • Lite (58kb)
  • Mye brukt
  • Stabilt
  • Ikke masete
  • Legger seg ikke opp i HTMLen din

Slutt på rot?

                        


var MyListView = Backbone.View.extend({
    initialize: function () {
        this.collection.on("add", this.modelAdded, this);
    },

    modelAdded: function (model) {
        this.$el.append(
            new MyModelView({"model": model}).render().$el
        );
    }
});

var MyModelView = Backbone.View.extend({
    tagName: "li",
    render: function () {
        this.$el.html(this.model.get("name"));
        return this;
    }
});

/*Create a collection*/
var markerCollection = new Backbone.Collection();

/*Create a listview*/
var view = new MyListView({
                            "el": $("#view"),
                            "collection": collection
});

collection.add([
                {"name": "Item 1},
                {"name": "Item 2}
]);
                        
                    

Andre alternativer

Se også

Nathaniel Schutta: JavaScript Libraries You Aren't Using...Yet (JavaZone 2012)
Leaflet is a modern open-source JavaScript library for mobile-friendly interactive maps. Weighing just about 28 KB of JS code, it has all the features most developers ever need for online maps.

Jaha?

  • Tenk Google Maps
  • ..eller OpenLayers

Kart med Popup

                        
var map = L.map('map').fitWorld();

L.tileLayer(
    'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: 'Map data © OpenStreetMap contributors.',
        maxZoom: 18
    }
).addTo(map);

L.marker([51.5, -0.09]).addTo(map)
    .bindPopup('A pretty CSS3 popup.  Easily customizable.')
    .openPopup();
                        
                    

Hvordan funker det?

  • Map-objekt lever i en div
  • Legger til layere (bakgrunnskart)
  • Legge til Markers
    • ... som har eventer

Under panseret

  • Oversette skjerm-koordinater til "verdenskoordinater"
  • Oversette verdenskoordinater til lengde-/breddegrad
  • Hente kart-tiles
  • Posisjonere markere

Du får ikke bakgrunnskart

.. men det er mange tile-tilbydere

  • Cloudmade
  • OpenStreetMap
  • kartverket
  • Lage egne (TileMill)

Tanke..

Er ikke .. Markers på kart .. mye av det samme som..Models i en collection?

Enter SpatialBB!

  • Microbibliotek som kombinerer Backbone.js og Leaflet
  • Påbegynnt på lørdag (!)
  • Startet for å teste javascript-testing
  • github.com/atlefren/SpatialBB

MarkerModel

                        
var model = new SpatialBB.MarkerModel({
                            "name": "Model 1",
                            "position": {"lon": 10, "lat": 60}
});

model.getMarker(); //returnerer en Leaflet-marker
                        
                    

MarkerCollection

                        
var model1 = new ns.MarkerModel({"position": {"lon": 10, "lat": 60}});
var model2 = new ns.MarkerModel({"position": {"lon": 11, "lat": 60}});
var collection = new ns.MarkerCollection();
collection.add([model1, model2]);
collection.getLayerGroup(); //en L.MarkerGroup som oppdateres når collection oppdateres
                        
                    

Eksempel

Mer avansert

Fikse http://www.bouvet.no/BouvetWEB/Om_Oss_Vaare_Kontorer.aspx

  • Hente modeller over REST
  • Templates med underscore
  • Forskjellige kart-tiles
  • interaksjon mellom view og kart

HTML

                        
<div class="main">
    <div id="map">map</div>
    <div id="offices"></div>
</div>

<script type="text/template" id="office_template">
    <strong><%=name%></strong><br />
    <%= street %><br />
    <% if(line2) {%> <%= line2 %><br /> <% } %>
    <%= zip %> <%= place %><br />
    Tlf: <%= tlf %><br />
    <% if(!line2) {%> <br /> <% } %>
</script>
                        
                    

JSON-data

Javascript - Objekter

Javascript - Init

Kart

  • Sette opp kart
  • Flere bakgrunnskart

Javascript

Bruke SpatialBB

  • Konvertere model og collection
  • Legge layerGroup til kart

Javascript - Spatial Objekter

Javascript - lasting

Interaktivitet

  • Zoom kart til det kontoret vi trykker på

Javascript - Views