GeoExt3
Universal WebGIS Applications
with OpenLayers 3 and ExtJS 6
Christian Mayer & Marc Jansen
FOSS4G 2016, Bonn, Germany, 2016-08-25
Outline
- Intro & meta
- GeoExt status
- Universal applications…
- … with GeoExt
- Examples
- Conclusion
Marc Jansen
- Since 2007 developer and project lead @ terrestris
- Core developer / PSC member GeoExt
- Core developer OpenLayers
- Author "OpenLayers" (German)
- Speaker & workshop instructor
national & international
- OSGeo Foundation Charter Member
terrestris
- terrestris.de
- Top-notch OpenSource GIS from Bonn, Germany
- Development, projects, support & teaching
- Consulting, implementation, planing & maintenance
Christian Mayer
- Geoinformatics engineer
- Software developer & -architect
- Core developer and PSC member GeoExt
- Speaker & trainer
national & international
- OSGeo Foundation Charter Member
meggsimum
- meggsimum.de
- Services around Open Source GIS, Webmapping & SDI
- Tailored WebGIS solutions
- Software concepts and development
- Geodata
- Consulting and trainings
GeoExt
- JavaScript framework for "Rich WebMapping Applications"
- Based on OpenLayers und ExtJS
- Extends ExtJS with spatial components
- Graphical components and data packages
- Open Source, © OSGeo
- Since March 2009 (>7.5 years)
Versions
GeoExt |
ExtJS |
OpenLayers |
1.1 |
3.x |
2.10 |
2.1 |
4.2.x / 5.1.x |
2.13.1 |
3 (master) |
6.x |
3.x |
A high-performance, feature-packed library for all your mapping
needs.
- Complete rewrite after v2.x
- Mobile from start
- Independent from …
- … device
- … browser
- … libraries
Merging ExtJS / Sencha Touch
- Toolkits classic & modern
- Build profiles
- Improved theming (fashion)
- Model-View-Controller & Model-View-ViewModel
Ext.Widget
(e. g. Ext.list.Tree
)
Goal
- One code base => multiple builds
- Less frictional losses
- Re-use of code
- UI (more or less) dependent from device
Ideally, the Universal aspect of the your application will contain
data, models, viewmodels, etc. You can also share controllers,
though, developers may need
to be creative in order to produce logic that can span
toolkits.
app.json & sencha
"builds": {
"classic": {
"toolkit": "classic",
"theme": "theme-triton"
},
"modern": {
"toolkit": "modern",
"theme": "theme-triton"
}
}
$ sencha app build modern
Profile detection in index.html
Ext.beforeLoad = function (tags) {
var s = location.search, // the query string (ex "?foo=1&bar")
profile;
// For testing look for "?classic" or "?modern" in the URL
// to override device detection default.
if (s.match(/\bclassic\b/)) {
profile = 'classic';
} else if (s.match(/\bmodern\b/)) {
profile = 'modern';
} else {
profile = tags.desktop ? 'classic' : 'modern';
// tag.phone, tags.cordova …
}
Ext.manifest = profile; // must match a build profile name
};
Universal applications
…with GeoExt
What does this mean for GeoExt?
- Correct inheritance of own classes
- Example:
GeoExt.component.Map
- Reutilization: all except
GeoExt.grid.column.Symbolizer
- Components, data package (models and stores), utilities & mixins
- Tree structures via models
(currently)
Not usable as package
"classpath": [
"app",
"${toolkit.name}/src",
"packages/remote/GeoExt/src/component",
"packages/remote/GeoExt/src/data",
"packages/remote/GeoExt/src/mixin",
"packages/remote/GeoExt/src/util"
]
Remove global "requires": [ "GeoExt" ]
!!!
Conclusion
- Huge potential
- Sophisticated detail development (framework / app)
- Some unexpected pitfalls
- Attractive outcome
- Currently some improvements are financed (BfS)
- More collaboration desired
- Lot of ideas / little time
- Sponsors? Developers?
Thank you
Questions & comments?
Imprint
Imprint
Authors
Marc Jansen
terrestris GmbH & Co. KG
Kölnstr. 99
53111 Bonn
Germany
jansen@terrestris.de
Christian Mayer
meggsimum
Hauptstraße 165a
67125 Dannstadt-Schauernheim
Germany
chris@meggsimum.de
License
The slides of this talk are licensed under CC BY-SA.
They are based on this
German
GeoExt3 talk of the same authors.
Slides,
PDF version,
git repository