Serverseitiges JavaScript und GIS

Mit Node.js und npm die Welt beherrschen

Christian Mayer und Marc Jansen

FOSSGIS 2015, Münster, 12.03.2015

Gliederung

  • Über…
  • Node.js und Freunde
  • Beispiele und Highlights
  • Fazit

Christian Mayer

  • Softwareentwickler & -architekt
  • Vornehmlich im GIS-Bereich
  • Open Source Enthusiast
    • Kernentwickler GeoExt
    • OpenLayers, GeoTools, uvm.
  • Sprecher bei nat. und internat. Konferenzen (FOSS4G, FOSSGIS, SVG Open)
  • OSGeo Foundation Charter Member
meggsimum.de Logo

Marc Jansen

  • Seit 2007 Entwickler / Projektleiter bei terrestris
  • Kernentwickler und PSC Mitglied GeoExt
  • Kernentwickler OpenLayers
  • Buchautor "OpenLayers"
  • OSGeo Foundation Charter Member

terrestris

  • terrestris.de
  • OpenSource GIS aus Bonn
  • Entwicklung, Projekte & Support/Schulung
  • Beratung, Planung, Implementierung & Wartung

Über diesen Vortrag

  • Überblick serverseitiges JS
  • Beispiel und Module
  • Ziel: Interesse wecken
  • Komplettlösung aller Probleme
  • …aber das hatten Sie natürlich auch nicht erwartet 😄

Warum Node.js?

Warum nicht!

Node.js

A platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Quelle: https://www.openshift.com/products/technologies

Node.js

A platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Quelle: https://www.openshift.com/products/technologies

Node.js

  • Serverseitige JavaScript Plattform
  • Verarbeitung von großen Datenmengen durch nicht blockierendes IO-System
  • Event-basiert
  • Ideal für Webanwendungen
  • Open Source (MIT)
  • Aktuelle Version 0.12.0 (06.Feb.2015)

JavaScript…



…auf dem Server

Hello World


console.log("Hello, World");
                        

>> node hello-world.js
                        

>> Hello, World
                        

Node.js - Beispiel

Einfache HTTP-Schnittstelle (Port 8888)


// native dep
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {
    'Content-Type': 'text/html'
  });
  res.write('Hallo FOSSGIS 2015');
  res.end();
}).listen(8888);
                        
Simple Node.js Webserver

Installation


>> nvm ls-remote        # Welche Versionen gibt es?
>> nvm use v0.12.0      # Verwende nun v0.12.0
                        

npm

  • Paketmanager für JavaScript
  • Standard Paket-Repository für Node.js (Seit Node.js Version 0.6.3 Teil der Installation)
  • Einfache Installation von Software-Pakten
  • Automatische Auflösung von Abhängigkeiten
  • Defacto-Standard zur Modularisierung von JavaScript

Übersicht der npm-Registry

npm facts

  • ~ 130.000 Pakete (Anfang März 2015)
  • ~ 1.000.000.000 Downloads im vergangenen Monat (Feb. 2015)
  • ~ 6.400 Pakete für die Schlagwörter mapping, map,gis,geo,osm (Anfang März 2015)
  • u.a. auch OpenLayers und Leaflet
  • npm stellt seine eigenen Code auf npmjs.org bereit
http://www.modulecounts.com/

npm - Installation von Paketen


>> npm install package_name       # installiert lokal
                    

>> npm install ol-app-setup -g    # installiert global
                    

>> npm install                    # liest package.json aus
                    
weitere Informationen...

io.js

io.js

  • Fork von Node.js / npm kompatibel
  • Einige Kernentwickler ↠ io.js
  • Verschiedenste Gründe, u.a.
    • Open Governance Model
    • zu seltene Releases
    • persönliche Differenzen
  • Changes re-importierbar nach Node.js
  • Unbedingt im Auge behalten

Mit Node.js und npm die Welt beherrschen

pinky and the brain photo: Pinky and the Brain PinkyandtheBrain.jpg

turf.js

Bildquelle: http://www.macwright.org/presentations/turf-geodc/grass.jpg

turf.js

  • JS-Bibliothek zur Geodatenverarbeitung und für räumliche Analysen
  • Erschienen 2014
  • Neuentwicklung, kein Port von JTS
  • Native Unterstützung von GeoJSON
  • Nutzbar in Client UND Server (eine Codebasis)
  • Open Source (MIT)

>> npm install turf
                        

turf.js - Funktionen (Auszug)

  • Transformationen (Buffer, Merge, Union, ...)
  • Measurement (Area, Envelope, Distance, ...)
  • Aggregation (Sum, Average, Aggregate...)
  • Classification (Nearest, Reclass, ...)
  • Interpolation (TIN, Isolines, Triangle-Grid, ...)
  • uvm ...

// create a geojson point object by turf wrapper ...
var point1 = turf.point([7.8, 51.8]);
// ... and buffer it
var buffered = turf.buffer(point1, 100);
                        

Shapefile.js

  • Lesen und Schreiben von Shape-Dateien

>> npm install shapefile
                        

// 3rd party deps
var shapefile = require('shapefile');

// create a shapefile reader
var reader = shapefile.reader(
    'data/shapefile/bands.shp',
    {encoding: 'UTF-8'}
);
// read the features
reader.readHeader(function(error, header) {
    if (error) throw error;
    readFeature(reader);
});

/**
 * Reads a geojson representation of the shp features
 */
function readFeature(reader) {
    reader.readRecord(function(error, record) {
        if(record != shapefile.end) {
            console.log(record);
            readFeature(reader);
        }
    });
}
                        

proj4

  • Projektion / Transformation von Geodaten

>> npm install proj4
                        

// 3rd party deps
var proj4 = require('proj4');

// reproject a point
var projected = proj4('EPSG:4326', 'EPSG:900913', [2,5]);
console.log(projected);
                        

>> node proj4.js
                        

>> [ 222638.98158654713, 557305.2572745753 ]
                        

Web mapping Module

  • openlayers
  • leaflet + Plugins
  • d3 + Plugins
  • ol-app-setup
    
    >> npm install ol-app-setup -g
    >> ol-app-setup -t /tmp/foo -v ol3 -s
                                    
  • Zur Entwicklung an vielen Projekten gehört Node.js fest dazu
  • vgl. a. PostgreSQL: PL/v8

Was lernen wir daraus?

  • Node.js & npm sind eine wunderbare Kombination
  • …auch im GIS-Bereich
  • …mit Stärken und Schwächen (wie immer 😄)
  • …bei gleichzeitig unglaublichem Drive
  • …und riesiger Entwicklergrundgesamtheit
  • …also eine echte Alternative

Give it a try!


Es macht echt Spaß damit zu arbeiten

That's it


Fragen & Anmerkungen?


Impressum

Impressum

Autoren

Christian Mayer
meggsimum.de
Hauptstraße 165a
67125 Dannstadt-Schauernheim
chris@meggsimum.de
Marc Jansen
terrestris GmbH & Co. KG
Pützchens Chaussee 56
53227 Bonn
jansen@terrestris.de

Lizenz

Diese Folien sind unter CC BY-SA veröffentlicht.