Compare commits
1 Commits
v3.2.0
...
v3.1.0-pre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d12d2734c0 |
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"-W030": true,
|
||||
"-W083": true,
|
||||
"-W069": true
|
||||
"-W030": true,
|
||||
"-W083": true
|
||||
}
|
||||
|
||||
58
AUTHORS.md
Normal file
58
AUTHORS.md
Normal file
@@ -0,0 +1,58 @@
|
||||
OpenLayers contributors:
|
||||
|
||||
* Antoine Abt
|
||||
* Mike Adair
|
||||
* Jeff Adams
|
||||
* Seb Benthall
|
||||
* Bruno Binet
|
||||
* Stéphane Brunner
|
||||
* Howard Butler
|
||||
* Bertil Chaupis
|
||||
* John Cole
|
||||
* Tim Coulter
|
||||
* Robert Coup
|
||||
* Jeff Dege
|
||||
* Roald de Wit
|
||||
* Schuyler Erle
|
||||
* Christian López Espínola
|
||||
* John Frank
|
||||
* Sean Gilles
|
||||
* Pierre Giraud
|
||||
* Ivan Grcic
|
||||
* Andreas Hocevar
|
||||
* Marc Jansen
|
||||
* Ian Johnson
|
||||
* Frédéric Junod
|
||||
* Eric Lemoine
|
||||
* Philip Lindsay
|
||||
* Martijn van Oosterhout
|
||||
* David Overstrom
|
||||
* Tom Payne
|
||||
* Corey Puffault
|
||||
* Peter William Robins
|
||||
* Gregers Rygg
|
||||
* Tim Schaub
|
||||
* Christopher Schmidt
|
||||
* Tobias Schwinger
|
||||
* Cameron Shorter
|
||||
* Pedro Simonetti
|
||||
* Paul Spencer
|
||||
* Paul Smith
|
||||
* Glen Stampoultzis
|
||||
* James Stembridge
|
||||
* Erik Uzureau
|
||||
* Bart van den Eijnden
|
||||
* Ivan Willig
|
||||
* Thomas Wood
|
||||
* Bill Woodall
|
||||
* Steve Woodbridge
|
||||
* David Zwarg
|
||||
|
||||
Some portions of OpenLayers are used under the Apache 2.0 license, available
|
||||
in doc/licenses/APACHE-2.0.txt.
|
||||
|
||||
Some portions of OpenLayers are used under the MIT license, availabie in
|
||||
doc/licenses/MIT-LICENSE.txt.
|
||||
|
||||
Some portions of OpenLayers are Copyright 2001 Robert Penner, and are used
|
||||
under the BSD license, available in doc/licenses/BSD-LICENSE.txt
|
||||
@@ -42,7 +42,7 @@ as described below.
|
||||
The minimum requirements are:
|
||||
|
||||
* Git
|
||||
* [Node.js](http://nodejs.org/) (0.10.x or higher)
|
||||
* [Node.js](http://nodejs.org/)
|
||||
* Python 2.6 or 2.7 with a couple of extra modules (see below)
|
||||
* Java 7 (JRE and JDK)
|
||||
|
||||
@@ -132,7 +132,7 @@ To run the tests on the console (headless testing with PhantomJS) use the `test`
|
||||
|
||||
$ ./build.py test
|
||||
|
||||
See also the test-specific [README](../master/test/README.md).
|
||||
See also the test-specific [README](../blob/master/test/README.md).
|
||||
|
||||
## Running the integration tests
|
||||
|
||||
@@ -239,14 +239,6 @@ style of the existing OpenLayers 3 code, which includes:
|
||||
|
||||
* Do not use assignments inside expressions.
|
||||
|
||||
* Avoid the use of `goog.array.clone` with arrays (use slice instead).
|
||||
|
||||
* Use `array.length = 0` instead of `goog.array.clear`.
|
||||
|
||||
* Use bracket notation instead of `goog.object.set` and `goog.object.get` (with
|
||||
two arguments).
|
||||
|
||||
* Use uppercase for `@const` variables.
|
||||
|
||||
### Pass the integration tests run automatically by the Travis CI system
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
Copyright 2005-2014 OpenLayers Contributors. All rights reserved.
|
||||
Copyright 2005-2014 OpenLayers Contributors. All rights reserved. See
|
||||
AUTHORS.md for full list.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# OpenLayers 3
|
||||
|
||||
[](http://travis-ci.org/#!/openlayers/ol3)
|
||||
[](http://travis-ci.org/#!/openlayers/ol3)
|
||||
|
||||
Welcome to [OpenLayers 3](http://openlayers.org/)!
|
||||
|
||||
|
||||
16
build.py
16
build.py
@@ -172,8 +172,7 @@ virtual('ci', 'lint', 'build', 'test',
|
||||
'build/examples/all.combined.js', 'check-examples', 'apidoc')
|
||||
|
||||
|
||||
virtual('build', 'build/ol.css', 'build/ol.js', 'build/ol-debug.js',
|
||||
'build/ol.js.map')
|
||||
virtual('build', 'build/ol.css', 'build/ol.js', 'build/ol-debug.js')
|
||||
|
||||
|
||||
virtual('check', 'lint', 'build/ol.js', 'test')
|
||||
@@ -193,21 +192,12 @@ def build_ol_css(t):
|
||||
t.output('%(CLEANCSS)s', 'css/ol.css')
|
||||
|
||||
|
||||
def _build_js(t):
|
||||
t.run('node', 'tasks/build.js', 'config/ol.json', 'build/ol.js')
|
||||
|
||||
|
||||
@target('build/ol.js', SRC, SHADER_SRC, 'config/ol.json', NPM_INSTALL)
|
||||
def build_ol_js(t):
|
||||
_build_js(t)
|
||||
def build_ol_new_js(t):
|
||||
t.run('node', 'tasks/build.js', 'config/ol.json', 'build/ol.js')
|
||||
report_sizes(t)
|
||||
|
||||
|
||||
@target('build/ol.js.map', SRC, SHADER_SRC, 'config/ol.json', NPM_INSTALL)
|
||||
def build_ol_js_map(t):
|
||||
_build_js(t)
|
||||
|
||||
|
||||
@target('build/ol-debug.js', SRC, SHADER_SRC, 'config/ol-debug.json',
|
||||
NPM_INSTALL)
|
||||
def build_ol_debug_js(t):
|
||||
|
||||
@@ -1,234 +0,0 @@
|
||||
# 3.1.0
|
||||
|
||||
## Summary
|
||||
|
||||
The 3.1.0 release includes a whopping 214 merged pull requests since 3.0.0. Of note, the WebGL renderer [now supports point rendering](https://github.com/openlayers/ol3/pull/2967). You can use [UTFGrids for interaction](https://github.com/openlayers/ol3/pull/3015)! Styles can now specify [alternate geometries for rendering](https://github.com/openlayers/ol3/pull/3010). Library builds [can now be loaded](https://github.com/openlayers/ol3/pull/3039) with module loaders like Browserify or RequireJS. You can now symbolize point features with stars, squares, enneadecagons, or [any other regular(ish) polygon](https://github.com/openlayers/ol3/pull/2706). See the full list of [changes](#changes) below.
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
The 3.1.0 release maintains a backwards-compatible API with the 3.0.0 release, so upgrades should be painless. Some special considerations below.
|
||||
|
||||
* If you are using a `ol.source.ImageStatic`, you no longer need to provide an `imageSize` option if you don't want any special scaling on your image (see [#2796](https://github.com/openlayers/ol3/pull/2796)).
|
||||
|
||||
* Instead of calling `obj.unByKey(key)` you can now call `ol.Observable.unByKey(key)` (see [#2794](https://github.com/openlayers/ol3/pull/2794)).
|
||||
|
||||
* If you were using `format.writeFeatures(features)`, note that this method returns a string for all feature formats. We considered the previous behavior a bug (see [#3003](https://github.com/openlayers/ol3/pull/3003)).
|
||||
|
||||
* The `obj.dispatchChangeEvent()` method is now spelled `obj.changed()`. This method is still unstable (see [#2684](https://github.com/openlayers/ol3/pull/2684)).
|
||||
|
||||
## Changes
|
||||
|
||||
* [#3076](https://github.com/openlayers/ol3/pull/3076) - Add script to standardize changelog creation. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3074](https://github.com/openlayers/ol3/pull/3074) - Remove misplaced function annotation. ([@fredj](https://github.com/fredj))
|
||||
* [#3075](https://github.com/openlayers/ol3/pull/3075) - Remove unneeded undefined from ol.proj.ProjectionLike definitions (r=@tschaub) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3071](https://github.com/openlayers/ol3/pull/3071) - Add task for publishing to npm. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3070](https://github.com/openlayers/ol3/pull/3070) - Define goog and assign to global when generating UMD debug builds. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3068](https://github.com/openlayers/ol3/pull/3068) - Update pre-release version. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3039](https://github.com/openlayers/ol3/pull/3039) - Support for UMD builds. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3038](https://github.com/openlayers/ol3/pull/3038) - Update attribution CSS #2803 ([@acanimal](https://github.com/acanimal))
|
||||
* [#3061](https://github.com/openlayers/ol3/pull/3061) - Add a renderBuffer option to ol.layer.Vector ([@elemoine](https://github.com/elemoine))
|
||||
* [#3048](https://github.com/openlayers/ol3/pull/3048) - Add a drag-features example ([@elemoine](https://github.com/elemoine))
|
||||
* [#3060](https://github.com/openlayers/ol3/pull/3060) - Update closure-library version ([@fredj](https://github.com/fredj))
|
||||
* [#3058](https://github.com/openlayers/ol3/pull/3058) - Use an API function to extend the extent ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3010](https://github.com/openlayers/ol3/pull/3010) - Allow styles to override feature geometries ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3056](https://github.com/openlayers/ol3/pull/3056) - Reuse previousExtent_ local variable ([@fredj](https://github.com/fredj))
|
||||
* [#3055](https://github.com/openlayers/ol3/pull/3055) - ol.tilecoord.createOrUpdate: add 'opt_' prefix to optional param ([@fredj](https://github.com/fredj))
|
||||
* [#3044](https://github.com/openlayers/ol3/pull/3044) - Mark Image style constructor properties `@api` ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3052](https://github.com/openlayers/ol3/pull/3052) - Add a testcase for parsing GML feature with only boundedBy ([@bartvde](https://github.com/bartvde))
|
||||
* [#3051](https://github.com/openlayers/ol3/pull/3051) - Remove // NOCOMPILE from vector-wfs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2699](https://github.com/openlayers/ol3/pull/2699) - No need for featureNS and featureType to be quoted ([@bartvde](https://github.com/bartvde))
|
||||
* [#3047](https://github.com/openlayers/ol3/pull/3047) - Move description above annotation to avoid JSDoc warnings. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2996](https://github.com/openlayers/ol3/pull/2996) - Add getter functions for points and angle in ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#3046](https://github.com/openlayers/ol3/pull/3046) - Need exportable constructor for constructor options in olx ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3043](https://github.com/openlayers/ol3/pull/3043) - Use // NOCOMPILE for vector-wfs ([@elemoine](https://github.com/elemoine))
|
||||
* [#3042](https://github.com/openlayers/ol3/pull/3042) - Print example name in check-examples exception ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3032](https://github.com/openlayers/ol3/pull/3032) - Extension points for custom controls and interactions ([@elemoine](https://github.com/elemoine))
|
||||
* [#3033](https://github.com/openlayers/ol3/pull/3033) - Allow custom mousemove conditions for Select interaction ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3040](https://github.com/openlayers/ol3/pull/3040) - Transform the coordinates in place ([@fredj](https://github.com/fredj))
|
||||
* [#3036](https://github.com/openlayers/ol3/pull/3036) - Respect geometry stride in modify interaction ([@tonio](https://github.com/tonio))
|
||||
* [#3020](https://github.com/openlayers/ol3/pull/3020) - Correct error message from generate-info.js. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3037](https://github.com/openlayers/ol3/pull/3037) - Implement rotation for ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#3015](https://github.com/openlayers/ol3/pull/3015) - UTFGrid Support ([@klokantech](https://github.com/klokantech))
|
||||
* [#3012](https://github.com/openlayers/ol3/pull/3012) - Failing tests in IE9 ([@bartvde](https://github.com/bartvde))
|
||||
* [#3029](https://github.com/openlayers/ol3/pull/3029) - Update closure compiler and library ([@fredj](https://github.com/fredj))
|
||||
* [#3031](https://github.com/openlayers/ol3/pull/3031) - Add missing maxZoom property in olx.view.FitGeometryOptions ([@fredj](https://github.com/fredj))
|
||||
* [#3028](https://github.com/openlayers/ol3/pull/3028) - ol.format.WFS cleanup ([@fredj](https://github.com/fredj))
|
||||
* [#3024](https://github.com/openlayers/ol3/pull/3024) - Add missing gmlFormat to olx.format.WFSOptions ([@fredj](https://github.com/fredj))
|
||||
* [#3023](https://github.com/openlayers/ol3/pull/3023) - Change loader function return type ([@fredj](https://github.com/fredj))
|
||||
* [#3021](https://github.com/openlayers/ol3/pull/3021) - Add missing properties in olx.control.AttributionOptions typedef ([@fredj](https://github.com/fredj))
|
||||
* [#3013](https://github.com/openlayers/ol3/pull/3013) - Improve vector source clear() performance ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3017](https://github.com/openlayers/ol3/pull/3017) - Use writeFeatures instead of writeFeaturesNode in GPX and KML example (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3014](https://github.com/openlayers/ol3/pull/3014) - Simplify hit detection code ([@elemoine](https://github.com/elemoine))
|
||||
* [#3006](https://github.com/openlayers/ol3/pull/3006) - gml3.js and gml2.js don't follow file naming conventions ([@bartvde](https://github.com/bartvde))
|
||||
* [#3003](https://github.com/openlayers/ol3/pull/3003) - The writeFeatures method should always return a string (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3011](https://github.com/openlayers/ol3/pull/3011) - opt_options may not be defined, use options ([@pagameba](https://github.com/pagameba))
|
||||
* [#3009](https://github.com/openlayers/ol3/pull/3009) - Fix hit detection bug ([@elemoine](https://github.com/elemoine))
|
||||
* [#3002](https://github.com/openlayers/ol3/pull/3002) - Passing options to RegularShape is mandatory ([@elemoine](https://github.com/elemoine))
|
||||
* [#2967](https://github.com/openlayers/ol3/pull/2967) - Add support for drawing points with WebGL ([@camptocamp](https://github.com/camptocamp))
|
||||
* [#2701](https://github.com/openlayers/ol3/pull/2701) - Writing GeoJSON does not respect the feature's geometryName ([@bartvde](https://github.com/bartvde))
|
||||
* [#3000](https://github.com/openlayers/ol3/pull/3000) - Explain that return of ol.color.asArray should not be modified ([@bartvde](https://github.com/bartvde))
|
||||
* [#2997](https://github.com/openlayers/ol3/pull/2997) - Use new demo GeoServer location ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2976](https://github.com/openlayers/ol3/pull/2976) - Add an example to show off ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#2992](https://github.com/openlayers/ol3/pull/2992) - Add support for finding features at a given coordinates for vector tiles - fixes ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2987](https://github.com/openlayers/ol3/pull/2987) - Image layer renderers use source projection if given and equivalent ([@kartverket](https://github.com/kartverket))
|
||||
* [#2975](https://github.com/openlayers/ol3/pull/2975) - Use offsetX and offsetY if available ([@fredj](https://github.com/fredj))
|
||||
* [#2973](https://github.com/openlayers/ol3/pull/2973) - Making GetTileCoordFor methods public avaible ([@s093294](https://github.com/s093294))
|
||||
* [#2986](https://github.com/openlayers/ol3/pull/2986) - Add support for finding features at a given coordinates for vector tiles ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2937](https://github.com/openlayers/ol3/pull/2937) - Clip layer rendering to limited extent. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2971](https://github.com/openlayers/ol3/pull/2971) - Two ol.source.TileVector fixes ([@elemoine](https://github.com/elemoine))
|
||||
* [#2988](https://github.com/openlayers/ol3/pull/2988) - Correct olx.style.RegularShapeOptions definition (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2981](https://github.com/openlayers/ol3/pull/2981) - Use lineDash in ol.style.Circle's and ol.style.RegularShape's stroke (r=@fredj,@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2982](https://github.com/openlayers/ol3/pull/2982) - Allow radius1 as an alias for radius in ol.style.RegularShape ([@bartvde](https://github.com/bartvde))
|
||||
* [#2980](https://github.com/openlayers/ol3/pull/2980) - Export ol.source.TileVector#getFeatures in built mode ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2979](https://github.com/openlayers/ol3/pull/2979) - Support OGC srs urns without an EPSG database version ([@bartvde](https://github.com/bartvde))
|
||||
* [#2978](https://github.com/openlayers/ol3/pull/2978) - Fix zoom levels for the MapQuest Street layer ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2889](https://github.com/openlayers/ol3/pull/2889) - Add GetFeatureInfo format ([@fgravin](https://github.com/fgravin))
|
||||
* [#2965](https://github.com/openlayers/ol3/pull/2965) - Fix pan with select interaction in mousemove mode. ([@tonio](https://github.com/tonio))
|
||||
* [#2960](https://github.com/openlayers/ol3/pull/2960) - LayerGroup extent should be used if extent not set on child layer ([@bartvde](https://github.com/bartvde))
|
||||
* [#2956](https://github.com/openlayers/ol3/pull/2956) - Revert "Remove mousewheel event name workaround" ([@fredj](https://github.com/fredj))
|
||||
* [#2959](https://github.com/openlayers/ol3/pull/2959) - Fix typo in selector ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2895](https://github.com/openlayers/ol3/pull/2895) - Move font-family customization to layout.css ([@fredj](https://github.com/fredj))
|
||||
* [#2896](https://github.com/openlayers/ol3/pull/2896) - Remove duplicated style parameter ([@kalinbas](https://github.com/kalinbas))
|
||||
* [#2938](https://github.com/openlayers/ol3/pull/2938) - Additional image static docs. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2939](https://github.com/openlayers/ol3/pull/2939) - Make stability checkbox sticky. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2949](https://github.com/openlayers/ol3/pull/2949) - Add ol.ext to hosted dir ([@elemoine](https://github.com/elemoine))
|
||||
* [#2943](https://github.com/openlayers/ol3/pull/2943) - Mark applyTransform api stable ([@fredj](https://github.com/fredj))
|
||||
* [#2936](https://github.com/openlayers/ol3/pull/2936) - Fix unselection of selected features ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2935](https://github.com/openlayers/ol3/pull/2935) - Fix jsdoc comment ([@geosense](https://github.com/geosense))
|
||||
* [#2933](https://github.com/openlayers/ol3/pull/2933) - Fix compile warning ([@elemoine](https://github.com/elemoine))
|
||||
* [#2931](https://github.com/openlayers/ol3/pull/2931) - Improvement to view docs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2906](https://github.com/openlayers/ol3/pull/2906) - Assume a latitude, longitude order for Polyline format ([@fredj](https://github.com/fredj))
|
||||
* [#2927](https://github.com/openlayers/ol3/pull/2927) - Make it possible to programmatically finish drawing ([@elemoine](https://github.com/elemoine))
|
||||
* [#2928](https://github.com/openlayers/ol3/pull/2928) - Do not rename handleMapBrowserEvent internally ([@elemoine](https://github.com/elemoine))
|
||||
* [#2924](https://github.com/openlayers/ol3/pull/2924) - Readability rearangement in canvasmaprenderer.js ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2911](https://github.com/openlayers/ol3/pull/2911) - List events fired in the navigation. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2921](https://github.com/openlayers/ol3/pull/2921) - Small feature overlay optimization ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2897](https://github.com/openlayers/ol3/pull/2897) - Remove pointerup listener on controls ([@fredj](https://github.com/fredj))
|
||||
* [#2912](https://github.com/openlayers/ol3/pull/2912) - jQuery externs update ([@fredj](https://github.com/fredj))
|
||||
* [#2888](https://github.com/openlayers/ol3/pull/2888) - Element boundedBy must not be set as geometry field on GML reading ([@fgravin](https://github.com/fgravin))
|
||||
* [#2903](https://github.com/openlayers/ol3/pull/2903) - Improved docs for icon options ([@elemoine](https://github.com/elemoine))
|
||||
* [#2900](https://github.com/openlayers/ol3/pull/2900) - Allow build.js task to add header. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2893](https://github.com/openlayers/ol3/pull/2893) - Don't pass an object to goog.dom.createDom for the class name ([@fredj](https://github.com/fredj))
|
||||
* [#2781](https://github.com/openlayers/ol3/pull/2781) - Use a standard title attribute for the control buttons ([@fredj](https://github.com/fredj))
|
||||
* [#2852](https://github.com/openlayers/ol3/pull/2852) - Add missing space between class names ([@fredj](https://github.com/fredj))
|
||||
* [#2891](https://github.com/openlayers/ol3/pull/2891) - Introduce a load function for image sources ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2885](https://github.com/openlayers/ol3/pull/2885) - Add wrapX option to TileJSON source ([@elemoine](https://github.com/elemoine))
|
||||
* [#2890](https://github.com/openlayers/ol3/pull/2890) - Use correct layer property names ([@elemoine](https://github.com/elemoine))
|
||||
* [#2887](https://github.com/openlayers/ol3/pull/2887) - Explicitly pass coordinate dimension before transforming. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2886](https://github.com/openlayers/ol3/pull/2886) - Use ternary notation ([@elemoine](https://github.com/elemoine))
|
||||
* [#2869](https://github.com/openlayers/ol3/pull/2869) - Export useful xml functions ([@tonio](https://github.com/tonio))
|
||||
* [#2884](https://github.com/openlayers/ol3/pull/2884) - Make WKT methods throw errors instead of calling a method that throws. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2746](https://github.com/openlayers/ol3/pull/2746) - Add versioning for GML format ([@fgravin](https://github.com/fgravin))
|
||||
* [#2882](https://github.com/openlayers/ol3/pull/2882) - Allow olx.source.WMTSOptions#requestEncoding to be a string ([@fredj](https://github.com/fredj))
|
||||
* [#2881](https://github.com/openlayers/ol3/pull/2881) - Add default requestEncoding in documentation ([@fredj](https://github.com/fredj))
|
||||
* [#2877](https://github.com/openlayers/ol3/pull/2877) - Remove FIXME in src/ol/structs/rbush.js ([@fredj](https://github.com/fredj))
|
||||
* [#2870](https://github.com/openlayers/ol3/pull/2870) - Use bulk-insertion for addFeatures ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#2856](https://github.com/openlayers/ol3/pull/2856) - Allow layer source to be set. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2875](https://github.com/openlayers/ol3/pull/2875) - Avoid modifying `map.logos_` with each frame. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2874](https://github.com/openlayers/ol3/pull/2874) - Avoid shrinking logos. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2872](https://github.com/openlayers/ol3/pull/2872) - Remove the beforepropertychange event from ol.Object ([@fredj](https://github.com/fredj))
|
||||
* [#2868](https://github.com/openlayers/ol3/pull/2868) - Remove doc about dispatching events. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2871](https://github.com/openlayers/ol3/pull/2871) - Make `npm install` a dependency of node based targets. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2867](https://github.com/openlayers/ol3/pull/2867) - Support for importing CommonJS style modules (like rbush). ([@openlayers](https://github.com/openlayers))
|
||||
* [#2865](https://github.com/openlayers/ol3/pull/2865) - Add old value to property change events ([@elemoine](https://github.com/elemoine))
|
||||
* [#2866](https://github.com/openlayers/ol3/pull/2866) - Cluster source calls loadFeatures on vector source ([@elemoine](https://github.com/elemoine))
|
||||
* [#2864](https://github.com/openlayers/ol3/pull/2864) - Avoid mixed content in Bing Maps (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2855](https://github.com/openlayers/ol3/pull/2855) - Move touchstart preventDefault to ol.renderer.dom.Map ([@fredj](https://github.com/fredj))
|
||||
* [#2690](https://github.com/openlayers/ol3/pull/2690) - Vector rendering with the DOM renderer ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2859](https://github.com/openlayers/ol3/pull/2859) - Document exportable vector source symbols. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2857](https://github.com/openlayers/ol3/pull/2857) - Update the OSM attribution. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2847](https://github.com/openlayers/ol3/pull/2847) - Constrain center in zoomify example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2838](https://github.com/openlayers/ol3/pull/2838) - ol.source.WMTS now passes tileClass option to ol.source.TileImage ([@mike-mcgann](https://github.com/mike-mcgann))
|
||||
* [#2821](https://github.com/openlayers/ol3/pull/2821) - Add ol.geom.Polygon.fromExtent ([@elemoine](https://github.com/elemoine))
|
||||
* [#2835](https://github.com/openlayers/ol3/pull/2835) - Use correct Stamen URL for SSL. ([@j16sdiz](https://github.com/j16sdiz))
|
||||
* [#2839](https://github.com/openlayers/ol3/pull/2839) - Dependency updates and new package name. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2840](https://github.com/openlayers/ol3/pull/2840) - Fewer point resolution tests. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2836](https://github.com/openlayers/ol3/pull/2836) - Give priority to feature's style instead of source's style ([@oterral](https://github.com/oterral))
|
||||
* [#2834](https://github.com/openlayers/ol3/pull/2834) - Use ADVANCED instead of ADVANCED_OPTIMIZATIONS ([@fredj](https://github.com/fredj))
|
||||
* [#2833](https://github.com/openlayers/ol3/pull/2833) - Avoid too many files open with graceful-fs@3.0.3. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2829](https://github.com/openlayers/ol3/pull/2829) - Zoom slider refactor. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2757](https://github.com/openlayers/ol3/pull/2757) - Clear the canvas on layer extent changes. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2796](https://github.com/openlayers/ol3/pull/2796) - Determine image size on load. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2825](https://github.com/openlayers/ol3/pull/2825) - Change comments for examples_star_json build target ([@elemoine](https://github.com/elemoine))
|
||||
* [#2822](https://github.com/openlayers/ol3/pull/2822) - Remove obsolete comment ([@gingerik](https://github.com/gingerik))
|
||||
* [#2769](https://github.com/openlayers/ol3/pull/2769) - OverviewMap control ([@adube](https://github.com/adube))
|
||||
* [#2820](https://github.com/openlayers/ol3/pull/2820) - Add parsing of LabelStyle in KML format ([@oterral](https://github.com/oterral))
|
||||
* [#2819](https://github.com/openlayers/ol3/pull/2819) - Improvements to the xyz-esri-4326-512 example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2743](https://github.com/openlayers/ol3/pull/2743) - Handle ol.interaction.Draw activation/deactivation ([@elemoine](https://github.com/elemoine))
|
||||
* [#2816](https://github.com/openlayers/ol3/pull/2816) - Exit on check-examples failure ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2794](https://github.com/openlayers/ol3/pull/2794) - Add ol.Observable.unByKey ([@elemoine](https://github.com/elemoine))
|
||||
* [#2815](https://github.com/openlayers/ol3/pull/2815) - Fix jquery.min.js path in xyz-esri-4326-512 example ([@fredj](https://github.com/fredj))
|
||||
* [#2756](https://github.com/openlayers/ol3/pull/2756) - Add an example for using an Esri 512x512 tile server in EPSG:4326 (r=@elemoine) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2814](https://github.com/openlayers/ol3/pull/2814) - Add missing whitespaces in CSS calc ([@fredj](https://github.com/fredj))
|
||||
* [#2811](https://github.com/openlayers/ol3/pull/2811) - Remove defaultProjection and object from typedef ([@fredj](https://github.com/fredj))
|
||||
* [#2779](https://github.com/openlayers/ol3/pull/2779) - Update jQuery to 1.9.1 ([@fredj](https://github.com/fredj))
|
||||
* [#2810](https://github.com/openlayers/ol3/pull/2810) - Remove unused properties from olx.source.TileVectorOptions ([@pagameba](https://github.com/pagameba))
|
||||
* [#2808](https://github.com/openlayers/ol3/pull/2808) - Remove reprojectTo option from olx.source.OSMXMLOptions ([@fredj](https://github.com/fredj))
|
||||
* [#2809](https://github.com/openlayers/ol3/pull/2809) - Miscellaneous controls cleanups ([@fredj](https://github.com/fredj))
|
||||
* [#2805](https://github.com/openlayers/ol3/pull/2805) - Enable subclassing Interaction in public API ([@sweco-sebhar](https://github.com/sweco-sebhar))
|
||||
* [#2798](https://github.com/openlayers/ol3/pull/2798) - Update closure-util to version 1.0.0 ([@fredj](https://github.com/fredj))
|
||||
* [#2785](https://github.com/openlayers/ol3/pull/2785) - Use goog.* types in externs ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2795](https://github.com/openlayers/ol3/pull/2795) - Externs ([@gingerik](https://github.com/gingerik))
|
||||
* [#2792](https://github.com/openlayers/ol3/pull/2792) - Use valid mediatype for GPX export. ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#2784](https://github.com/openlayers/ol3/pull/2784) - Add 'tooltip'-tag to KML example. ([@marcjansen](https://github.com/marcjansen))
|
||||
* [#2782](https://github.com/openlayers/ol3/pull/2782) - Hide the rotate control when the rotation is 0 ([@fredj](https://github.com/fredj))
|
||||
* [#2774](https://github.com/openlayers/ol3/pull/2774) - Remove unused distinctFeatures object in ol.interaction.Modify#handlePointerDown ([@fredj](https://github.com/fredj))
|
||||
* [#2771](https://github.com/openlayers/ol3/pull/2771) - Allow package to be published in npm registry. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2773](https://github.com/openlayers/ol3/pull/2773) - Type-related changes to ol.style.Image ([@elemoine](https://github.com/elemoine))
|
||||
* [#2751](https://github.com/openlayers/ol3/pull/2751) - Export constructors and options of ol.source.Source children ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2772](https://github.com/openlayers/ol3/pull/2772) - Rename updatefeature event to changefeature ([@fredj](https://github.com/fredj))
|
||||
* [#2766](https://github.com/openlayers/ol3/pull/2766) - Make interaction "active" an ol.Object property ([@elemoine](https://github.com/elemoine))
|
||||
* [#2765](https://github.com/openlayers/ol3/pull/2765) - Treat unknown opt types as Object in ol externs ([@elemoine](https://github.com/elemoine))
|
||||
* [#2759](https://github.com/openlayers/ol3/pull/2759) - Fix test failures. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2762](https://github.com/openlayers/ol3/pull/2762) - Report test failures to the console. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2768](https://github.com/openlayers/ol3/pull/2768) - Write the function name correctly in the doc. ([@xamgreen](https://github.com/xamgreen))
|
||||
* [#2764](https://github.com/openlayers/ol3/pull/2764) - Remove rtree example ([@fredj](https://github.com/fredj))
|
||||
* [#2763](https://github.com/openlayers/ol3/pull/2763) - Miscellaneous coding style and typo fixes ([@fredj](https://github.com/fredj))
|
||||
* [#2758](https://github.com/openlayers/ol3/pull/2758) - Correctly generate child tile ranges for XYZ tiles. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2734](https://github.com/openlayers/ol3/pull/2734) - Add maxZoom option to BingMaps ([@elemoine](https://github.com/elemoine))
|
||||
* [#2752](https://github.com/openlayers/ol3/pull/2752) - Call loadFeatures from ol.source.ImageVector ([@elemoine](https://github.com/elemoine))
|
||||
* [#2658](https://github.com/openlayers/ol3/pull/2658) - Set inherited values when parsing a GetCapabilities ([@oterral](https://github.com/oterral))
|
||||
* [#2750](https://github.com/openlayers/ol3/pull/2750) - Export ol.layer.Base ([@fredj](https://github.com/fredj))
|
||||
* [#2749](https://github.com/openlayers/ol3/pull/2749) - Export ol.source.Source ([@fredj](https://github.com/fredj))
|
||||
* [#2742](https://github.com/openlayers/ol3/pull/2742) - Dispatch an 'updatefeature' from the vector source ([@fredj](https://github.com/fredj))
|
||||
* [#2747](https://github.com/openlayers/ol3/pull/2747) - Fix incorrect web address. ([@lazaruslarue](https://github.com/lazaruslarue))
|
||||
* [#2745](https://github.com/openlayers/ol3/pull/2745) - DragBox Interaction: getGeometry return type can be ol.geom.Polygon (r=@fredj) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2744](https://github.com/openlayers/ol3/pull/2744) - Fix ol.Feature 'change' event documentation ([@fredj](https://github.com/fredj))
|
||||
* [#2741](https://github.com/openlayers/ol3/pull/2741) - issue with reading scientific notation coordinates in ol.format.GML (r=@fredj) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2739](https://github.com/openlayers/ol3/pull/2739) - Revert "Function circular renamed to createCircularOnSphere" ([@elemoine](https://github.com/elemoine))
|
||||
* [#2616](https://github.com/openlayers/ol3/pull/2616) - Target for attribution links differs between maps ([@fredj](https://github.com/fredj))
|
||||
* [#2740](https://github.com/openlayers/ol3/pull/2740) - Make interactions activable and deactivable ([@elemoine](https://github.com/elemoine))
|
||||
* [#2727](https://github.com/openlayers/ol3/pull/2727) - Rename ol.geom.Polygon#circular to createCircularOnSphere ([@elemoine](https://github.com/elemoine))
|
||||
* [#2730](https://github.com/openlayers/ol3/pull/2730) - Do not call toLowerCase when forming a change:property event ([@elemoine](https://github.com/elemoine))
|
||||
* [#2728](https://github.com/openlayers/ol3/pull/2728) - Mark `ol.extent.getIntersection` as stable. ([@tschaub](https://github.com/tschaub))
|
||||
* [#2726](https://github.com/openlayers/ol3/pull/2726) - Make ol.Feature#setStyle accept null ([@elemoine](https://github.com/elemoine))
|
||||
* [#2724](https://github.com/openlayers/ol3/pull/2724) - Error when compiling individual example ([@fredj](https://github.com/fredj))
|
||||
* [#1959](https://github.com/openlayers/ol3/pull/1959) - Add a feature box selection example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2722](https://github.com/openlayers/ol3/pull/2722) - Make ol.Map#setView do not accept undefined ([@elemoine](https://github.com/elemoine))
|
||||
* [#2696](https://github.com/openlayers/ol3/pull/2696) - Consistent circle transform. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2717](https://github.com/openlayers/ol3/pull/2717) - Change the control visibility by using css class ([@fredj](https://github.com/fredj))
|
||||
* [#2715](https://github.com/openlayers/ol3/pull/2715) - Add an EPSG:3857 map to Tissot example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2714](https://github.com/openlayers/ol3/pull/2714) - Set the opacity directly to element.style.opacity ([@fredj](https://github.com/fredj))
|
||||
* [#2647](https://github.com/openlayers/ol3/pull/2647) - Upgrade closure library version ([@fredj](https://github.com/fredj))
|
||||
* [#2549](https://github.com/openlayers/ol3/pull/2549) - Use goog.array.ASSUME_NATIVE_FUNCTIONS define ([@fredj](https://github.com/fredj))
|
||||
* [#2711](https://github.com/openlayers/ol3/pull/2711) - Remove Google Maps example ([@elemoine](https://github.com/elemoine))
|
||||
* [#2684](https://github.com/openlayers/ol3/pull/2684) - Rename ol.Observable#dispatchChangeEvent() to #changed() ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2678](https://github.com/openlayers/ol3/pull/2678) - Mutable symbolizer properties for styles ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2568](https://github.com/openlayers/ol3/pull/2568) - re-implement auto-configure code for ol.format.GML (r=@ahocevar) ([@bartvde](https://github.com/bartvde))
|
||||
* [#2704](https://github.com/openlayers/ol3/pull/2704) - Use pool thread for calling bin/check-example.js. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2698](https://github.com/openlayers/ol3/pull/2698) - StaticVector is not an abstract base class ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2702](https://github.com/openlayers/ol3/pull/2702) - Add vector layer in export-map example ([@fredj](https://github.com/fredj))
|
||||
* [#2687](https://github.com/openlayers/ol3/pull/2687) - Use ol.LEGACY_IE_SUPPORT and ol.IS_LEGACY_IE define ([@fredj](https://github.com/fredj))
|
||||
* [#2675](https://github.com/openlayers/ol3/pull/2675) - Remove undefined from ol.Map#getLayers return type ([@fredj](https://github.com/fredj))
|
||||
* [#2692](https://github.com/openlayers/ol3/pull/2692) - Unset z-index in overlay example ([@fredj](https://github.com/fredj))
|
||||
* [#2681](https://github.com/openlayers/ol3/pull/2681) - Make tileSize a config option for ol.source.XYZ ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#2534](https://github.com/openlayers/ol3/pull/2534) - Document ol.geom.Polygon#getLinearRing function ([@fredj](https://github.com/fredj))
|
||||
* [#2677](https://github.com/openlayers/ol3/pull/2677) - Add TextStyle offsets getters to API. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2676](https://github.com/openlayers/ol3/pull/2676) - ol.FeatureOverlay: use the feature style if defined ([@fredj](https://github.com/fredj))
|
||||
* [#2656](https://github.com/openlayers/ol3/pull/2656) - Set ol.layer.Image#getSource return type to ol.source.Image ([@fredj](https://github.com/fredj))
|
||||
* [#2651](https://github.com/openlayers/ol3/pull/2651) - ol.layer.Vector.getSource return type specialisation. ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#2669](https://github.com/openlayers/ol3/pull/2669) - Revert "snapshot" ([@fredj](https://github.com/fredj))
|
||||
* [#2663](https://github.com/openlayers/ol3/pull/2663) - Set tracking property to false on geolocation error ([@fredj](https://github.com/fredj))
|
||||
* [#2662](https://github.com/openlayers/ol3/pull/2662) - Delegate transformation in ol.source.FormatVector#readFeatures to `ol.format.*` ([@gingerik](https://github.com/gingerik))
|
||||
* [#2447](https://github.com/openlayers/ol3/pull/2447) - Correct documentation typo. ([@lazaruslarue](https://github.com/lazaruslarue))
|
||||
* [#2660](https://github.com/openlayers/ol3/pull/2660) - New domain in the build header ([@elemoine](https://github.com/elemoine))
|
||||
@@ -1,9 +0,0 @@
|
||||
# 3.1.0
|
||||
|
||||
## Summary
|
||||
|
||||
This is a patch release to fix an issue with the select interaction in the 3.1.0 release.
|
||||
|
||||
## Changes
|
||||
|
||||
* [#3082](https://github.com/openlayers/ol3/pull/3082) - Correct arguments for forEachGeometryAtPixel. ([@tschaub](https://github.com/tschaub))
|
||||
@@ -1,86 +0,0 @@
|
||||
# 3.2.0
|
||||
|
||||
## Summary
|
||||
|
||||
The 3.1.0 release includes 70 merged pull requests since 3.1.0. Of note, the KML format [now parses `NetworkingLink` tags](https://github.com/openlayers/ol3/pull/3171). The [measure example](http://openlayers.org/en/v3.2.0/examples/measure.html) was [reworked](https://github.com/openlayers/ol3/pull/3206) to display measurements and help messages while drawing. A WMTS GetCapabilities format was [added](https://github.com/openlayers/ol3/pull/3026). The WebGL renderer [now supports feature hit detection](https://github.com/openlayers/ol3/pull/3065) (on point features). And you can now [detect](https://github.com/openlayers/ol3/pull/3172) features/colored pixels on image and tile layers! See the full list of [changes](#changes) below.
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
The 3.2.0 release maintains a backwards-compatible API with the 3.1.0 release, so upgrades should be painless. Some special considerations below.
|
||||
|
||||
* You should not call `view.setRotation` with `undefined`, to reset the view rotation to `0` then use `view.setRotation(0)` (see [#3176](https://github.com/openlayers/ol3/pull/3176)).
|
||||
|
||||
* If you use `$(map.getViewport()).on('mousemove')` to detect features when the mouse is hovered on the map, you should now rely on the `pointermove` map event type and check in the `pointermove` listener that the `dragging` event property is `false` (see [#3190](https://github.com/openlayers/ol3/pull/3190)).
|
||||
|
||||
## Changes
|
||||
|
||||
* [#3171](https://github.com/openlayers/ol3/pull/3171) - KML: Parsing of NetworkLink tag ([@oterral](https://github.com/oterral))
|
||||
* [#3209](https://github.com/openlayers/ol3/pull/3209) - Coding style fixes ([@fredj](https://github.com/fredj))
|
||||
* [#3208](https://github.com/openlayers/ol3/pull/3208) - Add setters and getters for imageLoadFunction ([@bartvde](https://github.com/bartvde))
|
||||
* [#3019](https://github.com/openlayers/ol3/pull/3019) - Add option to allow Select interaction logic to select overlapping features ([@bjornharrtell](https://github.com/bjornharrtell))
|
||||
* [#3206](https://github.com/openlayers/ol3/pull/3206) - Add tooltip to show measure + help message while drawing ([@pgiraud](https://github.com/pgiraud))
|
||||
* [#3205](https://github.com/openlayers/ol3/pull/3205) - Use ol.extent.createOrUpdateFromCoordinate ([@fredj](https://github.com/fredj))
|
||||
* [#3026](https://github.com/openlayers/ol3/pull/3026) - Add support of reading WMTS Get Cap document ([@htulipe](https://github.com/htulipe))
|
||||
* [#3201](https://github.com/openlayers/ol3/pull/3201) - Pass on opt_fast to parent clear function in ol.source.ServerVector (r=@elemoine,@gberaudo) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3199](https://github.com/openlayers/ol3/pull/3199) - Minor jsdoc fixes ([@fredj](https://github.com/fredj))
|
||||
* [#3059](https://github.com/openlayers/ol3/pull/3059) - Cache the buffered extent value ([@fredj](https://github.com/fredj))
|
||||
* [#3196](https://github.com/openlayers/ol3/pull/3196) - Remove unnecessary newlines ([@fredj](https://github.com/fredj))
|
||||
* [#3099](https://github.com/openlayers/ol3/pull/3099) - Fix up parsing of OGR GML with ol.format.GML ([@bartvde](https://github.com/bartvde))
|
||||
* [#3195](https://github.com/openlayers/ol3/pull/3195) - Coding style ([@fredj](https://github.com/fredj))
|
||||
* [#3192](https://github.com/openlayers/ol3/pull/3192) - Add "url" option to ol.source.MapQuest ([@elemoine](https://github.com/elemoine))
|
||||
* [#3172](https://github.com/openlayers/ol3/pull/3172) - Introduce forEachLayerAtPixel ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3178](https://github.com/openlayers/ol3/pull/3178) - GeoJSON externs fixes ([@fredj](https://github.com/fredj))
|
||||
* [#3179](https://github.com/openlayers/ol3/pull/3179) - Disallow undefined values for ol.layer.Base ([@fredj](https://github.com/fredj))
|
||||
* [#3161](https://github.com/openlayers/ol3/pull/3161) - Doc fix. writeFeaturesNode receives an array of Feature ([@3x0dv5](https://github.com/3x0dv5))
|
||||
* [#3169](https://github.com/openlayers/ol3/pull/3169) - Fix default icon style in kml format ([@oterral](https://github.com/oterral))
|
||||
* [#3190](https://github.com/openlayers/ol3/pull/3190) - Introduce `dragging` flag for MapBrowserEvent ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3135](https://github.com/openlayers/ol3/pull/3135) - Make changing the label of ZoomToExtent/FullScreen control consistent ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3186](https://github.com/openlayers/ol3/pull/3186) - Take the pixel ratio into account when clipping the layer ([@fredj](https://github.com/fredj))
|
||||
* [#3183](https://github.com/openlayers/ol3/pull/3183) - Allow other params than 'mode' in example page query string. ([@htulipe](https://github.com/htulipe))
|
||||
* [#2791](https://github.com/openlayers/ol3/pull/2791) - Re enable rotation button transition ([@fredj](https://github.com/fredj))
|
||||
* [#3180](https://github.com/openlayers/ol3/pull/3180) - Add a getMap function to ol.FeatureOverlay (r=@ahocevar) ([@bartvde](https://github.com/bartvde))
|
||||
* [#3176](https://github.com/openlayers/ol3/pull/3176) - Disallowed undefined rotation value ([@fredj](https://github.com/fredj))
|
||||
* [#3177](https://github.com/openlayers/ol3/pull/3177) - Add example showing how to style polygon vertices ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3174](https://github.com/openlayers/ol3/pull/3174) - Use view.getRotation or view.getResolution instead of view.getState ([@fredj](https://github.com/fredj))
|
||||
* [#3170](https://github.com/openlayers/ol3/pull/3170) - Coding style ([@fredj](https://github.com/fredj))
|
||||
* [#3108](https://github.com/openlayers/ol3/pull/3108) - Support skipping features in the WebGL renderer ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3163](https://github.com/openlayers/ol3/pull/3163) - Use the layerStatesArray property from the frameState ([@fredj](https://github.com/fredj))
|
||||
* [#3159](https://github.com/openlayers/ol3/pull/3159) - Don't pass specific options to the parent constructor ([@fredj](https://github.com/fredj))
|
||||
* [#3066](https://github.com/openlayers/ol3/pull/3066) - Introduce hasFeatureAtPixel ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3065](https://github.com/openlayers/ol3/pull/3065) - Add hit-detection support for WebGL ([@tsauerwein](https://github.com/tsauerwein))
|
||||
* [#3128](https://github.com/openlayers/ol3/pull/3128) - Allow rendering of feature when download of icon failed ([@oterral](https://github.com/oterral))
|
||||
* [#3156](https://github.com/openlayers/ol3/pull/3156) - Move readProjectionFrom* functions to the base classes ([@fredj](https://github.com/fredj))
|
||||
* [#3107](https://github.com/openlayers/ol3/pull/3107) - Also listen on loading images ([@elemoine](https://github.com/elemoine))
|
||||
* [#3153](https://github.com/openlayers/ol3/pull/3153) - Add missing GeoJSONFeature#bbox property ([@fredj](https://github.com/fredj))
|
||||
* [#3154](https://github.com/openlayers/ol3/pull/3154) - Remove unnecessary newlines ([@fredj](https://github.com/fredj))
|
||||
* [#3146](https://github.com/openlayers/ol3/pull/3146) - Enable tests for ol.geom.flat.reverse ([@icholy](https://github.com/icholy))
|
||||
* [#3152](https://github.com/openlayers/ol3/pull/3152) - Update closure-library and closure-util version ([@fredj](https://github.com/fredj))
|
||||
* [#3145](https://github.com/openlayers/ol3/pull/3145) - Add wrapX option to source.OSM and source.BingMaps ([@elemoine](https://github.com/elemoine))
|
||||
* [#3139](https://github.com/openlayers/ol3/pull/3139) - Add ol.control.Control#setTarget ([@elemoine](https://github.com/elemoine))
|
||||
* [#3144](https://github.com/openlayers/ol3/pull/3144) - Update CONTRIBUTING style guide with recent guidelines ([@bartvde](https://github.com/bartvde))
|
||||
* [#3136](https://github.com/openlayers/ol3/pull/3136) - Use array.length = 0 instead of goog.array.clear ([@fredj](https://github.com/fredj))
|
||||
* [#3140](https://github.com/openlayers/ol3/pull/3140) - Avoid use of goog.array.clone with arrays. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3122](https://github.com/openlayers/ol3/pull/3122) - Revert "Use offsetX and offsetY if available" ([@fredj](https://github.com/fredj))
|
||||
* [#2385](https://github.com/openlayers/ol3/pull/2385) - Option to update vector layers while animating ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3129](https://github.com/openlayers/ol3/pull/3129) - Only update the rbush item if the extent has changed ([@fredj](https://github.com/fredj))
|
||||
* [#3117](https://github.com/openlayers/ol3/pull/3117) - Add pixelRatio support for DOM vector renderer ([@ahocevar](https://github.com/ahocevar))
|
||||
* [#3124](https://github.com/openlayers/ol3/pull/3124) - Add a space between scale -value and -unit ([@sirtet](https://github.com/sirtet))
|
||||
* [#3130](https://github.com/openlayers/ol3/pull/3130) - Document default value ([@fredj](https://github.com/fredj))
|
||||
* [#3105](https://github.com/openlayers/ol3/pull/3105) - ol.geom.Geometry#getExtent re-factoring ([@fredj](https://github.com/fredj))
|
||||
* [#3118](https://github.com/openlayers/ol3/pull/3118) - Bugfix: "Cannot read property 'firstElementChild' of null" (WFS) ([@naturalatlas](https://github.com/naturalatlas))
|
||||
* [#3114](https://github.com/openlayers/ol3/pull/3114) - Specify node version in CONTRIBUTING.md ([@elemoine](https://github.com/elemoine))
|
||||
* [#3106](https://github.com/openlayers/ol3/pull/3106) - Don't pass specific options to the parent constructor ([@fredj](https://github.com/fredj))
|
||||
* [#3110](https://github.com/openlayers/ol3/pull/3110) - Use svg instead of png to get better image quality ([@PeterDaveHello](https://github.com/PeterDaveHello))
|
||||
* [#2707](https://github.com/openlayers/ol3/pull/2707) - Generate source map of minified ol.js ([@gberaudo](https://github.com/gberaudo))
|
||||
* [#3104](https://github.com/openlayers/ol3/pull/3104) - Don't pass renderBuffer option to the parent constructor ([@fredj](https://github.com/fredj))
|
||||
* [#3096](https://github.com/openlayers/ol3/pull/3096) - popup example cleanup / simplification ([@fredj](https://github.com/fredj))
|
||||
* [#3072](https://github.com/openlayers/ol3/pull/3072) - Optimize canvas hit detection by rendering features in a limited extent. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3101](https://github.com/openlayers/ol3/pull/3101) - Use bracket notation instead of goog.object functions. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3079](https://github.com/openlayers/ol3/pull/3079) - Exclude source files from docs. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3100](https://github.com/openlayers/ol3/pull/3100) - Assert that ol.layer.Tile#getPreload is always set ([@fredj](https://github.com/fredj))
|
||||
* [#3084](https://github.com/openlayers/ol3/pull/3084) - Changes from the v3.1.x branch. ([@openlayers](https://github.com/openlayers))
|
||||
* [#3094](https://github.com/openlayers/ol3/pull/3094) - Remove AUTHORS.md. ([@tschaub](https://github.com/tschaub))
|
||||
* [#3089](https://github.com/openlayers/ol3/pull/3089) - Fixed URL link for test README ([@mike-mcgann](https://github.com/mike-mcgann))
|
||||
* [#2894](https://github.com/openlayers/ol3/pull/2894) - Simplify CSS code in custom-controls example ([@fredj](https://github.com/fredj))
|
||||
* [#3085](https://github.com/openlayers/ol3/pull/3085) - Fixed documentation typo for return value of ol.proj.Projection.isGlobal(). ([@mike-mcgann](https://github.com/mike-mcgann))
|
||||
* [#3073](https://github.com/openlayers/ol3/pull/3073) - Make map's deviceOptions map options ([@ahocevar](https://github.com/ahocevar))
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"library_url": "https://github.com/google/closure-library/archive/0011afd534469ba111786fe68300a634e08a4d80.zip"
|
||||
"library_url": "https://github.com/google/closure-library/archive/ad5e66c1e7d7829b0d77feae49aaf5f011265715.zip"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"cleverLinks": true,
|
||||
"monospaceLinks": true,
|
||||
"default": {
|
||||
"outputSourceFiles": false
|
||||
"outputSourceFiles": true
|
||||
},
|
||||
"applicationName": "OpenLayers 3"
|
||||
},
|
||||
|
||||
@@ -61,8 +61,6 @@
|
||||
"compilation_level": "ADVANCED",
|
||||
"warning_level": "VERBOSE",
|
||||
"use_types_for_optimization": true,
|
||||
"manage_closure_dependencies": true,
|
||||
"create_source_map": "build/ol.js.map",
|
||||
"source_map_format": "V3"
|
||||
"manage_closure_dependencies": true
|
||||
}
|
||||
}
|
||||
|
||||
14
css/ol.css
14
css/ol.css
@@ -53,12 +53,11 @@
|
||||
.ol-rotate {
|
||||
top: .5em;
|
||||
right: .5em;
|
||||
transition: opacity .25s linear, visibility 0s linear;
|
||||
transition: opacity .25s;
|
||||
}
|
||||
.ol-rotate.ol-hidden {
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity .25s linear, visibility 0s linear .25s;
|
||||
display: none;
|
||||
}
|
||||
.ol-zoom-extent {
|
||||
top: 4.643em;
|
||||
@@ -115,12 +114,21 @@
|
||||
background-color: #4c6079;
|
||||
background-color: rgba(0,60,136,0.7);
|
||||
}
|
||||
.ol-zoom-extent button:after {
|
||||
content: "E";
|
||||
}
|
||||
.ol-zoom .ol-zoom-in {
|
||||
border-radius: 2px 2px 0 0;
|
||||
}
|
||||
.ol-zoom .ol-zoom-out {
|
||||
border-radius: 0 0 2px 2px;
|
||||
}
|
||||
button.ol-full-screen-false:after {
|
||||
content: "\2194";
|
||||
}
|
||||
button.ol-full-screen-true:after {
|
||||
content: "\00d7";
|
||||
}
|
||||
|
||||
|
||||
.ol-attribution {
|
||||
|
||||
@@ -55,9 +55,6 @@ var map = new ol.Map({
|
||||
})
|
||||
],
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
// Improve user experience by loading tiles while animating. Will make
|
||||
// animations stutter on mobile or slow devices.
|
||||
loadTilesWhileAnimating: true,
|
||||
target: 'map',
|
||||
controls: ol.control.defaults({
|
||||
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
|
||||
|
||||
@@ -29,9 +29,6 @@ for (i = 0, ii = styles.length; i < ii; ++i) {
|
||||
var map = new ol.Map({
|
||||
layers: layers,
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
// Improve user experience by loading tiles while dragging/zooming. Will make
|
||||
// zooming choppy on mobile or slow devices.
|
||||
loadTilesWhileInteracting: true,
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [-6655.5402445057125, 6709968.258934638],
|
||||
|
||||
@@ -10,12 +10,39 @@
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<style type="text/css">
|
||||
.rotate-north {
|
||||
position: absolute;
|
||||
top: 65px;
|
||||
left: .5em;
|
||||
left: 8px;
|
||||
background: rgba(255,255,255,0.4);
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
}
|
||||
.ol-touch .rotate-north {
|
||||
top: 80px;
|
||||
}
|
||||
.rotate-north a {
|
||||
display: block;
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
|
||||
font-weight: bold;
|
||||
margin: 1px;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
border-radius: 2px;
|
||||
height: 22px;
|
||||
width: 22px;
|
||||
background: rgba(0,60,136,0.5);
|
||||
}
|
||||
.ol-touch .rotate-north a {
|
||||
font-size: 20px;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
line-height: 26px;
|
||||
}
|
||||
.rotate-north a:hover {
|
||||
background: rgba(0,60,136,0.7);
|
||||
}
|
||||
</style>
|
||||
<title>ol3 custom controls example</title>
|
||||
</head>
|
||||
|
||||
@@ -29,20 +29,23 @@ app.RotateNorthControl = function(opt_options) {
|
||||
|
||||
var options = opt_options || {};
|
||||
|
||||
var button = document.createElement('button');
|
||||
button.innerHTML = 'N';
|
||||
var anchor = document.createElement('a');
|
||||
anchor.href = '#rotate-north';
|
||||
anchor.innerHTML = 'N';
|
||||
|
||||
var this_ = this;
|
||||
var handleRotateNorth = function(e) {
|
||||
// prevent #rotate-north anchor from getting appended to the url
|
||||
e.preventDefault();
|
||||
this_.getMap().getView().setRotation(0);
|
||||
};
|
||||
|
||||
button.addEventListener('click', handleRotateNorth, false);
|
||||
button.addEventListener('touchstart', handleRotateNorth, false);
|
||||
anchor.addEventListener('click', handleRotateNorth, false);
|
||||
anchor.addEventListener('touchstart', handleRotateNorth, false);
|
||||
|
||||
var element = document.createElement('div');
|
||||
element.className = 'rotate-north ol-unselectable ol-control';
|
||||
element.appendChild(button);
|
||||
element.className = 'rotate-north ol-unselectable';
|
||||
element.appendChild(anchor);
|
||||
|
||||
ol.control.Control.call(this, {
|
||||
element: element,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -145,10 +145,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -141,10 +141,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -35,11 +35,9 @@
|
||||
<h4 id="title">GetFeatureInfo example (image layer)</h4>
|
||||
<p id="shortdesc">This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.</p>
|
||||
<div id="docs">
|
||||
<p>Additionally <code>map.forEachLayerAtPixel</code> is used to change the mouse
|
||||
pointer when hovering a non-transparent pixel on the map.</p>
|
||||
<p>See the <a href="getfeatureinfo-image.js" target="_blank">getfeatureinfo-image.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">getfeatureinfo, forEachLayerAtPixel</div>
|
||||
<div id="tags">getfeatureinfo</div>
|
||||
</div>
|
||||
<div class="span4 offset4">
|
||||
<div id="info" class="alert alert-success">
|
||||
|
||||
@@ -7,8 +7,7 @@ goog.require('ol.source.ImageWMS');
|
||||
var wmsSource = new ol.source.ImageWMS({
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'ne:ne'},
|
||||
serverType: 'geoserver',
|
||||
crossOrigin: ''
|
||||
serverType: 'geoserver'
|
||||
});
|
||||
|
||||
var wmsLayer = new ol.layer.Image({
|
||||
@@ -21,7 +20,6 @@ var view = new ol.View({
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
layers: [wmsLayer],
|
||||
target: 'map',
|
||||
view: view
|
||||
@@ -38,14 +36,3 @@ map.on('singleclick', function(evt) {
|
||||
'<iframe seamless src="' + url + '"></iframe>';
|
||||
}
|
||||
});
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
var hit = map.forEachLayerAtPixel(pixel, function(layer) {
|
||||
return true;
|
||||
});
|
||||
map.getTargetElement().style.cursor = hit ? 'pointer' : '';
|
||||
});
|
||||
|
||||
@@ -35,11 +35,9 @@
|
||||
<h4 id="title">WMS GetFeatureInfo example (tile layer)</h4>
|
||||
<p id="shortdesc">This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS tile layer.</p>
|
||||
<div id="docs">
|
||||
<p>Additionally <code>map.forEachLayerAtPixel</code> is used to change the mouse
|
||||
pointer when hovering a non-transparent pixel on the map.</p>
|
||||
<p>See the <a href="getfeatureinfo-tile.js" target="_blank">getfeatureinfo-tile.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">getfeatureinfo, forEachLayerAtPixel</div>
|
||||
<div id="tags">getfeatureinfo</div>
|
||||
</div>
|
||||
<div class="span4 offset4">
|
||||
<div id="info" class="alert alert-success">
|
||||
|
||||
@@ -7,8 +7,7 @@ goog.require('ol.source.TileWMS');
|
||||
var wmsSource = new ol.source.TileWMS({
|
||||
url: 'http://demo.boundlessgeo.com/geoserver/wms',
|
||||
params: {'LAYERS': 'ne:ne'},
|
||||
serverType: 'geoserver',
|
||||
crossOrigin: ''
|
||||
serverType: 'geoserver'
|
||||
});
|
||||
|
||||
var wmsLayer = new ol.layer.Tile({
|
||||
@@ -21,7 +20,6 @@ var view = new ol.View({
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
layers: [wmsLayer],
|
||||
target: 'map',
|
||||
view: view
|
||||
@@ -38,14 +36,3 @@ map.on('singleclick', function(evt) {
|
||||
'<iframe seamless src="' + url + '"></iframe>';
|
||||
}
|
||||
});
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
var hit = map.forEachLayerAtPixel(pixel, function(layer) {
|
||||
return true;
|
||||
});
|
||||
map.getTargetElement().style.cursor = hit ? 'pointer' : '';
|
||||
});
|
||||
|
||||
@@ -85,10 +85,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span8">
|
||||
<div class="span12">
|
||||
<h4 id="title">Icon sprite with WebGL example</h4>
|
||||
<p id="shortdesc">Icon sprite with WebGL.</p>
|
||||
<div id="docs">
|
||||
@@ -39,11 +39,6 @@
|
||||
</div>
|
||||
<div id="tags">webgl, icon, sprite, vector, point</div>
|
||||
</div>
|
||||
<div class="span2 offset2">
|
||||
<div id="info" class="alert alert-success">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -109,34 +109,3 @@ var featureOverlay = new ol.FeatureOverlay({
|
||||
}),
|
||||
features: overlayFeatures
|
||||
});
|
||||
|
||||
map.on('click', function(evt) {
|
||||
var info = document.getElementById('info');
|
||||
info.innerHTML =
|
||||
'Hold on a second, while I catch those butterflies for you ...';
|
||||
|
||||
window.setTimeout(function() {
|
||||
var features = [];
|
||||
map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
|
||||
features.push(features);
|
||||
return false;
|
||||
});
|
||||
|
||||
if (features.length === 1) {
|
||||
info.innerHTML = 'Got one butterfly';
|
||||
} else if (features.length > 1) {
|
||||
info.innerHTML = 'Got ' + features.length + ' butterflies';
|
||||
} else {
|
||||
info.innerHTML = 'Couldn\'t catch a single butterfly';
|
||||
}
|
||||
}, 1);
|
||||
});
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
var hit = map.hasFeatureAtPixel(pixel);
|
||||
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
||||
});
|
||||
|
||||
@@ -40,13 +40,11 @@ var vectorLayer = new ol.layer.Vector({
|
||||
|
||||
var rasterLayer = new ol.layer.Tile({
|
||||
source: new ol.source.TileJSON({
|
||||
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp',
|
||||
crossOrigin: ''
|
||||
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
|
||||
})
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
renderer: exampleNS.getRendererFromQueryString(),
|
||||
layers: [rasterLayer, vectorLayer],
|
||||
target: document.getElementById('map'),
|
||||
view: new ol.View({
|
||||
@@ -86,12 +84,14 @@ map.on('click', function(evt) {
|
||||
});
|
||||
|
||||
// change mouse cursor when over marker
|
||||
map.on('pointermove', function(e) {
|
||||
if (e.dragging) {
|
||||
$(element).popover('destroy');
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(e) {
|
||||
var pixel = map.getEventPixel(e.originalEvent);
|
||||
var hit = map.hasFeatureAtPixel(pixel);
|
||||
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
||||
var hit = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
|
||||
return true;
|
||||
});
|
||||
if (hit) {
|
||||
map.getTarget().style.cursor = 'pointer';
|
||||
} else {
|
||||
map.getTarget().style.cursor = '';
|
||||
}
|
||||
});
|
||||
|
||||
@@ -126,10 +126,7 @@ var displaySnap = function(coordinate) {
|
||||
map.render();
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||
displaySnap(coordinate);
|
||||
});
|
||||
|
||||
@@ -80,10 +80,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -85,11 +85,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
info.tooltip('hide');
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
||||
});
|
||||
|
||||
|
||||
@@ -92,11 +92,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
info.tooltip('hide');
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
||||
});
|
||||
|
||||
|
||||
@@ -52,10 +52,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
}
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -9,40 +9,6 @@
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Measure example</title>
|
||||
<style>
|
||||
.tooltip {
|
||||
position: relative;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 4px;
|
||||
color: white;
|
||||
padding: 4px 8px;
|
||||
opacity: 0.7;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.tooltip-measure {
|
||||
opacity: 1;
|
||||
font-weight: bold;
|
||||
}
|
||||
.tooltip-static {
|
||||
background-color: #ffcc33;
|
||||
color: black;
|
||||
border: 1px solid white;
|
||||
}
|
||||
.tooltip-measure:before,
|
||||
.tooltip-static:before {
|
||||
border-top: 6px solid rgba(0, 0, 0, 0.5);
|
||||
border-right: 6px solid transparent;
|
||||
border-left: 6px solid transparent;
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: -6px;
|
||||
margin-left: -7px;
|
||||
left: 50%;
|
||||
}
|
||||
.tooltip-static:before {
|
||||
border-top-color: #ffcc33;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -77,6 +43,8 @@
|
||||
</select>
|
||||
</form>
|
||||
|
||||
<ol id="measureOutput" reversed></ol>
|
||||
|
||||
<div id="docs">
|
||||
<p><i>NOTE: Measure is done in simple way on projected plane. Earth
|
||||
curvature is not taken into account</i></p>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.Overlay');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.LineString');
|
||||
goog.require('ol.geom.Polygon');
|
||||
@@ -41,85 +40,35 @@ var vector = new ol.layer.Vector({
|
||||
|
||||
|
||||
/**
|
||||
* Currently drawn feature.
|
||||
* Currently drawed feature
|
||||
* @type {ol.Feature}
|
||||
*/
|
||||
var sketch;
|
||||
|
||||
|
||||
/**
|
||||
* The help tooltip element.
|
||||
* Element for currently drawed feature
|
||||
* @type {Element}
|
||||
*/
|
||||
var helpTooltipElement;
|
||||
var sketchElement;
|
||||
|
||||
|
||||
/**
|
||||
* Overlay to show the help messages.
|
||||
* @type {ol.Overlay}
|
||||
* handle pointer move
|
||||
* @param {Event} evt
|
||||
*/
|
||||
var helpTooltip;
|
||||
|
||||
|
||||
/**
|
||||
* The measure tooltip element.
|
||||
* @type {Element}
|
||||
*/
|
||||
var measureTooltipElement;
|
||||
|
||||
|
||||
/**
|
||||
* Overlay to show the measurement.
|
||||
* @type {ol.Overlay}
|
||||
*/
|
||||
var measureTooltip;
|
||||
|
||||
|
||||
/**
|
||||
* Message to show when the user is drawing a polygon.
|
||||
* @type {string}
|
||||
*/
|
||||
var continuePolygonMsg = 'Click to continue drawing the polygon';
|
||||
|
||||
|
||||
/**
|
||||
* Message to show when the user is drawing a line.
|
||||
* @type {string}
|
||||
*/
|
||||
var continueLineMsg = 'Click to continue drawing the line';
|
||||
|
||||
|
||||
/**
|
||||
* Handle pointer move.
|
||||
* @param {ol.MapBrowserEvent} evt
|
||||
*/
|
||||
var pointerMoveHandler = function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
/** @type {string} */
|
||||
var helpMsg = 'Click to start drawing';
|
||||
/** @type {ol.Coordinate|undefined} */
|
||||
var tooltipCoord = evt.coordinate;
|
||||
|
||||
var mouseMoveHandler = function(evt) {
|
||||
if (sketch) {
|
||||
var output;
|
||||
var geom = (sketch.getGeometry());
|
||||
if (geom instanceof ol.geom.Polygon) {
|
||||
output = formatArea(/** @type {ol.geom.Polygon} */ (geom));
|
||||
helpMsg = continuePolygonMsg;
|
||||
tooltipCoord = geom.getInteriorPoint().getCoordinates();
|
||||
|
||||
} else if (geom instanceof ol.geom.LineString) {
|
||||
output = formatLength( /** @type {ol.geom.LineString} */ (geom));
|
||||
helpMsg = continueLineMsg;
|
||||
tooltipCoord = geom.getLastCoordinate();
|
||||
}
|
||||
measureTooltipElement.innerHTML = output;
|
||||
measureTooltip.setPosition(tooltipCoord);
|
||||
sketchElement.innerHTML = output;
|
||||
}
|
||||
|
||||
helpTooltipElement.innerHTML = helpMsg;
|
||||
helpTooltip.setPosition(evt.coordinate);
|
||||
};
|
||||
|
||||
|
||||
@@ -132,7 +81,7 @@ var map = new ol.Map({
|
||||
})
|
||||
});
|
||||
|
||||
map.on('pointermove', pointerMoveHandler);
|
||||
$(map.getViewport()).on('mousemove', mouseMoveHandler);
|
||||
|
||||
var typeSelect = document.getElementById('type');
|
||||
|
||||
@@ -141,87 +90,33 @@ function addInteraction() {
|
||||
var type = (typeSelect.value == 'area' ? 'Polygon' : 'LineString');
|
||||
draw = new ol.interaction.Draw({
|
||||
source: source,
|
||||
type: /** @type {ol.geom.GeometryType} */ (type),
|
||||
style: new ol.style.Style({
|
||||
fill: new ol.style.Fill({
|
||||
color: 'rgba(255, 255, 255, 0.2)'
|
||||
}),
|
||||
stroke: new ol.style.Stroke({
|
||||
color: 'rgba(0, 0, 0, 0.5)',
|
||||
lineDash: [10, 10],
|
||||
width: 2
|
||||
}),
|
||||
image: new ol.style.Circle({
|
||||
radius: 5,
|
||||
stroke: new ol.style.Stroke({
|
||||
color: 'rgba(0, 0, 0, 0.7)'
|
||||
}),
|
||||
fill: new ol.style.Fill({
|
||||
color: 'rgba(255, 255, 255, 0.2)'
|
||||
})
|
||||
})
|
||||
})
|
||||
type: /** @type {ol.geom.GeometryType} */ (type)
|
||||
});
|
||||
map.addInteraction(draw);
|
||||
|
||||
createMeasureTooltip();
|
||||
createHelpTooltip();
|
||||
|
||||
draw.on('drawstart',
|
||||
function(evt) {
|
||||
// set sketch
|
||||
sketch = evt.feature;
|
||||
sketchElement = document.createElement('li');
|
||||
var outputList = document.getElementById('measureOutput');
|
||||
|
||||
if (outputList.childNodes) {
|
||||
outputList.insertBefore(sketchElement, outputList.firstChild);
|
||||
} else {
|
||||
outputList.appendChild(sketchElement);
|
||||
}
|
||||
}, this);
|
||||
|
||||
draw.on('drawend',
|
||||
function(evt) {
|
||||
measureTooltipElement.className = 'tooltip tooltip-static';
|
||||
measureTooltip.setOffset([0, -7]);
|
||||
// unset sketch
|
||||
sketch = null;
|
||||
// unset tooltip so that a new one can be created
|
||||
measureTooltipElement = null;
|
||||
createMeasureTooltip();
|
||||
sketchElement = null;
|
||||
}, this);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new help tooltip
|
||||
*/
|
||||
function createHelpTooltip() {
|
||||
if (helpTooltipElement) {
|
||||
helpTooltipElement.parentNode.removeChild(helpTooltipElement);
|
||||
}
|
||||
helpTooltipElement = document.createElement('div');
|
||||
helpTooltipElement.className = 'tooltip';
|
||||
helpTooltip = new ol.Overlay({
|
||||
element: helpTooltipElement,
|
||||
offset: [15, 0],
|
||||
positioning: 'center-left'
|
||||
});
|
||||
map.addOverlay(helpTooltip);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new measure tooltip
|
||||
*/
|
||||
function createMeasureTooltip() {
|
||||
if (measureTooltipElement) {
|
||||
measureTooltipElement.parentNode.removeChild(measureTooltipElement);
|
||||
}
|
||||
measureTooltipElement = document.createElement('div');
|
||||
measureTooltipElement.className = 'tooltip tooltip-measure';
|
||||
measureTooltip = new ol.Overlay({
|
||||
element: measureTooltipElement,
|
||||
offset: [0, -15],
|
||||
positioning: 'bottom-center'
|
||||
});
|
||||
map.addOverlay(measureTooltip);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Let user change the geometry type.
|
||||
* @param {Event} e Change event.
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>Custom styles for polygons</title>
|
||||
<style>
|
||||
.map {
|
||||
background: grey;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div id="map" class="map"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span12">
|
||||
<h4 id="title">Custom styles for polygons</h4>
|
||||
<p id="shortdesc">Showing the vertices of a polygon with a custom style geometry.</p>
|
||||
<div id="docs">
|
||||
<p>See the <a href="polygon-styles.js" target="_blank">polygon-styles.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">polygon, vector, style, GeometryFunction</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=polygon-styles" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,101 +0,0 @@
|
||||
goog.require('ol.Map');
|
||||
goog.require('ol.View');
|
||||
goog.require('ol.geom.MultiPoint');
|
||||
goog.require('ol.layer.Vector');
|
||||
goog.require('ol.source.GeoJSON');
|
||||
goog.require('ol.style.Circle');
|
||||
goog.require('ol.style.Fill');
|
||||
goog.require('ol.style.Stroke');
|
||||
goog.require('ol.style.Style');
|
||||
|
||||
var styles = [
|
||||
/* We are using two different styles for the polygons:
|
||||
* - The first style is for the polygons themselves.
|
||||
* - The second style is to draw the vertices of the polygons.
|
||||
* In a custom `geometry` function the vertices of a polygon are
|
||||
* returned as `MultiPoint` geometry, which will be used to render
|
||||
* the style.
|
||||
*/
|
||||
new ol.style.Style({
|
||||
stroke: new ol.style.Stroke({
|
||||
color: 'blue',
|
||||
width: 3
|
||||
}),
|
||||
fill: new ol.style.Fill({
|
||||
color: 'rgba(0, 0, 255, 0.1)'
|
||||
})
|
||||
}),
|
||||
new ol.style.Style({
|
||||
image: new ol.style.Circle({
|
||||
radius: 5,
|
||||
fill: new ol.style.Fill({
|
||||
color: 'orange'
|
||||
})
|
||||
}),
|
||||
geometry: function(feature) {
|
||||
// return the coordinates of the first ring of the polygon
|
||||
var coordinates = feature.getGeometry().getCoordinates()[0];
|
||||
return new ol.geom.MultiPoint(coordinates);
|
||||
}
|
||||
})
|
||||
];
|
||||
|
||||
var source = new ol.source.GeoJSON(/** @type {olx.source.GeoJSONOptions} */ ({
|
||||
object: {
|
||||
'type': 'FeatureCollection',
|
||||
'crs': {
|
||||
'type': 'name',
|
||||
'properties': {
|
||||
'name': 'EPSG:3857'
|
||||
}
|
||||
},
|
||||
'features': [
|
||||
{
|
||||
'type': 'Feature',
|
||||
'geometry': {
|
||||
'type': 'Polygon',
|
||||
'coordinates': [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6],
|
||||
[-3e6, 6e6], [-5e6, 6e6]]]
|
||||
}
|
||||
},
|
||||
{
|
||||
'type': 'Feature',
|
||||
'geometry': {
|
||||
'type': 'Polygon',
|
||||
'coordinates': [[[-2e6, 6e6], [-2e6, 8e6], [0, 8e6],
|
||||
[0, 6e6], [-2e6, 6e6]]]
|
||||
}
|
||||
},
|
||||
{
|
||||
'type': 'Feature',
|
||||
'geometry': {
|
||||
'type': 'Polygon',
|
||||
'coordinates': [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6],
|
||||
[3e6, 6e6], [1e6, 6e6]]]
|
||||
}
|
||||
},
|
||||
{
|
||||
'type': 'Feature',
|
||||
'geometry': {
|
||||
'type': 'Polygon',
|
||||
'coordinates': [[[-2e6, -1e6], [-1e6, 1e6],
|
||||
[0, -1e6], [-2e6, -1e6]]]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}));
|
||||
|
||||
var layer = new ol.layer.Vector({
|
||||
source: source,
|
||||
style: styles
|
||||
});
|
||||
|
||||
var map = new ol.Map({
|
||||
layers: [layer],
|
||||
target: 'map',
|
||||
view: new ol.View({
|
||||
center: [0, 1000000],
|
||||
zoom: 2
|
||||
})
|
||||
});
|
||||
@@ -10,8 +10,10 @@
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<style type="text/css">
|
||||
.ol-popup {
|
||||
display: none;
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
-moz-box-shadow: 0 1px 4px rgba(0,0,0,0.2);
|
||||
-webkit-filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
|
||||
filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
|
||||
padding: 15px;
|
||||
|
||||
@@ -20,7 +20,7 @@ var closer = document.getElementById('popup-closer');
|
||||
* @return {boolean} Don't follow the href.
|
||||
*/
|
||||
closer.onclick = function() {
|
||||
overlay.setPosition(undefined);
|
||||
container.style.display = 'none';
|
||||
closer.blur();
|
||||
return false;
|
||||
};
|
||||
@@ -65,7 +65,9 @@ map.on('click', function(evt) {
|
||||
var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
|
||||
coordinate, 'EPSG:3857', 'EPSG:4326'));
|
||||
|
||||
overlay.setPosition(coordinate);
|
||||
content.innerHTML = '<p>You clicked here:</p><code>' + hdms +
|
||||
'</code>';
|
||||
overlay.setPosition(coordinate);
|
||||
container.style.display = 'block';
|
||||
|
||||
});
|
||||
|
||||
@@ -83,10 +83,7 @@ var displaySnap = function(coordinate) {
|
||||
map.render();
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||
displaySnap(coordinate);
|
||||
});
|
||||
@@ -119,12 +116,13 @@ map.on('postcompose', function(evt) {
|
||||
}
|
||||
});
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
var hit = map.hasFeatureAtPixel(pixel);
|
||||
$(map.getViewport()).on('mousemove', function(e) {
|
||||
var pixel = map.getEventPixel(e.originalEvent);
|
||||
|
||||
var hit = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
|
||||
return true;
|
||||
});
|
||||
|
||||
if (hit) {
|
||||
map.getTarget().style.cursor = 'pointer';
|
||||
} else {
|
||||
|
||||
@@ -58,10 +58,7 @@ var displayCountryInfo = function(coordinate) {
|
||||
});
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||
displayCountryInfo(coordinate);
|
||||
});
|
||||
|
||||
@@ -114,10 +114,7 @@ var displayFeatureInfo = function(pixel) {
|
||||
|
||||
};
|
||||
|
||||
map.on('pointermove', function(evt) {
|
||||
if (evt.dragging) {
|
||||
return;
|
||||
}
|
||||
$(map.getViewport()).on('mousemove', function(evt) {
|
||||
var pixel = map.getEventPixel(evt.originalEvent);
|
||||
displayFeatureInfo(pixel);
|
||||
});
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
||||
<link rel="stylesheet" href="../css/ol.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
|
||||
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
|
||||
<title>WMTS GetCapabilities parsing example</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span4">
|
||||
<h4 id="title">WMTS GetCapabilities parsing example</h4>
|
||||
<p id="shortdesc">Example of parsing a WMTS GetCapabilities response.</p>
|
||||
<div id="docs">
|
||||
<p>See the <a href="wmts-capabilities.js" target="_blank">wmts-capabilities.js source</a> to see how this is done.</p>
|
||||
</div>
|
||||
<div id="tags">wmts, capabilities, getcapabilities</div>
|
||||
</div>
|
||||
|
||||
<div class="span8">
|
||||
<pre id="log"></pre>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../resources/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
|
||||
<script src="loader.js?id=wmts-capabilities" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,8 +0,0 @@
|
||||
goog.require('ol.format.WMTSCapabilities');
|
||||
|
||||
var parser = new ol.format.WMTSCapabilities();
|
||||
|
||||
$.ajax('data/WMTSCapabilities.xml').then(function(response) {
|
||||
var result = parser.read(response);
|
||||
$('#log').html(window.JSON.stringify(result, null, 2));
|
||||
});
|
||||
@@ -13,12 +13,6 @@
|
||||
var GeoJSONObject = function() {};
|
||||
|
||||
|
||||
/**
|
||||
* @type {!Array.<number>|undefined}
|
||||
*/
|
||||
GeoJSONObject.prototype.bbox;
|
||||
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
@@ -34,17 +28,11 @@ GeoJSONObject.prototype.crs;
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {GeoJSONObject}
|
||||
*/
|
||||
var GeoJSONCRS = function() {};
|
||||
|
||||
|
||||
/**
|
||||
* CRS type. One of `link` or `name`.
|
||||
* @type {string}
|
||||
*/
|
||||
GeoJSONCRS.prototype.type;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: remove GeoJSONCRSCode when http://jira.codehaus.org/browse/GEOS-5996
|
||||
* is fixed and widely deployed.
|
||||
@@ -154,9 +142,16 @@ var GeoJSONFeatureCollection = function() {};
|
||||
GeoJSONFeatureCollection.prototype.features;
|
||||
|
||||
|
||||
/**
|
||||
* @type {!Array.<number>|undefined}
|
||||
*/
|
||||
GeoJSONFeatureCollection.prototype.bbox;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {GeoJSONObject}
|
||||
*/
|
||||
var GeoJSONLink = function() {};
|
||||
|
||||
@@ -165,8 +160,3 @@ var GeoJSONLink = function() {};
|
||||
* @type {string}
|
||||
*/
|
||||
GeoJSONLink.prototype.href;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
GeoJSONLink.prototype.type;
|
||||
|
||||
@@ -92,12 +92,6 @@ oli.MapBrowserEvent.prototype.originalEvent;
|
||||
oli.MapBrowserEvent.prototype.pixel;
|
||||
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
oli.MapBrowserEvent.prototype.dragging;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @interface
|
||||
|
||||
220
externs/olx.js
220
externs/olx.js
@@ -23,6 +23,32 @@ olx.AttributionOptions;
|
||||
olx.AttributionOptions.prototype.html;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{loadTilesWhileAnimating: (boolean|undefined),
|
||||
* loadTilesWhileInteracting: (boolean|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.DeviceOptions;
|
||||
|
||||
|
||||
/**
|
||||
* When set to false, no tiles will be loaded while animating, which improves
|
||||
* responsiveness on devices with slow memory. Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.DeviceOptions.prototype.loadTilesWhileAnimating;
|
||||
|
||||
|
||||
/**
|
||||
* When set to false, no tiles will be loaded while interacting, which improves
|
||||
* responsiveness on devices with slow memory. Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.DeviceOptions.prototype.loadTilesWhileInteracting;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{tracking: (boolean|undefined)}}
|
||||
* @api
|
||||
@@ -168,12 +194,11 @@ olx.interaction.InteractionOptions.prototype.handleEvent;
|
||||
/**
|
||||
* Object literal with config options for the map.
|
||||
* @typedef {{controls: (ol.Collection.<ol.control.Control>|Array.<ol.control.Control>|undefined),
|
||||
* deviceOptions: (olx.DeviceOptions|undefined),
|
||||
* pixelRatio: (number|undefined),
|
||||
* interactions: (ol.Collection.<ol.interaction.Interaction>|Array.<ol.interaction.Interaction>|undefined),
|
||||
* keyboardEventTarget: (Element|Document|string|undefined),
|
||||
* layers: (Array.<ol.layer.Base>|ol.Collection.<ol.layer.Base>|undefined),
|
||||
* loadTilesWhileAnimating: (boolean|undefined),
|
||||
* loadTilesWhileInteracting: (boolean|undefined),
|
||||
* logo: (boolean|string|olx.LogoOptions|undefined),
|
||||
* overlays: (ol.Collection.<ol.Overlay>|Array.<ol.Overlay>|undefined),
|
||||
* renderer: (ol.RendererType|Array.<ol.RendererType|string>|string|undefined),
|
||||
@@ -193,6 +218,14 @@ olx.MapOptions;
|
||||
olx.MapOptions.prototype.controls;
|
||||
|
||||
|
||||
/**
|
||||
* Device options for the map.
|
||||
* @type {olx.DeviceOptions|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.MapOptions.prototype.deviceOptions;
|
||||
|
||||
|
||||
/**
|
||||
* The ratio between physical pixels and device-independent pixels (dips) on the
|
||||
* device. If `undefined` then it gets set by using `window.devicePixelRatio`.
|
||||
@@ -233,26 +266,6 @@ olx.MapOptions.prototype.keyboardEventTarget;
|
||||
olx.MapOptions.prototype.layers;
|
||||
|
||||
|
||||
/**
|
||||
* When set to true, tiles will be loaded during animations. This may improve
|
||||
* the user experience, but can also make animations stutter on devices with
|
||||
* slow memory. Default is `false`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.MapOptions.prototype.loadTilesWhileAnimating;
|
||||
|
||||
|
||||
/**
|
||||
* When set to true, tiles will be loaded while interacting with the map. This
|
||||
* may improve the user experience, but can also make map panning and zooming
|
||||
* choppy on devices with slow memory. Default is `false`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.MapOptions.prototype.loadTilesWhileInteracting;
|
||||
|
||||
|
||||
/**
|
||||
* The map logo. A logo to be displayed on the map at all times. If a string is
|
||||
* provided, it will be set as the image source of the logo. If an object is
|
||||
@@ -806,8 +819,8 @@ olx.control;
|
||||
* collapsible: (boolean|undefined),
|
||||
* collapsed: (boolean|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* label: (string|Node|undefined),
|
||||
* collapseLabel: (string|Node|undefined),
|
||||
* label: (string|undefined),
|
||||
* collapseLabel: (string|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined)}}
|
||||
* @api
|
||||
@@ -859,17 +872,15 @@ olx.control.AttributionOptions.prototype.tipLabel;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the collapsed attributions button. Default is `i`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the collapsed attributions button. Default is `i`
|
||||
* @type {string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.AttributionOptions.prototype.label;
|
||||
|
||||
/**
|
||||
* Text label to use for the expanded attributions button. Default is `»`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the expanded attributions button. Default is `»`
|
||||
* @type {string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.AttributionOptions.prototype.collapseLabel;
|
||||
@@ -982,8 +993,6 @@ olx.control.DefaultsOptions.prototype.zoomOptions;
|
||||
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* label: (string|Node|undefined),
|
||||
* labelActive: (string|Node|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* keys: (boolean|undefined),
|
||||
* target: (Element|undefined)}}
|
||||
@@ -1000,25 +1009,6 @@ olx.control.FullScreenOptions;
|
||||
olx.control.FullScreenOptions.prototype.className;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the button. Default is `\u2194` (an arrow).
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.FullScreenOptions.prototype.label;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the button when full-screen is active.
|
||||
* Default is `\u00d7` (a cross).
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.FullScreenOptions.prototype.labelActive;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the button tip. Default is `Toggle full-screen`
|
||||
* @type {string|undefined}
|
||||
@@ -1106,9 +1096,9 @@ olx.control.MousePositionOptions.prototype.undefinedHTML;
|
||||
|
||||
/**
|
||||
* @typedef {{collapsed: (boolean|undefined),
|
||||
* collapseLabel: (string|Node|undefined),
|
||||
* collapseLabel: (string|undefined),
|
||||
* collapsible: (boolean|undefined),
|
||||
* label: (string|Node|undefined),
|
||||
* label: (string|undefined),
|
||||
* layers: (Array.<ol.layer.Layer>|ol.Collection|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
* target: (Element|undefined),
|
||||
@@ -1128,9 +1118,8 @@ olx.control.OverviewMapOptions.prototype.collapsed;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the expanded overviewmap button. Default is `«`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the expanded overviewmap button. Default is `«`
|
||||
* @type {string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.OverviewMapOptions.prototype.collapseLabel;
|
||||
@@ -1145,9 +1134,8 @@ olx.control.OverviewMapOptions.prototype.collapsible;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the collapsed overviewmap button. Default is `»`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the collapsed overviewmap button. Default is `»`
|
||||
* @type {string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.control.OverviewMapOptions.prototype.label;
|
||||
@@ -1243,7 +1231,7 @@ olx.control.ScaleLineOptions.prototype.units;
|
||||
/**
|
||||
* @typedef {{duration: (number|undefined),
|
||||
* className: (string|undefined),
|
||||
* label: (string|Node|undefined),
|
||||
* label: (string|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* target: (Element|undefined),
|
||||
* render: (function(ol.MapEvent)|undefined),
|
||||
@@ -1262,9 +1250,8 @@ olx.control.RotateOptions.prototype.className;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the rotate button. Default is `⇧`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the rotate button. Default is `⇧`
|
||||
* @type {string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.control.RotateOptions.prototype.label;
|
||||
@@ -1314,8 +1301,8 @@ olx.control.RotateOptions.prototype.target;
|
||||
/**
|
||||
* @typedef {{duration: (number|undefined),
|
||||
* className: (string|undefined),
|
||||
* zoomInLabel: (string|Node|undefined),
|
||||
* zoomOutLabel: (string|Node|undefined),
|
||||
* zoomInLabel: (string|undefined),
|
||||
* zoomOutLabel: (string|undefined),
|
||||
* zoomInTipLabel: (string|undefined),
|
||||
* zoomOutTipLabel: (string|undefined),
|
||||
* delta: (number|undefined),
|
||||
@@ -1342,18 +1329,16 @@ olx.control.ZoomOptions.prototype.className;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the zoom-in button. Default is `+`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the zoom-in button. Default is `+`
|
||||
* @type {string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.control.ZoomOptions.prototype.zoomInLabel;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the zoom-out button. Default is `-`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* Text label to use for the zoom-out button. Default is `-`
|
||||
* @type {string|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.control.ZoomOptions.prototype.zoomOutLabel;
|
||||
@@ -1437,7 +1422,6 @@ olx.control.ZoomSliderOptions.prototype.render;
|
||||
/**
|
||||
* @typedef {{className: (string|undefined),
|
||||
* target: (Element|undefined),
|
||||
* label: (string|Node|undefined),
|
||||
* tipLabel: (string|undefined),
|
||||
* extent: (ol.Extent|undefined)}}
|
||||
* @api stable
|
||||
@@ -1461,15 +1445,6 @@ olx.control.ZoomToExtentOptions.prototype.className;
|
||||
olx.control.ZoomToExtentOptions.prototype.target;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the button. Default is `E`.
|
||||
* Instead of text, also a Node (e.g. a `span` element) can be used.
|
||||
* @type {string|Node|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.control.ZoomToExtentOptions.prototype.label;
|
||||
|
||||
|
||||
/**
|
||||
* Text label to use for the button tip. Default is `Zoom to extent`
|
||||
* @type {string|undefined}
|
||||
@@ -1495,8 +1470,8 @@ olx.format;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{dataProjection: ol.proj.ProjectionLike,
|
||||
* featureProjection: ol.proj.ProjectionLike}}
|
||||
* @typedef {{dataProjection: (ol.proj.ProjectionLike|undefined),
|
||||
* featureProjection: (ol.proj.ProjectionLike|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.format.ReadOptions;
|
||||
@@ -1508,7 +1483,7 @@ olx.format.ReadOptions;
|
||||
* the format is assigned (where set). If the projection can not be derived from
|
||||
* the data and if no `defaultDataProjection` is set for a format, the features
|
||||
* will not be reprojected.
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.ReadOptions.prototype.dataProjection;
|
||||
@@ -1517,14 +1492,14 @@ olx.format.ReadOptions.prototype.dataProjection;
|
||||
/**
|
||||
* Projection of the feature geometries created by the format reader. If not
|
||||
* provided, features will be returned in the `dataProjection`.
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.ReadOptions.prototype.featureProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{dataProjection: ol.proj.ProjectionLike,
|
||||
* @typedef {{dataProjection: (ol.proj.ProjectionLike|undefined),
|
||||
* featureProjection: ol.proj.ProjectionLike}}
|
||||
* @api
|
||||
*/
|
||||
@@ -1536,7 +1511,7 @@ olx.format.WriteOptions;
|
||||
* `defaultDataProjection` of the format is assigned (where set). If no
|
||||
* `defaultDataProjection` is set for a format, the features will be returned
|
||||
* in the `featureProjection`.
|
||||
* @type {ol.proj.ProjectionLike}
|
||||
* @type {ol.proj.ProjectionLike|undefined}
|
||||
* @api stable
|
||||
*/
|
||||
olx.format.WriteOptions.prototype.dataProjection;
|
||||
@@ -2519,8 +2494,7 @@ olx.interaction.PointerOptions.prototype.handleUpEvent;
|
||||
* layers: (Array.<ol.layer.Layer>|function(ol.layer.Layer): boolean|undefined),
|
||||
* style: (ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction|undefined),
|
||||
* removeCondition: (ol.events.ConditionType|undefined),
|
||||
* toggleCondition: (ol.events.ConditionType|undefined),
|
||||
* multi: (boolean|undefined)}}
|
||||
* toggleCondition: (ol.events.ConditionType|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.SelectOptions;
|
||||
@@ -2597,15 +2571,6 @@ olx.interaction.SelectOptions.prototype.removeCondition;
|
||||
*/
|
||||
olx.interaction.SelectOptions.prototype.toggleCondition;
|
||||
|
||||
/**
|
||||
* A boolean that determines if the default behaviour should select only
|
||||
* single features or all (overlapping) features at the clicked map
|
||||
* position. Default is false i.e single select
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.interaction.SelectOptions.prototype.multi;
|
||||
|
||||
|
||||
/**
|
||||
* Namespace.
|
||||
@@ -3268,7 +3233,6 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError;
|
||||
* saturation: (number|undefined),
|
||||
* source: (ol.source.Vector|undefined),
|
||||
* style: (ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction|undefined),
|
||||
* updateWhileAnimating: (boolean|undefined),
|
||||
* visible: (boolean|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
@@ -3377,17 +3341,6 @@ olx.layer.VectorOptions.prototype.source;
|
||||
olx.layer.VectorOptions.prototype.style;
|
||||
|
||||
|
||||
/**
|
||||
* When set to `true`, feature batches will be recreated during animations.
|
||||
* This means that no vectors will be shown clipped, but the setting will have a
|
||||
* performance impact for large amounts of vector data. When set to `false`,
|
||||
* batches will be recreated when no animation is active. Default is `false`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.layer.VectorOptions.prototype.updateWhileAnimating;
|
||||
|
||||
|
||||
/**
|
||||
* Visibility. Default is `true` (visible).
|
||||
* @type {boolean|undefined}
|
||||
@@ -3441,8 +3394,7 @@ olx.source;
|
||||
* key: string,
|
||||
* imagerySet: string,
|
||||
* maxZoom: (number|undefined),
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||
* wrapX: (boolean|undefined)}}
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.BingMapsOptions;
|
||||
@@ -3488,15 +3440,6 @@ olx.source.BingMapsOptions.prototype.maxZoom;
|
||||
*/
|
||||
olx.source.BingMapsOptions.prototype.tileLoadFunction;
|
||||
|
||||
|
||||
/**
|
||||
* Whether to wrap the world horizontally. Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.BingMapsOptions.prototype.wrapX;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
|
||||
* distance: (number|undefined),
|
||||
@@ -3612,7 +3555,7 @@ olx.source.FormatVectorOptions.prototype.projection;
|
||||
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
|
||||
* defaultProjection: ol.proj.ProjectionLike,
|
||||
* logo: (string|olx.LogoOptions|undefined),
|
||||
* object: (GeoJSONFeature|GeoJSONFeatureCollection|undefined),
|
||||
* object: (GeoJSONObject|undefined),
|
||||
* projection: ol.proj.ProjectionLike,
|
||||
* text: (string|undefined),
|
||||
* url: (string|undefined),
|
||||
@@ -3647,8 +3590,8 @@ olx.source.GeoJSONOptions.prototype.logo;
|
||||
|
||||
|
||||
/**
|
||||
* GeoJSON feature or feature collection.
|
||||
* @type {GeoJSONFeature|GeoJSONFeatureCollection|undefined}
|
||||
* Object.
|
||||
* @type {GeoJSONObject|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.GeoJSONOptions.prototype.object;
|
||||
@@ -4311,8 +4254,7 @@ olx.source.KMLOptions.prototype.urls;
|
||||
|
||||
/**
|
||||
* @typedef {{layer: string,
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||
* url: (string|undefined)}}
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.MapQuestOptions;
|
||||
@@ -4334,14 +4276,6 @@ olx.source.MapQuestOptions.prototype.layer;
|
||||
olx.source.MapQuestOptions.prototype.tileLoadFunction;
|
||||
|
||||
|
||||
/**
|
||||
* URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.
|
||||
* @type {string|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.MapQuestOptions.prototype.url;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{projection: ol.proj.ProjectionLike,
|
||||
* tileGrid: (ol.tilegrid.TileGrid|undefined)}}
|
||||
@@ -4371,8 +4305,7 @@ olx.source.TileDebugOptions.prototype.tileGrid;
|
||||
* crossOrigin: (null|string|undefined),
|
||||
* maxZoom: (number|undefined),
|
||||
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
|
||||
* url: (string|undefined),
|
||||
* wrapX: (boolean|undefined)}}
|
||||
* url: (string|undefined)}}
|
||||
* @api
|
||||
*/
|
||||
olx.source.OSMOptions;
|
||||
@@ -4425,14 +4358,6 @@ olx.source.OSMOptions.prototype.tileLoadFunction;
|
||||
olx.source.OSMOptions.prototype.url;
|
||||
|
||||
|
||||
/**
|
||||
* Whether to wrap the world horizontally. Default is `true`.
|
||||
* @type {boolean|undefined}
|
||||
* @api
|
||||
*/
|
||||
olx.source.OSMOptions.prototype.wrapX;
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {{attributions: (Array.<ol.Attribution>|undefined),
|
||||
* doc: (Document|undefined),
|
||||
@@ -6580,13 +6505,6 @@ olx.ViewState;
|
||||
olx.ViewState.prototype.center;
|
||||
|
||||
|
||||
/**
|
||||
* @type {ol.proj.Projection}
|
||||
* @api
|
||||
*/
|
||||
olx.ViewState.prototype.projection;
|
||||
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
* @api
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "openlayers",
|
||||
"version": "3.2.0",
|
||||
"name": "openlayers-test",
|
||||
"version": "3.1.0-pre.4",
|
||||
"description": "Build tools and sources for developing OpenLayers based mapping applications",
|
||||
"keywords": [
|
||||
"map",
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "0.9.0",
|
||||
"closure-util": "1.3.0",
|
||||
"closure-util": "1.2.0",
|
||||
"fs-extra": "0.12.0",
|
||||
"graceful-fs": "3.0.2",
|
||||
"htmlparser2": "3.7.3",
|
||||
|
||||
@@ -29,13 +29,11 @@
|
||||
pairs = [],
|
||||
i,
|
||||
pair,
|
||||
adjusted,
|
||||
modeFound = false;
|
||||
adjusted;
|
||||
for (i = chunks.length - 1; i >= 0; --i) {
|
||||
pair = chunks[i].split('=');
|
||||
if (pair[0].toLowerCase() === 'mode') {
|
||||
pair[1] = newMode;
|
||||
modeFound = true;
|
||||
}
|
||||
adjusted = encodeURIComponent(pair[0]);
|
||||
if (typeof pair[1] !== undefined) {
|
||||
@@ -43,8 +41,8 @@
|
||||
}
|
||||
pairs.push(adjusted);
|
||||
}
|
||||
if (!modeFound) {
|
||||
pairs.push('mode=' + encodeURIComponent(newMode));
|
||||
if (pairs.length === 0) {
|
||||
pairs[0] = 'mode=' + encodeURIComponent(newMode);
|
||||
}
|
||||
location.href = baseUrl + '?' + pairs.join('&');
|
||||
};
|
||||
|
||||
@@ -95,7 +95,7 @@ ol.Collection = function(opt_array) {
|
||||
* @private
|
||||
* @type {Array.<T>}
|
||||
*/
|
||||
this.array_ = goog.isDef(opt_array) ? opt_array : [];
|
||||
this.array_ = opt_array || [];
|
||||
|
||||
this.updateLength_();
|
||||
|
||||
|
||||
@@ -69,33 +69,32 @@ ol.control.Attribution = function(opt_options) {
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Attributions';
|
||||
|
||||
var collapseLabel = goog.isDef(options.collapseLabel) ?
|
||||
/**
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
this.collapseLabel_ = goog.isDef(options.collapseLabel) ?
|
||||
options.collapseLabel : '\u00BB';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
* @type {string}
|
||||
*/
|
||||
this.collapseLabel_ = /** @type {Node} */ (goog.isString(collapseLabel) ?
|
||||
goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) :
|
||||
collapseLabel);
|
||||
this.label_ = goog.isDef(options.label) ? options.label : 'i';
|
||||
var label = goog.dom.createDom(goog.dom.TagName.SPAN, {},
|
||||
(this.collapsible_ && !this.collapsed_) ?
|
||||
this.collapseLabel_ : this.label_);
|
||||
|
||||
var label = goog.isDef(options.label) ? options.label : 'i';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
* @type {Element}
|
||||
*/
|
||||
this.label_ = /** @type {Node} */ (goog.isString(label) ?
|
||||
goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) :
|
||||
label);
|
||||
|
||||
var activeLabel = (this.collapsible_ && !this.collapsed_) ?
|
||||
this.collapseLabel_ : this.label_;
|
||||
this.labelSpan_ = label;
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, activeLabel);
|
||||
}, this.labelSpan_);
|
||||
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
@@ -342,11 +341,8 @@ ol.control.Attribution.prototype.handleClick_ = function(event) {
|
||||
*/
|
||||
ol.control.Attribution.prototype.handleToggle_ = function() {
|
||||
goog.dom.classlist.toggle(this.element, 'ol-collapsed');
|
||||
if (this.collapsed_) {
|
||||
goog.dom.replaceNode(this.collapseLabel_, this.label_);
|
||||
} else {
|
||||
goog.dom.replaceNode(this.label_, this.collapseLabel_);
|
||||
}
|
||||
goog.dom.setTextContent(this.labelSpan_,
|
||||
(this.collapsed_) ? this.collapseLabel_ : this.label_);
|
||||
this.collapsed_ = !this.collapsed_;
|
||||
};
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@ ol.control.Control = function(options) {
|
||||
* @private
|
||||
* @type {Element}
|
||||
*/
|
||||
this.target_ = null;
|
||||
this.target_ = goog.isDef(options.target) ?
|
||||
goog.dom.getElement(options.target) : null;
|
||||
|
||||
/**
|
||||
* @private
|
||||
@@ -70,10 +71,6 @@ ol.control.Control = function(options) {
|
||||
*/
|
||||
this.render = goog.isDef(options.render) ? options.render : goog.nullFunction;
|
||||
|
||||
if (goog.isDef(options.target)) {
|
||||
this.setTarget(options.target);
|
||||
}
|
||||
|
||||
};
|
||||
goog.inherits(ol.control.Control, ol.Object);
|
||||
|
||||
@@ -124,17 +121,3 @@ ol.control.Control.prototype.setMap = function(map) {
|
||||
map.render();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to set a target element for the control. It has no
|
||||
* effect if it is called after the control has been added to the map (i.e.
|
||||
* after `setMap` is called on the control). If no `target` is set in the
|
||||
* options passed to the control constructor and if `setTarget` is not called
|
||||
* then the control is added to the map's overlay container.
|
||||
* @param {Element|string} target Target.
|
||||
* @api
|
||||
*/
|
||||
ol.control.Control.prototype.setTarget = function(target) {
|
||||
this.target_ = goog.dom.getElement(target);
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@ goog.provide('ol.control.FullScreen');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.TagName');
|
||||
goog.require('goog.dom.classlist');
|
||||
goog.require('goog.dom.fullscreen');
|
||||
goog.require('goog.dom.fullscreen.EventType');
|
||||
goog.require('goog.events');
|
||||
@@ -36,32 +37,13 @@ ol.control.FullScreen = function(opt_options) {
|
||||
this.cssClassName_ = goog.isDef(options.className) ?
|
||||
options.className : 'ol-full-screen';
|
||||
|
||||
var label = goog.isDef(options.label) ? options.label : '\u2194';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
*/
|
||||
this.labelNode_ = /** @type {Node} */ (goog.isString(label) ?
|
||||
goog.dom.createTextNode(label) : label);
|
||||
|
||||
var labelActive = goog.isDef(options.labelActive) ?
|
||||
options.labelActive : '\u00d7';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
*/
|
||||
this.labelActiveNode_ = /** @type {Node} */ (goog.isString(labelActive) ?
|
||||
goog.dom.createTextNode(labelActive) : labelActive);
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Toggle full-screen';
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'class': this.cssClassName_ + '-' + goog.dom.fullscreen.isFullScreen(),
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, this.labelNode_);
|
||||
});
|
||||
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
@@ -138,11 +120,14 @@ ol.control.FullScreen.prototype.handleFullScreen_ = function() {
|
||||
* @private
|
||||
*/
|
||||
ol.control.FullScreen.prototype.handleFullScreenChange_ = function() {
|
||||
var opened = this.cssClassName_ + '-true';
|
||||
var closed = this.cssClassName_ + '-false';
|
||||
var anchor = goog.dom.getFirstElementChild(this.element);
|
||||
var map = this.getMap();
|
||||
if (goog.dom.fullscreen.isFullScreen()) {
|
||||
goog.dom.replaceNode(this.labelActiveNode_, this.labelNode_);
|
||||
goog.dom.classlist.swap(anchor, closed, opened);
|
||||
} else {
|
||||
goog.dom.replaceNode(this.labelNode_, this.labelActiveNode_);
|
||||
goog.dom.classlist.swap(anchor, opened, closed);
|
||||
}
|
||||
if (!goog.isNull(map)) {
|
||||
map.updateSize();
|
||||
|
||||
@@ -57,33 +57,31 @@ ol.control.OverviewMap = function(opt_options) {
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Overview map';
|
||||
|
||||
var collapseLabel = goog.isDef(options.collapseLabel) ?
|
||||
/**
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
this.collapseLabel_ = goog.isDef(options.collapseLabel) ?
|
||||
options.collapseLabel : '\u00AB';
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
* @type {string}
|
||||
*/
|
||||
this.collapseLabel_ = /** @type {Node} */ (goog.isString(collapseLabel) ?
|
||||
goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) :
|
||||
collapseLabel);
|
||||
|
||||
var label = goog.isDef(options.label) ? options.label : '\u00BB';
|
||||
this.label_ = goog.isDef(options.label) ? options.label : '\u00BB';
|
||||
var label = goog.dom.createDom(goog.dom.TagName.SPAN, {},
|
||||
(this.collapsible_ && !this.collapsed_) ?
|
||||
this.collapseLabel_ : this.label_);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Node}
|
||||
* @type {Element}
|
||||
*/
|
||||
this.label_ = /** @type {Node} */ (goog.isString(label) ?
|
||||
goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) :
|
||||
label);
|
||||
|
||||
var activeLabel = (this.collapsible_ && !this.collapsed_) ?
|
||||
this.collapseLabel_ : this.label_;
|
||||
this.labelSpan_ = label;
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, activeLabel);
|
||||
}, this.labelSpan_);
|
||||
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
@@ -429,11 +427,8 @@ ol.control.OverviewMap.prototype.handleClick_ = function(event) {
|
||||
*/
|
||||
ol.control.OverviewMap.prototype.handleToggle_ = function() {
|
||||
goog.dom.classlist.toggle(this.element, 'ol-collapsed');
|
||||
if (this.collapsed_) {
|
||||
goog.dom.replaceNode(this.collapseLabel_, this.label_);
|
||||
} else {
|
||||
goog.dom.replaceNode(this.label_, this.collapseLabel_);
|
||||
}
|
||||
goog.dom.setTextContent(this.labelSpan_,
|
||||
(this.collapsed_) ? this.collapseLabel_ : this.label_);
|
||||
this.collapsed_ = !this.collapsed_;
|
||||
|
||||
// manage overview map if it had not been rendered before and control
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.control.Rotate');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.TagName');
|
||||
goog.require('goog.dom.classlist');
|
||||
@@ -31,22 +32,12 @@ ol.control.Rotate = function(opt_options) {
|
||||
var className = goog.isDef(options.className) ?
|
||||
options.className : 'ol-rotate';
|
||||
|
||||
var label = goog.isDef(options.label) ?
|
||||
options.label : '\u21E7';
|
||||
|
||||
/**
|
||||
* @type {Node}
|
||||
* @type {Element}
|
||||
* @private
|
||||
*/
|
||||
this.label_ = null;
|
||||
|
||||
if (goog.isString(label)) {
|
||||
this.label_ = goog.dom.createDom(goog.dom.TagName.SPAN,
|
||||
'ol-compass', label);
|
||||
} else {
|
||||
this.label_ = label;
|
||||
goog.dom.classlist.add(this.label_, 'ol-compass');
|
||||
}
|
||||
this.label_ = goog.dom.createDom(goog.dom.TagName.SPAN,
|
||||
'ol-compass', goog.isDef(options.label) ? options.label : '\u21E7');
|
||||
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Reset rotation';
|
||||
|
||||
@@ -325,7 +325,7 @@ ol.control.ScaleLine.prototype.updateElement_ = function() {
|
||||
++i;
|
||||
}
|
||||
|
||||
var html = count + ' ' + suffix;
|
||||
var html = count + suffix;
|
||||
if (this.renderedHTML_ != html) {
|
||||
this.innerElement_.innerHTML = html;
|
||||
this.renderedHTML_ = html;
|
||||
|
||||
@@ -32,13 +32,12 @@ ol.control.ZoomToExtent = function(opt_options) {
|
||||
var className = goog.isDef(options.className) ? options.className :
|
||||
'ol-zoom-extent';
|
||||
|
||||
var label = goog.isDef(options.label) ? options.label : 'E';
|
||||
var tipLabel = goog.isDef(options.tipLabel) ?
|
||||
options.tipLabel : 'Fit to extent';
|
||||
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
|
||||
'type': 'button',
|
||||
'title': tipLabel
|
||||
}, label);
|
||||
});
|
||||
|
||||
goog.events.listen(button, goog.events.EventType.CLICK,
|
||||
this.handleClick_, false, this);
|
||||
|
||||
@@ -78,7 +78,7 @@ ol.FeatureOverlay = function(opt_options) {
|
||||
|
||||
if (goog.isDef(options.features)) {
|
||||
if (goog.isArray(options.features)) {
|
||||
this.setFeatures(new ol.Collection(options.features.slice()));
|
||||
this.setFeatures(new ol.Collection(goog.array.clone(options.features)));
|
||||
} else {
|
||||
goog.asserts.assertInstanceof(options.features, ol.Collection);
|
||||
this.setFeatures(options.features);
|
||||
@@ -112,15 +112,6 @@ ol.FeatureOverlay.prototype.getFeatures = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {?ol.Map} The map with which this feature overlay is associated.
|
||||
* @api
|
||||
*/
|
||||
ol.FeatureOverlay.prototype.getMap = function() {
|
||||
return this.map_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.format.Feature');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('ol.geom.Geometry');
|
||||
goog.require('ol.proj');
|
||||
|
||||
@@ -40,7 +41,8 @@ ol.format.Feature.prototype.getExtensions = goog.abstractMethod;
|
||||
* @return {olx.format.ReadOptions|undefined} Options.
|
||||
* @protected
|
||||
*/
|
||||
ol.format.Feature.prototype.getReadOptions = function(source, opt_options) {
|
||||
ol.format.Feature.prototype.getReadOptions = function(
|
||||
source, opt_options) {
|
||||
var options;
|
||||
if (goog.isDef(opt_options)) {
|
||||
options = {
|
||||
@@ -62,7 +64,8 @@ ol.format.Feature.prototype.getReadOptions = function(source, opt_options) {
|
||||
* @return {olx.format.WriteOptions|olx.format.ReadOptions|undefined}
|
||||
* Updated options.
|
||||
*/
|
||||
ol.format.Feature.prototype.adaptOptions = function(options) {
|
||||
ol.format.Feature.prototype.adaptOptions = function(
|
||||
options) {
|
||||
var updatedOptions;
|
||||
if (goog.isDef(options)) {
|
||||
updatedOptions = {
|
||||
@@ -174,7 +177,7 @@ ol.format.Feature.transformWithOptions = function(
|
||||
// FIXME this is necessary because ol.format.GML treats extents
|
||||
// as geometries
|
||||
return ol.proj.transformExtent(
|
||||
write ? geometry.slice() : geometry,
|
||||
write ? goog.array.clone(geometry) : geometry,
|
||||
write ? featureProjection : dataProjection,
|
||||
write ? dataProjection : featureProjection);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ ol.format.GeoJSON.EXTENSIONS_ = ['.geojson'];
|
||||
|
||||
|
||||
/**
|
||||
* @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.
|
||||
* @param {GeoJSONObject} object Object.
|
||||
* @param {olx.format.ReadOptions=} opt_options Read options.
|
||||
* @private
|
||||
* @return {ol.geom.Geometry} Geometry.
|
||||
@@ -92,7 +92,7 @@ ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(
|
||||
goog.asserts.assert(object.type == 'GeometryCollection');
|
||||
var geometries = goog.array.map(object.geometries,
|
||||
/**
|
||||
* @param {GeoJSONGeometry} geometry Geometry.
|
||||
* @param {GeoJSONObject} geometry Geometry.
|
||||
* @return {ol.geom.Geometry} geometry Geometry.
|
||||
*/
|
||||
function(geometry) {
|
||||
@@ -505,17 +505,18 @@ ol.format.GeoJSON.prototype.writeFeatureObject = function(
|
||||
};
|
||||
var id = feature.getId();
|
||||
if (goog.isDefAndNotNull(id)) {
|
||||
object['id'] = id;
|
||||
goog.object.set(object, 'id', id);
|
||||
}
|
||||
var geometry = feature.getGeometry();
|
||||
if (goog.isDefAndNotNull(geometry)) {
|
||||
object['geometry'] =
|
||||
ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
|
||||
goog.object.set(
|
||||
object, 'geometry',
|
||||
ol.format.GeoJSON.writeGeometry_(geometry, opt_options));
|
||||
}
|
||||
var properties = feature.getProperties();
|
||||
goog.object.remove(properties, feature.getGeometryName());
|
||||
if (!goog.object.isEmpty(properties)) {
|
||||
object['properties'] = properties;
|
||||
goog.object.set(object, 'properties', properties);
|
||||
}
|
||||
return object;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
goog.provide('ol.format.GML2');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.format.GML');
|
||||
goog.require('ol.format.GMLBase');
|
||||
@@ -42,8 +44,8 @@ goog.inherits(ol.format.GML2, ol.format.GMLBase);
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML2.schemaLocation_ = ol.format.GMLBase.GMLNS +
|
||||
' http://schemas.opengis.net/gml/2.1.2/feature.xsd';
|
||||
ol.format.GML2.schemaLocation_ = 'http://www.opengis.net/gml ' +
|
||||
'http://schemas.opengis.net/gml/2.1.2/feature.xsd';
|
||||
|
||||
|
||||
/**
|
||||
@@ -56,7 +58,7 @@ ol.format.GML2.prototype.readFlatCoordinates_ = function(node, objectStack) {
|
||||
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var containerSrs = context['srsName'];
|
||||
var containerSrs = goog.object.get(context, 'srsName');
|
||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
||||
var axisOrientation = 'enu';
|
||||
if (!goog.isNull(containerSrs)) {
|
||||
|
||||
@@ -3,6 +3,7 @@ goog.provide('ol.format.GML3');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Feature');
|
||||
@@ -83,8 +84,8 @@ goog.inherits(ol.format.GML3, ol.format.GMLBase);
|
||||
* @type {string}
|
||||
* @private
|
||||
*/
|
||||
ol.format.GML3.schemaLocation_ = ol.format.GMLBase.GMLNS +
|
||||
' http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +
|
||||
ol.format.GML3.schemaLocation_ = 'http://www.opengis.net/gml ' +
|
||||
'http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +
|
||||
'1.0.0/gmlsf.xsd';
|
||||
|
||||
|
||||
@@ -355,7 +356,7 @@ ol.format.GML3.prototype.readFlatPos_ = function(node, objectStack) {
|
||||
}
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var containerSrs = context['srsName'];
|
||||
var containerSrs = goog.object.get(context, 'srsName');
|
||||
var axisOrientation = 'enu';
|
||||
if (!goog.isNull(containerSrs)) {
|
||||
var proj = ol.proj.get(containerSrs);
|
||||
@@ -391,7 +392,7 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
|
||||
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var containerSrs = context['srsName'];
|
||||
var containerSrs = goog.object.get(context, 'srsName');
|
||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
||||
var axisOrientation = 'enu';
|
||||
if (!goog.isNull(containerSrs)) {
|
||||
@@ -613,7 +614,7 @@ ol.format.GML3.prototype.SEGMENTS_PARSERS_ = Object({
|
||||
ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
var axisOrientation = 'enu';
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
axisOrientation = ol.proj.get(srsName).getAxisOrientation();
|
||||
@@ -656,7 +657,7 @@ ol.format.GML3.prototype.getCoords_ = function(point, opt_srsName) {
|
||||
ol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
// only 2d for simple features profile
|
||||
var points = value.getCoordinates();
|
||||
var len = points.length;
|
||||
@@ -679,7 +680,7 @@ ol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {
|
||||
ol.format.GML3.prototype.writePoint_ = function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -710,7 +711,7 @@ ol.format.GML3.prototype.writeEnvelope = function(node, extent, objectStack) {
|
||||
goog.asserts.assert(extent.length == 4);
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (goog.isDef(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -734,7 +735,7 @@ ol.format.GML3.prototype.writeLinearRing_ =
|
||||
function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -756,9 +757,9 @@ ol.format.GML3.prototype.RING_NODE_FACTORY_ =
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
var parentNode = context.node;
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var exteriorWritten = context['exteriorWritten'];
|
||||
var exteriorWritten = goog.object.get(context, 'exteriorWritten');
|
||||
if (!goog.isDef(exteriorWritten)) {
|
||||
context['exteriorWritten'] = true;
|
||||
goog.object.set(context, 'exteriorWritten', true);
|
||||
}
|
||||
return ol.xml.createElementNS(parentNode.namespaceURI,
|
||||
goog.isDef(exteriorWritten) ? 'interior' : 'exterior');
|
||||
@@ -775,7 +776,7 @@ ol.format.GML3.prototype.writeSurfaceOrPolygon_ =
|
||||
function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (node.nodeName !== 'PolygonPatch' && goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -805,7 +806,7 @@ ol.format.GML3.prototype.writeCurveOrLineString_ =
|
||||
function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (node.nodeName !== 'LineStringSegment' &&
|
||||
goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
@@ -834,8 +835,8 @@ ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_ =
|
||||
function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var surface = context['surface'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
var surface = goog.object.get(context, 'surface');
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -857,7 +858,7 @@ ol.format.GML3.prototype.writeMultiPoint_ = function(node, geometry,
|
||||
objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -879,8 +880,8 @@ ol.format.GML3.prototype.writeMultiCurveOrLineString_ =
|
||||
function(node, geometry, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var srsName = context['srsName'];
|
||||
var curve = context['curve'];
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
var curve = goog.object.get(context, 'curve');
|
||||
if (goog.isDefAndNotNull(srsName)) {
|
||||
node.setAttribute('srsName', srsName);
|
||||
}
|
||||
@@ -1029,7 +1030,7 @@ ol.format.GML3.prototype.writeFeatureElement =
|
||||
}
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureNS = context['featureNS'];
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
var geometryName = feature.getGeometryName();
|
||||
if (!goog.isDef(context.serializers)) {
|
||||
context.serializers = {};
|
||||
@@ -1075,8 +1076,8 @@ ol.format.GML3.prototype.writeFeatureMembers_ =
|
||||
function(node, features, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = context['featureType'];
|
||||
var featureNS = context['featureNS'];
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
var serializers = {};
|
||||
serializers[featureNS] = {};
|
||||
serializers[featureNS][featureType] = ol.xml.makeChildAppender(
|
||||
@@ -1218,10 +1219,10 @@ ol.format.GML3.prototype.GEOMETRY_NODE_FACTORY_ =
|
||||
function(value, objectStack, opt_nodeName) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var multiSurface = context['multiSurface'];
|
||||
var surface = context['surface'];
|
||||
var curve = context['curve'];
|
||||
var multiCurve = context['multiCurve'];
|
||||
var multiSurface = goog.object.get(context, 'multiSurface');
|
||||
var surface = goog.object.get(context, 'surface');
|
||||
var curve = goog.object.get(context, 'curve');
|
||||
var multiCurve = goog.object.get(context, 'multiCurve');
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
goog.asserts.assert(ol.xml.isNode(parentNode));
|
||||
var nodeName;
|
||||
@@ -1342,7 +1343,7 @@ ol.format.GML.prototype.writeFeatures;
|
||||
* Encode an array of features in the GML 3.1.1 format as an XML node.
|
||||
*
|
||||
* @function
|
||||
* @param {Array.<ol.Feature>} features Features.
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {olx.format.WriteOptions=} opt_options Options.
|
||||
* @return {Node} Node.
|
||||
* @api
|
||||
|
||||
@@ -5,6 +5,7 @@ goog.provide('ol.format.GMLBase');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
@@ -67,35 +68,18 @@ ol.format.GMLBase = function(opt_options) {
|
||||
*/
|
||||
this.schemaLocation = '';
|
||||
|
||||
/**
|
||||
* @type {Object.<string, Object.<string, Object>>}
|
||||
*/
|
||||
this.FEATURE_COLLECTION_PARSERS = {};
|
||||
this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS] = {
|
||||
'featureMember': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readFeaturesInternal),
|
||||
'featureMembers': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readFeaturesInternal)
|
||||
};
|
||||
|
||||
goog.base(this);
|
||||
};
|
||||
goog.inherits(ol.format.GMLBase, ol.format.XMLFeature);
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
*/
|
||||
ol.format.GMLBase.GMLNS = 'http://www.opengis.net/gml';
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Array.<ol.Feature>} Features.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
||||
ol.format.GMLBase.prototype.readFeatures_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
var localName = ol.xml.getLocalName(node);
|
||||
var features;
|
||||
@@ -106,19 +90,19 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
||||
} else if (localName == 'featureMembers' || localName == 'featureMember') {
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = context['featureType'];
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
if (!goog.isDef(featureType) && !goog.isNull(node.firstElementChild)) {
|
||||
var member = node.firstElementChild;
|
||||
featureType = member.nodeName.split(':').pop();
|
||||
context['featureType'] = featureType;
|
||||
context['featureNS'] = member.namespaceURI;
|
||||
goog.object.set(context, 'featureType', featureType);
|
||||
goog.object.set(context, 'featureNS', member.namespaceURI);
|
||||
}
|
||||
var parsers = {};
|
||||
var parsersNS = {};
|
||||
parsers[featureType] = (localName == 'featureMembers') ?
|
||||
ol.xml.makeArrayPusher(this.readFeatureElement, this) :
|
||||
ol.xml.makeReplacer(this.readFeatureElement, this);
|
||||
parsersNS[context['featureNS']] = parsers;
|
||||
parsersNS[goog.object.get(context, 'featureNS')] = parsers;
|
||||
features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);
|
||||
}
|
||||
if (!goog.isDef(features)) {
|
||||
@@ -128,6 +112,19 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @type {Object.<string, Object.<string, Object>>}
|
||||
*/
|
||||
ol.format.GMLBase.prototype.FEATURE_COLLECTION_PARSERS = Object({
|
||||
'http://www.opengis.net/gml': {
|
||||
'featureMember': ol.xml.makeArrayPusher(
|
||||
ol.format.GMLBase.prototype.readFeatures_),
|
||||
'featureMembers': ol.xml.makeReplacer(
|
||||
ol.format.GMLBase.prototype.readFeatures_)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
@@ -136,7 +133,8 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
||||
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
||||
var context = objectStack[0];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
context['srsName'] = node.firstElementChild.getAttribute('srsName');
|
||||
goog.object.set(context, 'srsName',
|
||||
node.firstElementChild.getAttribute('srsName'));
|
||||
var geometry = ol.xml.pushParseAndPop(/** @type {ol.geom.Geometry} */(null),
|
||||
this.GEOMETRY_PARSERS_, node, objectStack, this);
|
||||
if (goog.isDefAndNotNull(geometry)) {
|
||||
@@ -156,7 +154,7 @@ ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
||||
ol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {
|
||||
var n;
|
||||
var fid = node.getAttribute('fid') ||
|
||||
ol.xml.getAttributeNS(node, ol.format.GMLBase.GMLNS, 'id');
|
||||
ol.xml.getAttributeNS(node, 'http://www.opengis.net/gml', 'id');
|
||||
var values = {}, geometryName;
|
||||
for (n = node.firstElementChild; !goog.isNull(n);
|
||||
n = n.nextElementSibling) {
|
||||
@@ -552,7 +550,7 @@ ol.format.GMLBase.prototype.readFeaturesFromNode =
|
||||
if (goog.isDef(opt_options)) {
|
||||
goog.object.extend(options, this.getReadOptions(node, opt_options));
|
||||
}
|
||||
return this.readFeaturesInternal(node, [options]);
|
||||
return this.readFeatures_(node, [options]);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -71,14 +71,14 @@ ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) {
|
||||
parseFloat(node.getAttribute('lat')));
|
||||
if (goog.object.containsKey(values, 'ele')) {
|
||||
flatCoordinates.push(
|
||||
/** @type {number} */ (values['ele']));
|
||||
/** @type {number} */ (goog.object.get(values, 'ele')));
|
||||
goog.object.remove(values, 'ele');
|
||||
} else {
|
||||
flatCoordinates.push(0);
|
||||
}
|
||||
if (goog.object.containsKey(values, 'time')) {
|
||||
flatCoordinates.push(
|
||||
/** @type {number} */ (values['time']));
|
||||
/** @type {number} */ (goog.object.get(values, 'time')));
|
||||
goog.object.remove(values, 'time');
|
||||
} else {
|
||||
flatCoordinates.push(0);
|
||||
@@ -98,7 +98,7 @@ ol.format.GPX.parseLink_ = function(node, objectStack) {
|
||||
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
var href = node.getAttribute('href');
|
||||
if (!goog.isNull(href)) {
|
||||
values['link'] = href;
|
||||
goog.object.set(values, 'link', href);
|
||||
}
|
||||
ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack);
|
||||
};
|
||||
@@ -113,7 +113,7 @@ ol.format.GPX.parseExtensions_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'extensions');
|
||||
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
values['extensionsNode_'] = node;
|
||||
goog.object.set(values, 'extensionsNode_', node);
|
||||
};
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ ol.format.GPX.parseRtePt_ = function(node, objectStack) {
|
||||
if (goog.isDef(values)) {
|
||||
var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(rteValues['flatCoordinates']);
|
||||
(goog.object.get(rteValues, 'flatCoordinates'));
|
||||
ol.format.GPX.appendCoordinate_(flatCoordinates, node, values);
|
||||
}
|
||||
};
|
||||
@@ -149,7 +149,7 @@ ol.format.GPX.parseTrkPt_ = function(node, objectStack) {
|
||||
if (goog.isDef(values)) {
|
||||
var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(trkValues['flatCoordinates']);
|
||||
(goog.object.get(trkValues, 'flatCoordinates'));
|
||||
ol.format.GPX.appendCoordinate_(flatCoordinates, node, values);
|
||||
}
|
||||
};
|
||||
@@ -166,8 +166,8 @@ ol.format.GPX.parseTrkSeg_ = function(node, objectStack) {
|
||||
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
ol.xml.parseNode(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(values['flatCoordinates']);
|
||||
var ends = /** @type {Array.<number>} */ (values['ends']);
|
||||
(goog.object.get(values, 'flatCoordinates'));
|
||||
var ends = /** @type {Array.<number>} */ (goog.object.get(values, 'ends'));
|
||||
ends.push(flatCoordinates.length);
|
||||
};
|
||||
|
||||
@@ -189,7 +189,7 @@ ol.format.GPX.readRte_ = function(node, objectStack) {
|
||||
return undefined;
|
||||
}
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(values['flatCoordinates']);
|
||||
(goog.object.get(values, 'flatCoordinates'));
|
||||
goog.object.remove(values, 'flatCoordinates');
|
||||
var geometry = new ol.geom.LineString(null);
|
||||
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
|
||||
@@ -218,9 +218,9 @@ ol.format.GPX.readTrk_ = function(node, objectStack) {
|
||||
return undefined;
|
||||
}
|
||||
var flatCoordinates = /** @type {Array.<number>} */
|
||||
(values['flatCoordinates']);
|
||||
(goog.object.get(values, 'flatCoordinates'));
|
||||
goog.object.remove(values, 'flatCoordinates');
|
||||
var ends = /** @type {Array.<number>} */ (values['ends']);
|
||||
var ends = /** @type {Array.<number>} */ (goog.object.get(values, 'ends'));
|
||||
goog.object.remove(values, 'ends');
|
||||
var geometry = new ol.geom.MultiLineString(null);
|
||||
geometry.setFlatCoordinates(
|
||||
@@ -501,6 +501,22 @@ ol.format.GPX.prototype.readFeaturesFromNode = function(node, opt_options) {
|
||||
ol.format.GPX.prototype.readProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.GPX.prototype.readProjectionFromDocument = function(doc) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.GPX.prototype.readProjectionFromNode = function(node) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {string} value Value for the link's `href` attribute.
|
||||
@@ -511,10 +527,10 @@ ol.format.GPX.writeLink_ = function(node, value, objectStack) {
|
||||
node.setAttribute('href', value);
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var properties = context['properties'];
|
||||
var properties = goog.object.get(context, 'properties');
|
||||
var link = [
|
||||
properties['linkText'],
|
||||
properties['linkType']
|
||||
goog.object.get(properties, 'linkText'),
|
||||
goog.object.get(properties, 'linkType')
|
||||
];
|
||||
ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ ({node: node}),
|
||||
ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
|
||||
@@ -534,25 +550,25 @@ ol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) {
|
||||
var parentNode = context.node;
|
||||
goog.asserts.assert(ol.xml.isNode(parentNode));
|
||||
var namespaceURI = parentNode.namespaceURI;
|
||||
var properties = context['properties'];
|
||||
var properties = goog.object.get(context, 'properties');
|
||||
//FIXME Projection handling
|
||||
ol.xml.setAttributeNS(node, null, 'lat', coordinate[1]);
|
||||
ol.xml.setAttributeNS(node, null, 'lon', coordinate[0]);
|
||||
var geometryLayout = context['geometryLayout'];
|
||||
var geometryLayout = goog.object.get(context, 'geometryLayout');
|
||||
/* jshint -W086 */
|
||||
switch (geometryLayout) {
|
||||
case ol.geom.GeometryLayout.XYZM:
|
||||
if (coordinate[3] !== 0) {
|
||||
properties['time'] = coordinate[3];
|
||||
goog.object.set(properties, 'time', coordinate[3]);
|
||||
}
|
||||
case ol.geom.GeometryLayout.XYZ:
|
||||
if (coordinate[2] !== 0) {
|
||||
properties['ele'] = coordinate[2];
|
||||
goog.object.set(properties, 'ele', coordinate[2]);
|
||||
}
|
||||
break;
|
||||
case ol.geom.GeometryLayout.XYM:
|
||||
if (coordinate[2] !== 0) {
|
||||
properties['time'] = coordinate[2];
|
||||
goog.object.set(properties, 'time', coordinate[2]);
|
||||
}
|
||||
}
|
||||
/* jshint +W086 */
|
||||
@@ -580,8 +596,8 @@ ol.format.GPX.writeRte_ = function(node, feature, objectStack) {
|
||||
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||
geometry = /** @type {ol.geom.LineString} */
|
||||
(ol.format.Feature.transformWithOptions(geometry, true, options));
|
||||
context['geometryLayout'] = geometry.getLayout();
|
||||
properties['rtept'] = geometry.getCoordinates();
|
||||
goog.object.set(context, 'geometryLayout', geometry.getLayout());
|
||||
goog.object.set(properties, 'rtept', geometry.getCoordinates());
|
||||
}
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI];
|
||||
@@ -607,7 +623,7 @@ ol.format.GPX.writeTrk_ = function(node, feature, objectStack) {
|
||||
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
|
||||
geometry = /** @type {ol.geom.MultiLineString} */
|
||||
(ol.format.Feature.transformWithOptions(geometry, true, options));
|
||||
properties['trkseg'] = geometry.getLineStrings();
|
||||
goog.object.set(properties, 'trkseg', geometry.getLineStrings());
|
||||
}
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI];
|
||||
@@ -643,13 +659,13 @@ ol.format.GPX.writeWpt_ = function(node, feature, objectStack) {
|
||||
var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
context['properties'] = feature.getProperties();
|
||||
goog.object.set(context, 'properties', feature.getProperties());
|
||||
var geometry = feature.getGeometry();
|
||||
if (goog.isDef(geometry)) {
|
||||
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
|
||||
geometry = /** @type {ol.geom.Point} */
|
||||
(ol.format.Feature.transformWithOptions(geometry, true, options));
|
||||
context['geometryLayout'] = geometry.getLayout();
|
||||
goog.object.set(context, 'geometryLayout', geometry.getLayout());
|
||||
ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack);
|
||||
}
|
||||
};
|
||||
@@ -738,7 +754,10 @@ ol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS(
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {function(*, Array.<*>, string=): (Node|undefined)}
|
||||
* @param {*} value Value.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @param {string=} opt_nodeName Node name.
|
||||
* @return {Node|undefined} Node.
|
||||
* @private
|
||||
*/
|
||||
ol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('trkpt');
|
||||
|
||||
@@ -218,3 +218,11 @@ ol.format.IGC.prototype.readFeaturesFromText = function(text, opt_options) {
|
||||
* @api
|
||||
*/
|
||||
ol.format.IGC.prototype.readProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.IGC.prototype.readProjectionFromText = function(text) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
@@ -208,7 +208,7 @@ ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({
|
||||
* @type {ol.Size}
|
||||
* @private
|
||||
*/
|
||||
ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [20, 2]; // FIXME maybe [8, 32] ?
|
||||
ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [2, 20]; // FIXME maybe [8, 32] ?
|
||||
|
||||
|
||||
/**
|
||||
@@ -234,7 +234,7 @@ ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ =
|
||||
* @type {ol.Size}
|
||||
* @private
|
||||
*/
|
||||
ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [64, 64];
|
||||
ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [32, 32];
|
||||
|
||||
|
||||
/**
|
||||
@@ -253,12 +253,11 @@ ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ =
|
||||
*/
|
||||
ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({
|
||||
anchor: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_,
|
||||
anchorOrigin: ol.style.IconOrigin.BOTTOM_LEFT,
|
||||
anchorXUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_,
|
||||
anchorYUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_,
|
||||
crossOrigin: 'anonymous',
|
||||
rotation: 0,
|
||||
scale: 0.5,
|
||||
scale: 1,
|
||||
size: ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_,
|
||||
src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_
|
||||
});
|
||||
@@ -473,7 +472,7 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
||||
var IconObject = /** @type {Object} */ (goog.object.get(object, 'Icon', {}));
|
||||
var src;
|
||||
var href = /** @type {string|undefined} */
|
||||
(IconObject['href']);
|
||||
(goog.object.get(IconObject, 'href'));
|
||||
if (goog.isDef(href)) {
|
||||
src = href;
|
||||
} else {
|
||||
@@ -481,7 +480,7 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
||||
}
|
||||
var anchor, anchorXUnits, anchorYUnits;
|
||||
var hotSpot = /** @type {ol.format.KMLVec2_|undefined} */
|
||||
(object['hotSpot']);
|
||||
(goog.object.get(object, 'hotSpot'));
|
||||
if (goog.isDef(hotSpot)) {
|
||||
anchor = [hotSpot.x, hotSpot.y];
|
||||
anchorXUnits = hotSpot.xunits;
|
||||
@@ -498,31 +497,31 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
||||
|
||||
var offset;
|
||||
var x = /** @type {number|undefined} */
|
||||
(IconObject['x']);
|
||||
(goog.object.get(IconObject, 'x'));
|
||||
var y = /** @type {number|undefined} */
|
||||
(IconObject['y']);
|
||||
(goog.object.get(IconObject, 'y'));
|
||||
if (goog.isDef(x) && goog.isDef(y)) {
|
||||
offset = [x, y];
|
||||
}
|
||||
|
||||
var size;
|
||||
var w = /** @type {number|undefined} */
|
||||
(IconObject['w']);
|
||||
(goog.object.get(IconObject, 'w'));
|
||||
var h = /** @type {number|undefined} */
|
||||
(IconObject['h']);
|
||||
(goog.object.get(IconObject, 'h'));
|
||||
if (goog.isDef(w) && goog.isDef(h)) {
|
||||
size = [w, h];
|
||||
}
|
||||
|
||||
var rotation;
|
||||
var heading = /** @type {number|undefined} */
|
||||
(object['heading']);
|
||||
(goog.object.get(object, 'heading'));
|
||||
if (goog.isDef(heading)) {
|
||||
rotation = goog.math.toRadians(heading);
|
||||
}
|
||||
|
||||
var scale = /** @type {number|undefined} */
|
||||
(object['scale']);
|
||||
(goog.object.get(object, 'scale'));
|
||||
if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
|
||||
size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
|
||||
}
|
||||
@@ -540,7 +539,7 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
|
||||
size: size,
|
||||
src: src
|
||||
});
|
||||
styleObject['imageStyle'] = imageStyle;
|
||||
goog.object.set(styleObject, 'imageStyle', imageStyle);
|
||||
};
|
||||
|
||||
|
||||
@@ -566,9 +565,9 @@ ol.format.KML.LabelStyleParser_ = function(node, objectStack) {
|
||||
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_))
|
||||
}),
|
||||
scale: /** @type {number|undefined} */
|
||||
(object['scale'])
|
||||
(goog.object.get(object, 'scale'))
|
||||
});
|
||||
styleObject['textStyle'] = textStyle;
|
||||
goog.object.set(styleObject, 'textStyle', textStyle);
|
||||
};
|
||||
|
||||
|
||||
@@ -597,7 +596,7 @@ ol.format.KML.LineStyleParser_ = function(node, objectStack) {
|
||||
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)),
|
||||
width: /** @type {number} */ (goog.object.get(object, 'width', 1))
|
||||
});
|
||||
styleObject['strokeStyle'] = strokeStyle;
|
||||
goog.object.set(styleObject, 'strokeStyle', strokeStyle);
|
||||
};
|
||||
|
||||
|
||||
@@ -621,15 +620,15 @@ ol.format.KML.PolyStyleParser_ = function(node, objectStack) {
|
||||
color: /** @type {ol.Color} */
|
||||
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_))
|
||||
});
|
||||
styleObject['fillStyle'] = fillStyle;
|
||||
var fill = /** @type {boolean|undefined} */ (object['fill']);
|
||||
goog.object.set(styleObject, 'fillStyle', fillStyle);
|
||||
var fill = /** @type {boolean|undefined} */ (goog.object.get(object, 'fill'));
|
||||
if (goog.isDef(fill)) {
|
||||
styleObject['fill'] = fill;
|
||||
goog.object.set(styleObject, 'fill', fill);
|
||||
}
|
||||
var outline =
|
||||
/** @type {boolean|undefined} */ (object['outline']);
|
||||
/** @type {boolean|undefined} */ (goog.object.get(object, 'outline'));
|
||||
if (goog.isDef(outline)) {
|
||||
styleObject['outline'] = outline;
|
||||
goog.object.set(styleObject, 'outline', outline);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -945,7 +944,7 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
|
||||
var fillStyle = /** @type {ol.style.Fill} */ (goog.object.get(
|
||||
styleObject, 'fillStyle', ol.format.KML.DEFAULT_FILL_STYLE_));
|
||||
var fill = /** @type {boolean|undefined} */
|
||||
(styleObject['fill']);
|
||||
(goog.object.get(styleObject, 'fill'));
|
||||
if (goog.isDef(fill) && !fill) {
|
||||
fillStyle = null;
|
||||
}
|
||||
@@ -956,7 +955,7 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
|
||||
var strokeStyle = /** @type {ol.style.Stroke} */ (goog.object.get(
|
||||
styleObject, 'strokeStyle', ol.format.KML.DEFAULT_STROKE_STYLE_));
|
||||
var outline = /** @type {boolean|undefined} */
|
||||
(styleObject['outline']);
|
||||
(goog.object.get(styleObject, 'outline'));
|
||||
if (goog.isDef(outline) && !outline) {
|
||||
strokeStyle = null;
|
||||
}
|
||||
@@ -986,7 +985,7 @@ ol.format.KML.DataParser_ = function(node, objectStack) {
|
||||
var featureObject =
|
||||
/** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
goog.asserts.assert(goog.isObject(featureObject));
|
||||
featureObject[name] = data;
|
||||
goog.object.set(featureObject, name, data);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -1018,15 +1017,15 @@ ol.format.KML.PairDataParser_ = function(node, objectStack) {
|
||||
return;
|
||||
}
|
||||
var key = /** @type {string|undefined} */
|
||||
(pairObject['key']);
|
||||
(goog.object.get(pairObject, 'key'));
|
||||
if (goog.isDef(key) && key == 'normal') {
|
||||
var styleUrl = /** @type {string|undefined} */
|
||||
(pairObject['styleUrl']);
|
||||
(goog.object.get(pairObject, 'styleUrl'));
|
||||
if (goog.isDef(styleUrl)) {
|
||||
objectStack[objectStack.length - 1] = styleUrl;
|
||||
}
|
||||
var Style = /** @type {ol.style.Style} */
|
||||
(pairObject['Style']);
|
||||
(goog.object.get(pairObject, 'Style'));
|
||||
if (goog.isDef(Style)) {
|
||||
objectStack[objectStack.length - 1] = Style;
|
||||
}
|
||||
@@ -1049,9 +1048,9 @@ ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {
|
||||
var placemarkObject = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(placemarkObject));
|
||||
if (goog.isArray(styleMapValue)) {
|
||||
placemarkObject['Style'] = styleMapValue;
|
||||
goog.object.set(placemarkObject, 'Style', styleMapValue);
|
||||
} else if (goog.isString(styleMapValue)) {
|
||||
placemarkObject['styleUrl'] = styleMapValue;
|
||||
goog.object.set(placemarkObject, 'styleUrl', styleMapValue);
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
}
|
||||
@@ -1083,7 +1082,7 @@ ol.format.KML.SimpleDataParser_ = function(node, objectStack) {
|
||||
var data = ol.format.XSD.readString(node);
|
||||
var featureObject =
|
||||
/** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
featureObject[name] = data;
|
||||
goog.object.set(featureObject, name, data);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1130,18 +1129,6 @@ ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
*/
|
||||
ol.format.KML.LinkParser_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Link');
|
||||
ol.xml.parseNode(ol.format.KML.LINK_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
@@ -1343,35 +1330,6 @@ ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.KML.NAMESPACE_URIS_, {
|
||||
'ExtendedData': ol.format.KML.ExtendedDataParser_,
|
||||
'Link': ol.format.KML.LinkParser_,
|
||||
'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
|
||||
'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.KML.LINK_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.KML.NAMESPACE_URIS_, {
|
||||
'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
@@ -1752,71 +1710,6 @@ ol.format.KML.prototype.readNameFromNode = function(node) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Document|Node|string} source Souce.
|
||||
* @return {Array.<Object>} Network links.
|
||||
* @api
|
||||
*/
|
||||
ol.format.KML.prototype.readNetworkLinks = function(source) {
|
||||
var networkLinks = [];
|
||||
if (ol.xml.isDocument(source)) {
|
||||
goog.array.extend(networkLinks, this.readNetworkLinksFromDocument(
|
||||
/** @type {Document} */ (source)));
|
||||
} else if (ol.xml.isNode(source)) {
|
||||
goog.array.extend(networkLinks, this.readNetworkLinksFromNode(
|
||||
/** @type {Node} */ (source)));
|
||||
} else if (goog.isString(source)) {
|
||||
var doc = ol.xml.parse(source);
|
||||
goog.array.extend(networkLinks, this.readNetworkLinksFromDocument(doc));
|
||||
} else {
|
||||
goog.asserts.fail();
|
||||
}
|
||||
return networkLinks;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Document} doc Document.
|
||||
* @return {Array.<Object>} Network links.
|
||||
*/
|
||||
ol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) {
|
||||
var n, networkLinks = [];
|
||||
for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) {
|
||||
if (n.nodeType == goog.dom.NodeType.ELEMENT) {
|
||||
goog.array.extend(networkLinks, this.readNetworkLinksFromNode(n));
|
||||
}
|
||||
}
|
||||
return networkLinks;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @return {Array.<Object>} Network links.
|
||||
*/
|
||||
ol.format.KML.prototype.readNetworkLinksFromNode = function(node) {
|
||||
var n, networkLinks = [];
|
||||
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) {
|
||||
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
|
||||
n.localName == 'NetworkLink') {
|
||||
var obj = ol.xml.pushParseAndPop({}, ol.format.KML.NETWORK_LINK_PARSERS_,
|
||||
n, []);
|
||||
networkLinks.push(obj);
|
||||
}
|
||||
}
|
||||
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) {
|
||||
var localName = ol.xml.getLocalName(n);
|
||||
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
|
||||
(localName == 'Document' ||
|
||||
localName == 'Folder' ||
|
||||
localName == 'kml')) {
|
||||
goog.array.extend(networkLinks, this.readNetworkLinksFromNode(n));
|
||||
}
|
||||
}
|
||||
return networkLinks;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Read the projection from a KML source.
|
||||
*
|
||||
@@ -1828,6 +1721,22 @@ ol.format.KML.prototype.readNetworkLinksFromNode = function(node) {
|
||||
ol.format.KML.prototype.readProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.KML.prototype.readProjectionFromDocument = function(doc) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.KML.prototype.readProjectionFromNode = function(node) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node to append a TextNode with the color to.
|
||||
* @param {ol.Color|string} color Color.
|
||||
@@ -1857,8 +1766,8 @@ ol.format.KML.writeCoordinatesTextNode_ =
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
|
||||
var layout = context['layout'];
|
||||
var stride = context['stride'];
|
||||
var layout = goog.object.get(context, 'layout');
|
||||
var stride = goog.object.get(context, 'stride');
|
||||
|
||||
var dimension;
|
||||
if (layout == ol.geom.GeometryLayout.XY ||
|
||||
@@ -1942,15 +1851,16 @@ ol.format.KML.writeIconStyle_ = function(node, style, objectStack) {
|
||||
};
|
||||
|
||||
if (!goog.isNull(size)) {
|
||||
iconProperties['w'] = size[0];
|
||||
iconProperties['h'] = size[1];
|
||||
goog.object.set(iconProperties, 'w', size[0]);
|
||||
goog.object.set(iconProperties, 'h', size[1]);
|
||||
var anchor = style.getAnchor(); // top-left
|
||||
var origin = style.getOrigin(); // top-left
|
||||
|
||||
if (!goog.isNull(origin) && !goog.isNull(iconImageSize) &&
|
||||
origin[0] !== 0 && origin[1] !== size[1]) {
|
||||
iconProperties['x'] = origin[0];
|
||||
iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]);
|
||||
goog.object.set(iconProperties, 'x', origin[0]);
|
||||
goog.object.set(iconProperties, 'y',
|
||||
iconImageSize[1] - (origin[1] + size[1]));
|
||||
}
|
||||
|
||||
if (!goog.isNull(anchor) &&
|
||||
@@ -1961,20 +1871,20 @@ ol.format.KML.writeIconStyle_ = function(node, style, objectStack) {
|
||||
y: size[1] - anchor[1],
|
||||
yunits: ol.style.IconAnchorUnits.PIXELS
|
||||
};
|
||||
properties['hotSpot'] = hotSpot;
|
||||
goog.object.set(properties, 'hotSpot', hotSpot);
|
||||
}
|
||||
}
|
||||
|
||||
properties['Icon'] = iconProperties;
|
||||
goog.object.set(properties, 'Icon', iconProperties);
|
||||
|
||||
var scale = style.getScale();
|
||||
if (scale !== 1) {
|
||||
properties['scale'] = scale;
|
||||
goog.object.set(properties, 'scale', scale);
|
||||
}
|
||||
|
||||
var rotation = style.getRotation();
|
||||
if (rotation !== 0) {
|
||||
properties['heading'] = rotation; // 0-360
|
||||
goog.object.set(properties, 'heading', rotation); // 0-360
|
||||
}
|
||||
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
@@ -1996,11 +1906,11 @@ ol.format.KML.writeLabelStyle_ = function(node, style, objectStack) {
|
||||
var properties = {};
|
||||
var fill = style.getFill();
|
||||
if (!goog.isNull(fill)) {
|
||||
properties['color'] = fill.getColor();
|
||||
goog.object.set(properties, 'color', fill.getColor());
|
||||
}
|
||||
var scale = style.getScale();
|
||||
if (goog.isDef(scale) && scale !== 1) {
|
||||
properties['scale'] = scale;
|
||||
goog.object.set(properties, 'scale', scale);
|
||||
}
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
var orderedKeys =
|
||||
@@ -2109,10 +2019,10 @@ ol.format.KML.writePlacemark_ = function(node, feature, objectStack) {
|
||||
// resolution-independent here
|
||||
var styles = styleFunction.call(feature, 0);
|
||||
if (!goog.isNull(styles) && styles.length > 0) {
|
||||
properties['Style'] = styles[0];
|
||||
goog.object.set(properties, 'Style', styles[0]);
|
||||
var textStyle = styles[0].getText();
|
||||
if (!goog.isNull(textStyle)) {
|
||||
properties['name'] = textStyle.getText();
|
||||
goog.object.set(properties, 'name', textStyle.getText());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2147,8 +2057,8 @@ ol.format.KML.writePrimitiveGeometry_ = function(node, geometry, objectStack) {
|
||||
(geometry instanceof ol.geom.LinearRing));
|
||||
var flatCoordinates = geometry.getFlatCoordinates();
|
||||
var /** @type {ol.xml.NodeStackItem} */ context = {node: node};
|
||||
context['layout'] = geometry.getLayout();
|
||||
context['stride'] = geometry.getStride();
|
||||
goog.object.set(context, 'layout', geometry.getLayout());
|
||||
goog.object.set(context, 'stride', geometry.getStride());
|
||||
ol.xml.pushSerializeAndPop(context,
|
||||
ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_,
|
||||
ol.format.KML.COORDINATES_NODE_FACTORY_,
|
||||
@@ -2218,16 +2128,16 @@ ol.format.KML.writeStyle_ = function(node, style, objectStack) {
|
||||
var imageStyle = style.getImage();
|
||||
var textStyle = style.getText();
|
||||
if (!goog.isNull(imageStyle)) {
|
||||
properties['IconStyle'] = imageStyle;
|
||||
goog.object.set(properties, 'IconStyle', imageStyle);
|
||||
}
|
||||
if (!goog.isNull(textStyle)) {
|
||||
properties['LabelStyle'] = textStyle;
|
||||
goog.object.set(properties, 'LabelStyle', textStyle);
|
||||
}
|
||||
if (!goog.isNull(strokeStyle)) {
|
||||
properties['LineStyle'] = strokeStyle;
|
||||
goog.object.set(properties, 'LineStyle', strokeStyle);
|
||||
}
|
||||
if (!goog.isNull(fillStyle)) {
|
||||
properties['PolyStyle'] = fillStyle;
|
||||
goog.object.set(properties, 'PolyStyle', fillStyle);
|
||||
}
|
||||
var parentNode = objectStack[objectStack.length - 1].node;
|
||||
var orderedKeys = ol.format.KML.STYLE_SEQUENCE_[parentNode.namespaceURI];
|
||||
@@ -2698,9 +2608,9 @@ ol.format.KML.prototype.writeFeaturesNode = function(features, opt_options) {
|
||||
var /** @type {ol.xml.NodeStackItem} */ context = {node: kml};
|
||||
var properties = {};
|
||||
if (features.length > 1) {
|
||||
properties['Document'] = features;
|
||||
goog.object.set(properties, 'Document', features);
|
||||
} else if (features.length == 1) {
|
||||
properties['Placemark'] = features[0];
|
||||
goog.object.set(properties, 'Placemark', features[0]);
|
||||
}
|
||||
var orderedKeys = ol.format.KML.KML_SEQUENCE_[kml.namespaceURI];
|
||||
var values = ol.xml.makeSequence(properties, orderedKeys);
|
||||
|
||||
@@ -67,7 +67,7 @@ ol.format.OSMXML.readNode_ = function(node, objectStack) {
|
||||
parseFloat(node.getAttribute('lon')),
|
||||
parseFloat(node.getAttribute('lat'))
|
||||
]);
|
||||
state.nodes[id] = coordinates;
|
||||
goog.object.set(state.nodes, id, coordinates);
|
||||
|
||||
var values = ol.xml.pushParseAndPop({
|
||||
tags: {}
|
||||
@@ -100,7 +100,7 @@ ol.format.OSMXML.readWay_ = function(node, objectStack) {
|
||||
var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
var flatCoordinates = /** @type {Array.<number>} */ ([]);
|
||||
for (var i = 0, ii = values.ndrefs.length; i < ii; i++) {
|
||||
var point = state.nodes[values.ndrefs[i]];
|
||||
var point = goog.object.get(state.nodes, values.ndrefs[i]);
|
||||
goog.array.extend(flatCoordinates, point);
|
||||
}
|
||||
var geometry;
|
||||
@@ -145,7 +145,7 @@ ol.format.OSMXML.readTag_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'tag');
|
||||
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
|
||||
values.tags[node.getAttribute('k')] = node.getAttribute('v');
|
||||
goog.object.set(values.tags, node.getAttribute('k'), node.getAttribute('v'));
|
||||
};
|
||||
|
||||
|
||||
@@ -234,3 +234,19 @@ ol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {
|
||||
* @api stable
|
||||
*/
|
||||
ol.format.OSMXML.prototype.readProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.OSMXML.prototype.readProjectionFromDocument = function(doc) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.OSMXML.prototype.readProjectionFromNode = function(node) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@ goog.provide('ol.format.OWS');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.format.XLink');
|
||||
goog.require('ol.format.XML');
|
||||
goog.require('ol.format.XSD');
|
||||
@@ -83,13 +84,20 @@ ol.format.OWS.readAllowedValues_ = function(node, objectStack) {
|
||||
ol.format.OWS.readConstraint_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Constraint');
|
||||
var object = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(object));
|
||||
var name = node.getAttribute('name');
|
||||
if (!goog.isDef(name)) {
|
||||
return undefined;
|
||||
}
|
||||
return ol.xml.pushParseAndPop({'name': name},
|
||||
var value = ol.xml.pushParseAndPop({},
|
||||
ol.format.OWS.CONSTRAINT_PARSERS_, node,
|
||||
objectStack);
|
||||
if (!goog.isDef(value)) {
|
||||
return undefined;
|
||||
}
|
||||
if (!goog.isDef(object.constraints)) {
|
||||
object.constraints = {};
|
||||
}
|
||||
object.constraints[name] = value;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -130,12 +138,22 @@ ol.format.OWS.readDcp_ = function(node, objectStack) {
|
||||
ol.format.OWS.readGet_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Get');
|
||||
var href = ol.format.XLink.readHref(node);
|
||||
if (!goog.isDef(href)) {
|
||||
var object = objectStack[objectStack.length - 1];
|
||||
var url = ol.format.XLink.readHref(node);
|
||||
goog.asserts.assert(goog.isObject(object));
|
||||
var value = ol.xml.pushParseAndPop({'url': url},
|
||||
ol.format.OWS.REQUEST_METHOD_PARSERS_, node, objectStack);
|
||||
if (!goog.isDef(value)) {
|
||||
return undefined;
|
||||
}
|
||||
return ol.xml.pushParseAndPop({'href': href},
|
||||
ol.format.OWS.REQUEST_METHOD_PARSERS_, node, objectStack);
|
||||
var get = goog.object.get(object, 'get');
|
||||
if (!goog.isDef(get)) {
|
||||
goog.object.set(object, 'get', [value]);
|
||||
}else {
|
||||
goog.asserts.assert(goog.isArray(get));
|
||||
get.push(value);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -171,7 +189,7 @@ ol.format.OWS.readOperation_ = function(node, objectStack) {
|
||||
var object = /** @type {Object} */
|
||||
(objectStack[objectStack.length - 1]);
|
||||
goog.asserts.assert(goog.isObject(object));
|
||||
object[name] = value;
|
||||
goog.object.set(object, name, value);
|
||||
|
||||
};
|
||||
|
||||
@@ -256,12 +274,18 @@ ol.format.OWS.readServiceProvider_ = function(node, objectStack) {
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @private
|
||||
* @return {string|undefined}
|
||||
* @return {Object|undefined}
|
||||
*/
|
||||
ol.format.OWS.readValue_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Value');
|
||||
return ol.format.XSD.readString(node);
|
||||
var object = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(object));
|
||||
var key = ol.format.XSD.readString(node);
|
||||
if (!goog.isDef(key)) {
|
||||
return undefined;
|
||||
}
|
||||
goog.object.set(object, key, true);
|
||||
};
|
||||
|
||||
|
||||
@@ -284,11 +308,14 @@ ol.format.OWS.NAMESPACE_URIS_ = [
|
||||
ol.format.OWS.PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'ServiceIdentification': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readServiceIdentification_),
|
||||
ol.format.OWS.readServiceIdentification_,
|
||||
'serviceIdentification'),
|
||||
'ServiceProvider': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readServiceProvider_),
|
||||
ol.format.OWS.readServiceProvider_,
|
||||
'serviceProvider'),
|
||||
'OperationsMetadata': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readOperationsMetadata_)
|
||||
ol.format.OWS.readOperationsMetadata_,
|
||||
'operationsMetadata')
|
||||
});
|
||||
|
||||
|
||||
@@ -300,14 +327,17 @@ ol.format.OWS.PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'DeliveryPoint': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
ol.format.XSD.readString, 'deliveryPoint'),
|
||||
'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'city'),
|
||||
'AdministrativeArea': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'PostalCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'Country': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
ol.format.XSD.readString, 'administrativeArea'),
|
||||
'PostalCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'postalCode'),
|
||||
'Country': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString, 'country'),
|
||||
'ElectronicMailAddress': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
ol.format.XSD.readString, 'electronicMailAddress')
|
||||
});
|
||||
|
||||
|
||||
@@ -318,7 +348,7 @@ ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Value': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readValue_)
|
||||
'Value': ol.format.OWS.readValue_
|
||||
});
|
||||
|
||||
|
||||
@@ -330,7 +360,8 @@ ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'AllowedValues': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readAllowedValues_)
|
||||
ol.format.OWS.readAllowedValues_, 'allowedValues'
|
||||
)
|
||||
});
|
||||
|
||||
|
||||
@@ -341,8 +372,10 @@ ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Phone': ol.xml.makeObjectPropertySetter(ol.format.OWS.readPhone_),
|
||||
'Address': ol.xml.makeObjectPropertySetter(ol.format.OWS.readAddress_)
|
||||
'Phone': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readPhone_, 'phone'),
|
||||
'Address': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readAddress_, 'address')
|
||||
});
|
||||
|
||||
|
||||
@@ -353,7 +386,8 @@ ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.DCP_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'HTTP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readHttp_)
|
||||
'HTTP': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readHttp_, 'http')
|
||||
});
|
||||
|
||||
|
||||
@@ -364,7 +398,7 @@ ol.format.OWS.DCP_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Get': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readGet_),
|
||||
'Get': ol.format.OWS.readGet_,
|
||||
'Post': undefined // TODO
|
||||
});
|
||||
|
||||
@@ -376,7 +410,8 @@ ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'DCP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readDcp_)
|
||||
'DCP': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readDcp_, 'dcp')
|
||||
});
|
||||
|
||||
|
||||
@@ -398,8 +433,10 @@ ol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Voice': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'Facsimile': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
|
||||
'Voice': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'voice'),
|
||||
'Facsimile': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'facsimile')
|
||||
});
|
||||
|
||||
|
||||
@@ -410,8 +447,7 @@ ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeParsersNS(
|
||||
*/
|
||||
ol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Constraint': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.OWS.readConstraint_)
|
||||
'Constraint': ol.format.OWS.readConstraint_
|
||||
});
|
||||
|
||||
|
||||
@@ -424,10 +460,11 @@ ol.format.OWS.SERVICE_CONTACT_PARSERS_ =
|
||||
ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'IndividualName': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'PositionName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
ol.format.XSD.readString, 'individualName'),
|
||||
'PositionName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'positionName'),
|
||||
'ContactInfo': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readContactInfo_)
|
||||
ol.format.OWS.readContactInfo_, 'contactInfo')
|
||||
});
|
||||
|
||||
|
||||
@@ -439,10 +476,12 @@ ol.format.OWS.SERVICE_CONTACT_PARSERS_ =
|
||||
ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =
|
||||
ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'title'),
|
||||
'ServiceTypeVersion': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'ServiceType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
|
||||
ol.format.XSD.readString, 'serviceTypeVersion'),
|
||||
'ServiceType': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString, 'serviceType')
|
||||
});
|
||||
|
||||
|
||||
@@ -454,8 +493,10 @@ ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =
|
||||
ol.format.OWS.SERVICE_PROVIDER_PARSERS_ =
|
||||
ol.xml.makeParsersNS(
|
||||
ol.format.OWS.NAMESPACE_URIS_, {
|
||||
'ProviderName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
|
||||
'ProviderSite': ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref),
|
||||
'ProviderName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString,
|
||||
'providerName'),
|
||||
'ProviderSite': ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref,
|
||||
'providerSite'),
|
||||
'ServiceContact': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.OWS.readServiceContact_)
|
||||
ol.format.OWS.readServiceContact_, 'serviceContact')
|
||||
});
|
||||
|
||||
@@ -340,6 +340,14 @@ ol.format.Polyline.prototype.readGeometryFromText =
|
||||
ol.format.Polyline.prototype.readProjection;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.Polyline.prototype.readProjectionFromText = function(text) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
|
||||
@@ -111,9 +111,7 @@ ol.format.TextFeature.prototype.readProjection = function(source) {
|
||||
* @protected
|
||||
* @return {ol.proj.Projection} Projection.
|
||||
*/
|
||||
ol.format.TextFeature.prototype.readProjectionFromText = function(text) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
ol.format.TextFeature.prototype.readProjectionFromText = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -397,7 +397,7 @@ ol.format.TopoJSON.prototype.readProjection = function(object) {
|
||||
/**
|
||||
* @const
|
||||
* @private
|
||||
* @type {Object.<string, function(TopoJSONGeometry, Array, ...Array): ol.geom.Geometry>}
|
||||
* @type {Object.<string, function(TopoJSONGeometry, Array, ...[Array]): ol.geom.Geometry>}
|
||||
*/
|
||||
ol.format.TopoJSON.GEOMETRY_READERS_ = {
|
||||
'Point': ol.format.TopoJSON.readPointGeometry_,
|
||||
|
||||
@@ -125,9 +125,6 @@ ol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {
|
||||
goog.object.extend(context, this.getReadOptions(node,
|
||||
goog.isDef(opt_options) ? opt_options : {}));
|
||||
var objectStack = [context];
|
||||
this.gmlFormat_.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][
|
||||
'featureMember'] =
|
||||
ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readFeaturesInternal);
|
||||
var features = ol.xml.pushParseAndPop([],
|
||||
this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
|
||||
objectStack, this.gmlFormat_);
|
||||
@@ -223,7 +220,7 @@ ol.format.WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {
|
||||
var result = {};
|
||||
var value = ol.format.XSD.readNonNegativeIntegerString(
|
||||
node.getAttribute('numberOfFeatures'));
|
||||
result['numberOfFeatures'] = value;
|
||||
goog.object.set(result, 'numberOfFeatures', value);
|
||||
return ol.xml.pushParseAndPop(
|
||||
/** @type {ol.format.WFS.FeatureCollectionMetadata} */ (result),
|
||||
ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, [], this.gmlFormat_);
|
||||
@@ -370,8 +367,8 @@ ol.format.WFS.QUERY_SERIALIZERS_ = {
|
||||
ol.format.WFS.writeFeature_ = function(node, feature, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = context['featureType'];
|
||||
var featureNS = context['featureNS'];
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
var child = ol.xml.createElementNS(featureNS, featureType);
|
||||
node.appendChild(child);
|
||||
ol.format.GML3.prototype.writeFeatureElement(child, feature, objectStack);
|
||||
@@ -402,11 +399,11 @@ ol.format.WFS.writeOgcFidFilter_ = function(node, fid, objectStack) {
|
||||
ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = context['featureType'];
|
||||
var featurePrefix = context['featurePrefix'];
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featurePrefix = goog.object.get(context, 'featurePrefix');
|
||||
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix :
|
||||
ol.format.WFS.FEATURE_PREFIX;
|
||||
var featureNS = context['featureNS'];
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
node.setAttribute('typeName', featurePrefix + ':' + featureType);
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||
featureNS);
|
||||
@@ -426,11 +423,11 @@ ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
|
||||
ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featureType = context['featureType'];
|
||||
var featurePrefix = context['featurePrefix'];
|
||||
var featureType = goog.object.get(context, 'featureType');
|
||||
var featurePrefix = goog.object.get(context, 'featurePrefix');
|
||||
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix :
|
||||
ol.format.WFS.FEATURE_PREFIX;
|
||||
var featureNS = context['featureNS'];
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
node.setAttribute('typeName', featurePrefix + ':' + featureType);
|
||||
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
|
||||
featureNS);
|
||||
@@ -445,7 +442,7 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
|
||||
}
|
||||
}
|
||||
ol.xml.pushSerializeAndPop({node: node, srsName:
|
||||
context['srsName']},
|
||||
goog.object.get(context, 'srsName')},
|
||||
ol.format.WFS.TRANSACTION_SERIALIZERS_,
|
||||
ol.xml.makeSimpleNodeFactory('Property'), values,
|
||||
objectStack);
|
||||
@@ -521,10 +518,10 @@ ol.format.WFS.TRANSACTION_SERIALIZERS_ = {
|
||||
ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var featurePrefix = context['featurePrefix'];
|
||||
var featureNS = context['featureNS'];
|
||||
var propertyNames = context['propertyNames'];
|
||||
var srsName = context['srsName'];
|
||||
var featurePrefix = goog.object.get(context, 'featurePrefix');
|
||||
var featureNS = goog.object.get(context, 'featureNS');
|
||||
var propertyNames = goog.object.get(context, 'propertyNames');
|
||||
var srsName = goog.object.get(context, 'srsName');
|
||||
var prefix = goog.isDef(featurePrefix) ? featurePrefix + ':' : '';
|
||||
node.setAttribute('typeName', prefix + featureType);
|
||||
if (goog.isDef(srsName)) {
|
||||
@@ -540,7 +537,7 @@ ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
|
||||
ol.format.WFS.QUERY_SERIALIZERS_,
|
||||
ol.xml.makeSimpleNodeFactory('PropertyName'), propertyNames,
|
||||
objectStack);
|
||||
var bbox = context['bbox'];
|
||||
var bbox = goog.object.get(context, 'bbox');
|
||||
if (goog.isDef(bbox)) {
|
||||
var child = ol.xml.createElementNS('http://www.opengis.net/ogc', 'Filter');
|
||||
ol.format.WFS.writeOgcBBOX_(child, bbox, objectStack);
|
||||
@@ -572,7 +569,7 @@ ol.format.WFS.writeOgcPropertyName_ = function(node, value, objectStack) {
|
||||
ol.format.WFS.writeOgcBBOX_ = function(node, bbox, objectStack) {
|
||||
var context = objectStack[objectStack.length - 1];
|
||||
goog.asserts.assert(goog.isObject(context));
|
||||
var geometryName = context['geometryName'];
|
||||
var geometryName = goog.object.get(context, 'geometryName');
|
||||
var bboxNode = ol.xml.createElementNS('http://www.opengis.net/ogc', 'BBOX');
|
||||
node.appendChild(bboxNode);
|
||||
ol.format.WFS.writeOgcPropertyName_(bboxNode, geometryName, objectStack);
|
||||
@@ -750,10 +747,8 @@ ol.format.WFS.prototype.readProjectionFromDocument = function(doc) {
|
||||
ol.format.WFS.prototype.readProjectionFromNode = function(node) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'FeatureCollection');
|
||||
|
||||
if (goog.isDefAndNotNull(node.firstElementChild) &&
|
||||
goog.isDefAndNotNull(node.firstElementChild.firstElementChild)) {
|
||||
node = node.firstElementChild.firstElementChild;
|
||||
node = node.firstElementChild.firstElementChild;
|
||||
if (goog.isDefAndNotNull(node)) {
|
||||
for (var n = node.firstElementChild; !goog.isNull(n);
|
||||
n = n.nextElementSibling) {
|
||||
if (!(n.childNodes.length === 0 ||
|
||||
@@ -765,6 +760,5 @@ ol.format.WFS.prototype.readProjectionFromNode = function(node) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -291,6 +291,14 @@ ol.format.WKT.prototype.readGeometryFromText = function(text, opt_options) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.format.WKT.prototype.readProjectionFromText = function(text) {
|
||||
return null;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Encode a feature as a WKT string.
|
||||
*
|
||||
|
||||
@@ -136,14 +136,14 @@ ol.format.WMSCapabilities.readEXGeographicBoundingBox_ =
|
||||
if (!goog.isDef(geographicBoundingBox)) {
|
||||
return undefined;
|
||||
}
|
||||
var westBoundLongitude = /** @type {number|undefined} */
|
||||
(geographicBoundingBox['westBoundLongitude']);
|
||||
var southBoundLatitude = /** @type {number|undefined} */
|
||||
(geographicBoundingBox['southBoundLatitude']);
|
||||
var eastBoundLongitude = /** @type {number|undefined} */
|
||||
(geographicBoundingBox['eastBoundLongitude']);
|
||||
var northBoundLatitude = /** @type {number|undefined} */
|
||||
(geographicBoundingBox['northBoundLatitude']);
|
||||
var westBoundLongitude = /** @type {number|undefined} */ (goog.object.get(
|
||||
geographicBoundingBox, 'westBoundLongitude'));
|
||||
var southBoundLatitude = /** @type {number|undefined} */ (goog.object.get(
|
||||
geographicBoundingBox, 'southBoundLatitude'));
|
||||
var eastBoundLongitude = /** @type {number|undefined} */ (goog.object.get(
|
||||
geographicBoundingBox, 'eastBoundLongitude'));
|
||||
var northBoundLatitude = /** @type {number|undefined} */ (goog.object.get(
|
||||
geographicBoundingBox, 'northBoundLatitude'));
|
||||
if (!goog.isDef(westBoundLongitude) || !goog.isDef(southBoundLatitude) ||
|
||||
!goog.isDef(eastBoundLongitude) || !goog.isDef(northBoundLatitude)) {
|
||||
return undefined;
|
||||
@@ -280,62 +280,64 @@ ol.format.WMSCapabilities.readLayer_ = function(node, objectStack) {
|
||||
var queryable =
|
||||
ol.format.XSD.readBooleanString(node.getAttribute('queryable'));
|
||||
if (!goog.isDef(queryable)) {
|
||||
queryable = parentLayerObject['queryable'];
|
||||
queryable = goog.object.get(parentLayerObject, 'queryable');
|
||||
}
|
||||
layerObject['queryable'] = goog.isDef(queryable) ? queryable : false;
|
||||
goog.object.set(
|
||||
layerObject, 'queryable', goog.isDef(queryable) ? queryable : false);
|
||||
|
||||
var cascaded = ol.format.XSD.readNonNegativeIntegerString(
|
||||
node.getAttribute('cascaded'));
|
||||
if (!goog.isDef(cascaded)) {
|
||||
cascaded = parentLayerObject['cascaded'];
|
||||
cascaded = goog.object.get(parentLayerObject, 'cascaded');
|
||||
}
|
||||
layerObject['cascaded'] = cascaded;
|
||||
goog.object.set(layerObject, 'cascaded', cascaded);
|
||||
|
||||
var opaque = ol.format.XSD.readBooleanString(node.getAttribute('opaque'));
|
||||
if (!goog.isDef(opaque)) {
|
||||
opaque = parentLayerObject['opaque'];
|
||||
opaque = goog.object.get(parentLayerObject, 'opaque');
|
||||
}
|
||||
layerObject['opaque'] = goog.isDef(opaque) ? opaque : false;
|
||||
goog.object.set(layerObject, 'opaque', goog.isDef(opaque) ? opaque : false);
|
||||
|
||||
var noSubsets =
|
||||
ol.format.XSD.readBooleanString(node.getAttribute('noSubsets'));
|
||||
if (!goog.isDef(noSubsets)) {
|
||||
noSubsets = parentLayerObject['noSubsets'];
|
||||
noSubsets = goog.object.get(parentLayerObject, 'noSubsets');
|
||||
}
|
||||
layerObject['noSubsets'] = goog.isDef(noSubsets) ? noSubsets : false;
|
||||
goog.object.set(
|
||||
layerObject, 'noSubsets', goog.isDef(noSubsets) ? noSubsets : false);
|
||||
|
||||
var fixedWidth =
|
||||
ol.format.XSD.readDecimalString(node.getAttribute('fixedWidth'));
|
||||
if (!goog.isDef(fixedWidth)) {
|
||||
fixedWidth = parentLayerObject['fixedWidth'];
|
||||
fixedWidth = goog.object.get(parentLayerObject, 'fixedWidth');
|
||||
}
|
||||
layerObject['fixedWidth'] = fixedWidth;
|
||||
goog.object.set(layerObject, 'fixedWidth', fixedWidth);
|
||||
|
||||
var fixedHeight =
|
||||
ol.format.XSD.readDecimalString(node.getAttribute('fixedHeight'));
|
||||
if (!goog.isDef(fixedHeight)) {
|
||||
fixedHeight = parentLayerObject['fixedHeight'];
|
||||
fixedHeight = goog.object.get(parentLayerObject, 'fixedHeight');
|
||||
}
|
||||
layerObject['fixedHeight'] = fixedHeight;
|
||||
goog.object.set(layerObject, 'fixedHeight', fixedHeight);
|
||||
|
||||
// See 7.2.4.8
|
||||
var addKeys = ['Style', 'CRS', 'AuthorityURL'];
|
||||
goog.array.forEach(addKeys, function(key) {
|
||||
var parentValue = parentLayerObject[key];
|
||||
var parentValue = goog.object.get(parentLayerObject, key);
|
||||
if (goog.isDef(parentValue)) {
|
||||
var childValue = goog.object.setIfUndefined(layerObject, key, []);
|
||||
childValue = childValue.concat(parentValue);
|
||||
layerObject[key] = childValue;
|
||||
goog.object.set(layerObject, key, childValue);
|
||||
}
|
||||
});
|
||||
|
||||
var replaceKeys = ['EX_GeographicBoundingBox', 'BoundingBox', 'Dimension',
|
||||
'Attribution', 'MinScaleDenominator', 'MaxScaleDenominator'];
|
||||
goog.array.forEach(replaceKeys, function(key) {
|
||||
var childValue = layerObject[key];
|
||||
var childValue = goog.object.get(layerObject, key);
|
||||
if (!goog.isDef(childValue)) {
|
||||
var parentValue = parentLayerObject[key];
|
||||
layerObject[key] = parentValue;
|
||||
var parentValue = goog.object.get(parentLayerObject, key);
|
||||
goog.object.set(layerObject, key, parentValue);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -454,7 +456,7 @@ ol.format.WMSCapabilities.readSizedFormatOnlineresource_ =
|
||||
ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('width')),
|
||||
ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('height'))
|
||||
];
|
||||
formatOnlineresource['size'] = size;
|
||||
goog.object.set(formatOnlineresource, 'size', size);
|
||||
return formatOnlineresource;
|
||||
}
|
||||
return undefined;
|
||||
@@ -473,7 +475,7 @@ ol.format.WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {
|
||||
var authorityObject =
|
||||
ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
|
||||
if (goog.isDef(authorityObject)) {
|
||||
authorityObject['name'] = node.getAttribute('name');
|
||||
goog.object.set(authorityObject, 'name', node.getAttribute('name'));
|
||||
return authorityObject;
|
||||
}
|
||||
return undefined;
|
||||
@@ -492,7 +494,7 @@ ol.format.WMSCapabilities.readMetadataURL_ = function(node, objectStack) {
|
||||
var metadataObject =
|
||||
ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
|
||||
if (goog.isDef(metadataObject)) {
|
||||
metadataObject['type'] = node.getAttribute('type');
|
||||
goog.object.set(metadataObject, 'type', node.getAttribute('type'));
|
||||
return metadataObject;
|
||||
}
|
||||
return undefined;
|
||||
|
||||
@@ -2,6 +2,7 @@ goog.provide('ol.format.WMSGetFeatureInfo');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
@@ -89,14 +90,14 @@ ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
|
||||
ol.format.WMSGetFeatureInfo.layerIdentifier_) +
|
||||
ol.format.WMSGetFeatureInfo.featureIdentifier_;
|
||||
|
||||
context['featureType'] = featureType;
|
||||
context['featureNS'] = this.featureNS_;
|
||||
goog.object.set(context, 'featureType', featureType);
|
||||
goog.object.set(context, 'featureNS', this.featureNS_);
|
||||
|
||||
var parsers = {};
|
||||
parsers[featureType] = ol.xml.makeArrayPusher(
|
||||
this.gmlFormat_.readFeatureElement, this.gmlFormat_);
|
||||
var parsersNS = ol.xml.makeParsersNS(
|
||||
[context['featureNS'], null], parsers);
|
||||
[goog.object.get(context, 'featureNS'), null], parsers);
|
||||
layer.namespaceURI = this.featureNS_;
|
||||
var layerFeatures = ol.xml.pushParseAndPop(
|
||||
[], parsersNS, layer, objectStack, this.gmlFormat_);
|
||||
|
||||
@@ -1,400 +0,0 @@
|
||||
goog.provide('ol.format.WMTSCapabilities');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom.NodeType');
|
||||
goog.require('goog.object');
|
||||
goog.require('goog.string');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.format.OWS');
|
||||
goog.require('ol.format.XLink');
|
||||
goog.require('ol.format.XML');
|
||||
goog.require('ol.format.XSD');
|
||||
goog.require('ol.xml');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Format for reading WMTS capabilities data.
|
||||
*
|
||||
* @constructor
|
||||
* @extends {ol.format.XML}
|
||||
* @api
|
||||
*/
|
||||
ol.format.WMTSCapabilities = function() {
|
||||
goog.base(this);
|
||||
|
||||
/**
|
||||
* @type {ol.format.OWS}
|
||||
* @private
|
||||
*/
|
||||
this.owsParser_ = new ol.format.OWS();
|
||||
};
|
||||
goog.inherits(ol.format.WMTSCapabilities, ol.format.XML);
|
||||
|
||||
|
||||
/**
|
||||
* Read a WMTS capabilities document.
|
||||
*
|
||||
* @function
|
||||
* @param {Document|Node|string} source The XML source.
|
||||
* @return {Object} An object representing the WMTS capabilities.
|
||||
* @api
|
||||
*/
|
||||
ol.format.WMTSCapabilities.prototype.read;
|
||||
|
||||
|
||||
/**
|
||||
* @param {Document} doc Document.
|
||||
* @return {Object} WMTS Capability object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.prototype.readFromDocument = function(doc) {
|
||||
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT);
|
||||
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) {
|
||||
if (n.nodeType == goog.dom.NodeType.ELEMENT) {
|
||||
return this.readFromNode(n);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Node} node Node.
|
||||
* @return {Object} WMTS Capability object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.prototype.readFromNode = function(node) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Capabilities');
|
||||
this.version = goog.string.trim(node.getAttribute('version'));
|
||||
goog.asserts.assertString(this.version);
|
||||
var WMTSCapabilityObject = this.owsParser_.readFromNode(node);
|
||||
if (!goog.isDef(WMTSCapabilityObject)) {
|
||||
return null;
|
||||
}
|
||||
goog.object.set(WMTSCapabilityObject, 'version', this.version);
|
||||
WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject,
|
||||
ol.format.WMTSCapabilities.PARSERS_, node, []);
|
||||
return goog.isDef(WMTSCapabilityObject) ? WMTSCapabilityObject : null;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Attribution object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readContents_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Contents');
|
||||
|
||||
return ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.CONTENTS_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Layers object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readLayer_ = function(node, objectStack) {
|
||||
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT);
|
||||
goog.asserts.assert(node.localName == 'Layer');
|
||||
return ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.LAYER_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Tile Matrix Set object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readTileMatrixSet_ = function(node, objectStack) {
|
||||
return ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.TMS_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Style object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readStyle_ = function(node, objectStack) {
|
||||
var style = ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.STYLE_PARSERS_, node, objectStack);
|
||||
if (!goog.isDef(style)) {
|
||||
return undefined;
|
||||
}
|
||||
var isDefault = node.getAttribute('isDefault') === 'true';
|
||||
style['isDefault'] = isDefault;
|
||||
return style;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Tile Matrix Set Link object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readTileMatrixSetLink_ = function(node,
|
||||
objectStack) {
|
||||
return ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Resource URL object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {
|
||||
var format = node.getAttribute('format');
|
||||
var template = node.getAttribute('template');
|
||||
var resourceType = node.getAttribute('resourceType');
|
||||
var resource = {};
|
||||
if (goog.isDef(format)) {
|
||||
resource['format'] = format;
|
||||
}
|
||||
if (goog.isDef(template)) {
|
||||
resource['template'] = template;
|
||||
}
|
||||
if (goog.isDef(resourceType)) {
|
||||
resource['resourceType'] = resourceType;
|
||||
}
|
||||
return resource;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} WGS84 BBox object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readWgs84BoundingBox_ = function(node, objectStack) {
|
||||
var coordinates = ol.xml.pushParseAndPop([],
|
||||
ol.format.WMTSCapabilities.WGS84_BBOX_READERS_, node, objectStack);
|
||||
if (coordinates.length != 2) {
|
||||
return undefined;
|
||||
}
|
||||
return ol.extent.boundingExtent(coordinates);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Legend object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readLegendUrl_ = function(node, objectStack) {
|
||||
var legend = {};
|
||||
legend['format'] = node.getAttribute('format');
|
||||
legend['href'] = ol.format.XLink.readHref(node);
|
||||
return legend;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} Coordinates object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readCoordinates_ = function(node, objectStack) {
|
||||
var coordinates = ol.format.XSD.readString(node).split(' ');
|
||||
if (!goog.isDef(coordinates) || coordinates.length != 2) {
|
||||
return undefined;
|
||||
}
|
||||
var x = +coordinates[0];
|
||||
var y = +coordinates[1];
|
||||
if (isNaN(x) || isNaN(y)) {
|
||||
return undefined;
|
||||
}
|
||||
return [x, y];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {Node} node Node.
|
||||
* @param {Array.<*>} objectStack Object stack.
|
||||
* @return {Object|undefined} TileMatrix object.
|
||||
*/
|
||||
ol.format.WMTSCapabilities.readTileMatrix_ = function(node, objectStack) {
|
||||
return ol.xml.pushParseAndPop({},
|
||||
ol.format.WMTSCapabilities.TM_PARSERS_, node, objectStack);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @private
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_ = [
|
||||
null,
|
||||
'http://www.opengis.net/wmts/1.0'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @private
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_ = [
|
||||
null,
|
||||
'http://www.opengis.net/ows/1.1'
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'Contents': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.WMTSCapabilities.readContents_)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'Layer': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readLayer_),
|
||||
'TileMatrixSet': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readTileMatrixSet_)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'Style': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readStyle_),
|
||||
'Format': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.XSD.readString),
|
||||
'TileMatrixSetLink': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readTileMatrixSetLink_),
|
||||
'ResourceURL': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readResourceUrl_)
|
||||
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
|
||||
'Title': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'Abstract': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'WGS84BoundingBox': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.WMTSCapabilities.readWgs84BoundingBox_),
|
||||
'Identifier': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
}));
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'LegendURL': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readLegendUrl_)
|
||||
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
|
||||
'Title': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'Identifier': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
}));
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'TileMatrixSet': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
|
||||
'LowerCorner': ol.xml.makeArrayPusher(
|
||||
ol.format.WMTSCapabilities.readCoordinates_),
|
||||
'UpperCorner': ol.xml.makeArrayPusher(
|
||||
ol.format.WMTSCapabilities.readCoordinates_)
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'WellKnownScaleSet': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'TileMatrix': ol.xml.makeObjectPropertyPusher(
|
||||
ol.format.WMTSCapabilities.readTileMatrix_)
|
||||
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
|
||||
'SupportedCRS': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString),
|
||||
'Identifier': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
}));
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {Object.<string, Object.<string, ol.xml.Parser>>}
|
||||
* @private
|
||||
*/
|
||||
ol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeParsersNS(
|
||||
ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
|
||||
'TopLeftCorner': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.WMTSCapabilities.readCoordinates_),
|
||||
'ScaleDenominator': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readDecimal),
|
||||
'TileWidth': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readNonNegativeInteger),
|
||||
'TileHeight': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readNonNegativeInteger),
|
||||
'MatrixWidth': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readNonNegativeInteger),
|
||||
'MatrixHeight': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readNonNegativeInteger)
|
||||
}, ol.xml.makeParsersNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
|
||||
'Identifier': ol.xml.makeObjectPropertySetter(
|
||||
ol.format.XSD.readString)
|
||||
}));
|
||||
@@ -185,9 +185,7 @@ ol.format.XMLFeature.prototype.readProjection = function(source) {
|
||||
* @protected
|
||||
* @return {ol.proj.Projection} Projection.
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.readProjectionFromDocument = function(doc) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
ol.format.XMLFeature.prototype.readProjectionFromDocument = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
@@ -195,9 +193,7 @@ ol.format.XMLFeature.prototype.readProjectionFromDocument = function(doc) {
|
||||
* @protected
|
||||
* @return {ol.proj.Projection} Projection.
|
||||
*/
|
||||
ol.format.XMLFeature.prototype.readProjectionFromNode = function(node) {
|
||||
return this.defaultDataProjection;
|
||||
};
|
||||
ol.format.XMLFeature.prototype.readProjectionFromNode = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -94,14 +94,20 @@ ol.geom.Circle.prototype.getCenter = function() {
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @api
|
||||
*/
|
||||
ol.geom.Circle.prototype.computeExtent = function(extent) {
|
||||
var flatCoordinates = this.flatCoordinates;
|
||||
var radius = flatCoordinates[this.stride] - flatCoordinates[0];
|
||||
return ol.extent.createOrUpdate(
|
||||
flatCoordinates[0] - radius, flatCoordinates[1] - radius,
|
||||
flatCoordinates[0] + radius, flatCoordinates[1] + radius,
|
||||
extent);
|
||||
ol.geom.Circle.prototype.getExtent = function(opt_extent) {
|
||||
if (this.extentRevision != this.getRevision()) {
|
||||
var flatCoordinates = this.flatCoordinates;
|
||||
var radius = flatCoordinates[this.stride] - flatCoordinates[0];
|
||||
this.extent = ol.extent.createOrUpdate(
|
||||
flatCoordinates[0] - radius, flatCoordinates[1] - radius,
|
||||
flatCoordinates[0] + radius, flatCoordinates[1] + radius,
|
||||
this.extent);
|
||||
this.extentRevision = this.getRevision();
|
||||
}
|
||||
goog.asserts.assert(goog.isDef(this.extent));
|
||||
return ol.extent.returnOrUpdate(this.extent, opt_extent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ ol.geom.flat.geodesic.line_ =
|
||||
/** @type {Array.<number>} */
|
||||
var fractionStack = [1, 0];
|
||||
|
||||
/** @type {Object.<string, boolean>} */
|
||||
/** @type {Object.<number, boolean>} */
|
||||
var fractions = {};
|
||||
|
||||
var maxIterations = 1e5;
|
||||
@@ -52,7 +52,7 @@ ol.geom.flat.geodesic.line_ =
|
||||
key = fracA.toString();
|
||||
if (!goog.object.containsKey(fractions, key)) {
|
||||
flatCoordinates.push(a[0], a[1]);
|
||||
fractions[key] = true;
|
||||
goog.object.set(fractions, key, true);
|
||||
}
|
||||
// Pop the b coordinate off the stack
|
||||
fracB = fractionStack.pop();
|
||||
@@ -70,7 +70,7 @@ ol.geom.flat.geodesic.line_ =
|
||||
flatCoordinates.push(b[0], b[1]);
|
||||
key = fracB.toString();
|
||||
goog.asserts.assert(!goog.object.containsKey(fractions, key));
|
||||
fractions[key] = true;
|
||||
goog.object.set(fractions, key, true);
|
||||
} else {
|
||||
// Otherwise, we need to subdivide the current line segment. Split it
|
||||
// into two and push the two line segments onto the stack.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
goog.provide('ol.geom.Geometry');
|
||||
goog.provide('ol.geom.GeometryType');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.functions');
|
||||
goog.require('ol.Observable');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.proj');
|
||||
|
||||
|
||||
@@ -59,16 +59,16 @@ ol.geom.Geometry = function() {
|
||||
goog.base(this);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Extent}
|
||||
* @protected
|
||||
* @type {ol.Extent|undefined}
|
||||
*/
|
||||
this.extent_ = ol.extent.createEmpty();
|
||||
this.extent = undefined;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @protected
|
||||
* @type {number}
|
||||
*/
|
||||
this.extentRevision_ = -1;
|
||||
this.extentRevision = -1;
|
||||
|
||||
/**
|
||||
* @protected
|
||||
@@ -134,14 +134,6 @@ ol.geom.Geometry.prototype.containsCoordinate = function(coordinate) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @protected
|
||||
* @return {ol.Extent} extent Extent.
|
||||
*/
|
||||
ol.geom.Geometry.prototype.computeExtent = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} x X.
|
||||
* @param {number} y Y.
|
||||
@@ -152,17 +144,12 @@ ol.geom.Geometry.prototype.containsXY = goog.functions.FALSE;
|
||||
|
||||
/**
|
||||
* Get the extent of the geometry.
|
||||
* @function
|
||||
* @param {ol.Extent=} opt_extent Extent.
|
||||
* @return {ol.Extent} extent Extent.
|
||||
* @api stable
|
||||
*/
|
||||
ol.geom.Geometry.prototype.getExtent = function(opt_extent) {
|
||||
if (this.extentRevision_ != this.getRevision()) {
|
||||
this.extent_ = this.computeExtent(this.extent_);
|
||||
this.extentRevision_ = this.getRevision();
|
||||
}
|
||||
return ol.extent.returnOrUpdate(this.extent_, opt_extent);
|
||||
};
|
||||
ol.geom.Geometry.prototype.getExtent = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
goog.provide('ol.geom.GeometryCollection');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('goog.object');
|
||||
@@ -129,14 +130,21 @@ ol.geom.GeometryCollection.prototype.containsXY = function(x, y) {
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @api stable
|
||||
*/
|
||||
ol.geom.GeometryCollection.prototype.computeExtent = function(extent) {
|
||||
ol.extent.createOrUpdateEmpty(extent);
|
||||
var geometries = this.geometries_;
|
||||
for (var i = 0, ii = geometries.length; i < ii; ++i) {
|
||||
ol.extent.extend(extent, geometries[i].getExtent());
|
||||
ol.geom.GeometryCollection.prototype.getExtent = function(opt_extent) {
|
||||
if (this.extentRevision != this.getRevision()) {
|
||||
var extent = ol.extent.createOrUpdateEmpty(this.extent);
|
||||
var geometries = this.geometries_;
|
||||
var i, ii;
|
||||
for (i = 0, ii = geometries.length; i < ii; ++i) {
|
||||
ol.extent.extend(extent, geometries[i].getExtent());
|
||||
}
|
||||
this.extent = extent;
|
||||
this.extentRevision = this.getRevision();
|
||||
}
|
||||
return extent;
|
||||
goog.asserts.assert(goog.isDef(this.extent));
|
||||
return ol.extent.returnOrUpdate(this.extent, opt_extent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ ol.geom.LineString.prototype.closestPointXY =
|
||||
* return the last coordinate.
|
||||
*
|
||||
* @param {number} m M.
|
||||
* @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
|
||||
* @param {boolean=} opt_extrapolate Extrapolate.
|
||||
* @return {ol.Coordinate} Coordinate.
|
||||
* @api stable
|
||||
*/
|
||||
|
||||
@@ -121,8 +121,8 @@ ol.geom.MultiLineString.prototype.closestPointXY =
|
||||
* LineStrings.
|
||||
*
|
||||
* @param {number} m M.
|
||||
* @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
|
||||
* @param {boolean=} opt_interpolate Interpolate. Default is `false`.
|
||||
* @param {boolean=} opt_extrapolate Extrapolate.
|
||||
* @param {boolean=} opt_interpolate Interpolate.
|
||||
* @return {ol.Coordinate} Coordinate.
|
||||
* @api stable
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.geom.Point');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.geom.GeometryType');
|
||||
goog.require('ol.geom.SimpleGeometry');
|
||||
@@ -72,8 +73,14 @@ ol.geom.Point.prototype.getCoordinates = function() {
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.geom.Point.prototype.computeExtent = function(extent) {
|
||||
return ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates, extent);
|
||||
ol.geom.Point.prototype.getExtent = function(opt_extent) {
|
||||
if (this.extentRevision != this.getRevision()) {
|
||||
this.extent = ol.extent.createOrUpdateFromCoordinate(
|
||||
this.flatCoordinates, this.extent);
|
||||
this.extentRevision = this.getRevision();
|
||||
}
|
||||
goog.asserts.assert(goog.isDef(this.extent));
|
||||
return ol.extent.returnOrUpdate(this.extent, opt_extent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -90,11 +90,17 @@ ol.geom.SimpleGeometry.prototype.containsXY = goog.functions.FALSE;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @api stable
|
||||
*/
|
||||
ol.geom.SimpleGeometry.prototype.computeExtent = function(extent) {
|
||||
return ol.extent.createOrUpdateFromFlatCoordinates(
|
||||
this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
|
||||
extent);
|
||||
ol.geom.SimpleGeometry.prototype.getExtent = function(opt_extent) {
|
||||
if (this.extentRevision != this.getRevision()) {
|
||||
this.extent = ol.extent.createOrUpdateFromFlatCoordinates(
|
||||
this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
|
||||
this.extent);
|
||||
this.extentRevision = this.getRevision();
|
||||
}
|
||||
goog.asserts.assert(goog.isDef(this.extent));
|
||||
return ol.extent.returnOrUpdate(this.extent, opt_extent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.interaction.DragRotateAndZoom');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.math.Vec2');
|
||||
goog.require('ol');
|
||||
goog.require('ol.ViewHint');
|
||||
@@ -61,7 +62,8 @@ ol.interaction.DragRotateAndZoom = function(opt_options) {
|
||||
this.lastScaleDelta_ = 0;
|
||||
|
||||
};
|
||||
goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Pointer);
|
||||
goog.inherits(ol.interaction.DragRotateAndZoom,
|
||||
ol.interaction.Pointer);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.interaction.DragRotate');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol');
|
||||
goog.require('ol.ViewHint');
|
||||
goog.require('ol.events.ConditionType');
|
||||
@@ -67,10 +68,10 @@ ol.interaction.DragRotate.handleDragEvent_ = function(mapBrowserEvent) {
|
||||
if (goog.isDef(this.lastAngle_)) {
|
||||
var delta = theta - this.lastAngle_;
|
||||
var view = map.getView();
|
||||
var rotation = view.getRotation();
|
||||
var viewState = view.getState();
|
||||
map.render();
|
||||
ol.interaction.Interaction.rotateWithoutConstraints(
|
||||
map, view, rotation - delta);
|
||||
map, view, viewState.rotation - delta);
|
||||
}
|
||||
this.lastAngle_ = theta;
|
||||
};
|
||||
@@ -90,8 +91,8 @@ ol.interaction.DragRotate.handleUpEvent_ = function(mapBrowserEvent) {
|
||||
var map = mapBrowserEvent.map;
|
||||
var view = map.getView();
|
||||
view.setHint(ol.ViewHint.INTERACTING, -1);
|
||||
var rotation = view.getRotation();
|
||||
ol.interaction.Interaction.rotate(map, view, rotation,
|
||||
var viewState = view.getState();
|
||||
ol.interaction.Interaction.rotate(map, view, viewState.rotation,
|
||||
undefined, ol.DRAGROTATE_ANIMATION_DURATION);
|
||||
return false;
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
goog.provide('ol.interaction.Interaction');
|
||||
goog.provide('ol.interaction.InteractionProperty');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.MapBrowserEvent');
|
||||
goog.require('ol.Object');
|
||||
goog.require('ol.animation');
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
goog.provide('ol.interaction.PinchRotate');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.functions');
|
||||
goog.require('goog.style');
|
||||
goog.require('ol');
|
||||
goog.require('ol.Coordinate');
|
||||
@@ -108,10 +107,10 @@ ol.interaction.PinchRotate.handleDragEvent_ = function(mapBrowserEvent) {
|
||||
// rotate
|
||||
if (this.rotating_) {
|
||||
var view = map.getView();
|
||||
var rotation = view.getRotation();
|
||||
var viewState = view.getState();
|
||||
map.render();
|
||||
ol.interaction.Interaction.rotateWithoutConstraints(map, view,
|
||||
rotation + rotationDelta, this.anchor_);
|
||||
viewState.rotation + rotationDelta, this.anchor_);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -128,9 +127,10 @@ ol.interaction.PinchRotate.handleUpEvent_ = function(mapBrowserEvent) {
|
||||
var view = map.getView();
|
||||
view.setHint(ol.ViewHint.INTERACTING, -1);
|
||||
if (this.rotating_) {
|
||||
var rotation = view.getRotation();
|
||||
var viewState = view.getState();
|
||||
ol.interaction.Interaction.rotate(
|
||||
map, view, rotation, this.anchor_, ol.ROTATE_ANIMATION_DURATION);
|
||||
map, view, viewState.rotation, this.anchor_,
|
||||
ol.ROTATE_ANIMATION_DURATION);
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
goog.provide('ol.interaction.PinchZoom');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.functions');
|
||||
goog.require('goog.style');
|
||||
goog.require('ol.Coordinate');
|
||||
goog.require('ol.ViewHint');
|
||||
@@ -85,7 +84,7 @@ ol.interaction.PinchZoom.handleDragEvent_ = function(mapBrowserEvent) {
|
||||
|
||||
var map = mapBrowserEvent.map;
|
||||
var view = map.getView();
|
||||
var resolution = view.getResolution();
|
||||
var viewState = view.getState();
|
||||
|
||||
// scale anchor point.
|
||||
var viewportPosition = goog.style.getClientPosition(map.getViewport());
|
||||
@@ -98,7 +97,7 @@ ol.interaction.PinchZoom.handleDragEvent_ = function(mapBrowserEvent) {
|
||||
// scale, bypass the resolution constraint
|
||||
map.render();
|
||||
ol.interaction.Interaction.zoomWithoutConstraints(
|
||||
map, view, resolution * scaleDelta, this.anchor_);
|
||||
map, view, viewState.resolution * scaleDelta, this.anchor_);
|
||||
|
||||
};
|
||||
|
||||
@@ -109,17 +108,18 @@ ol.interaction.PinchZoom.handleDragEvent_ = function(mapBrowserEvent) {
|
||||
* @this {ol.interaction.PinchZoom}
|
||||
* @private
|
||||
*/
|
||||
ol.interaction.PinchZoom.handleUpEvent_ = function(mapBrowserEvent) {
|
||||
ol.interaction.PinchZoom.handleUpEvent_ =
|
||||
function(mapBrowserEvent) {
|
||||
if (this.targetPointers.length < 2) {
|
||||
var map = mapBrowserEvent.map;
|
||||
var view = map.getView();
|
||||
view.setHint(ol.ViewHint.INTERACTING, -1);
|
||||
var resolution = view.getResolution();
|
||||
var viewState = view.getState();
|
||||
// Zoom to final resolution, with an animation, and provide a
|
||||
// direction not to zoom out/in if user was pinching in/out.
|
||||
// Direction is > 0 if pinching out, and < 0 if pinching in.
|
||||
var direction = this.lastScaleDelta_ - 1;
|
||||
ol.interaction.Interaction.zoom(map, view, resolution,
|
||||
ol.interaction.Interaction.zoom(map, view, viewState.resolution,
|
||||
this.anchor_, this.duration_, direction);
|
||||
return false;
|
||||
} else {
|
||||
@@ -134,7 +134,8 @@ ol.interaction.PinchZoom.handleUpEvent_ = function(mapBrowserEvent) {
|
||||
* @this {ol.interaction.PinchZoom}
|
||||
* @private
|
||||
*/
|
||||
ol.interaction.PinchZoom.handleDownEvent_ = function(mapBrowserEvent) {
|
||||
ol.interaction.PinchZoom.handleDownEvent_ =
|
||||
function(mapBrowserEvent) {
|
||||
if (this.targetPointers.length >= 2) {
|
||||
var map = mapBrowserEvent.map;
|
||||
this.anchor_ = null;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.interaction.Pointer');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.functions');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.MapBrowserEvent.EventType');
|
||||
|
||||
@@ -62,12 +62,6 @@ ol.interaction.Select = function(opt_options) {
|
||||
this.toggleCondition_ = goog.isDef(options.toggleCondition) ?
|
||||
options.toggleCondition : ol.events.condition.shiftKeyOnly;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.multi_ = goog.isDef(options.multi) ? options.multi : false;
|
||||
|
||||
var layerFilter;
|
||||
if (goog.isDef(options.layers)) {
|
||||
if (goog.isFunction(options.layers)) {
|
||||
@@ -138,36 +132,34 @@ ol.interaction.Select.handleEvent = function(mapBrowserEvent) {
|
||||
var set = !add && !remove && !toggle;
|
||||
var map = mapBrowserEvent.map;
|
||||
var features = this.featureOverlay_.getFeatures();
|
||||
var /** @type {Array.<ol.Feature>} */ deselected = [];
|
||||
var /** @type {Array.<ol.Feature>} */ selected = [];
|
||||
if (set) {
|
||||
// Replace the currently selected feature(s) with the feature(s) at the
|
||||
// pixel, or clear the selected feature(s) if there is no feature at
|
||||
// the pixel.
|
||||
map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
||||
// Replace the currently selected feature(s) with the feature at the pixel,
|
||||
// or clear the selected feature(s) if there is no feature at the pixel.
|
||||
/** @type {ol.Feature|undefined} */
|
||||
var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @param {ol.layer.Layer} layer Layer.
|
||||
*/
|
||||
function(feature, layer) {
|
||||
selected.push(feature);
|
||||
return feature;
|
||||
}, undefined, this.layerFilter_);
|
||||
if (selected.length > 0 &&
|
||||
if (goog.isDef(feature) &&
|
||||
features.getLength() == 1 &&
|
||||
features.item(0) == selected[selected.length - 1]) {
|
||||
features.item(0) == feature) {
|
||||
// No change
|
||||
} else {
|
||||
if (features.getLength() !== 0) {
|
||||
features.clear();
|
||||
}
|
||||
if (this.multi_) {
|
||||
features.extend(selected);
|
||||
} else if (selected.length > 0) {
|
||||
features.push(selected[selected.length - 1]);
|
||||
if (goog.isDef(feature)) {
|
||||
features.push(feature);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Modify the currently selected feature(s).
|
||||
var /** @type {Array.<ol.Feature>} */ deselected = [];
|
||||
var /** @type {Array.<ol.Feature>} */ selected = [];
|
||||
map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
|
||||
@@ -3,7 +3,6 @@ goog.provide('ol.layer.Heatmap');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.math');
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.Object');
|
||||
goog.require('ol.dom');
|
||||
goog.require('ol.layer.Vector');
|
||||
@@ -37,14 +36,7 @@ ol.layer.HeatmapLayerProperty = {
|
||||
ol.layer.Heatmap = function(opt_options) {
|
||||
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||
|
||||
var baseOptions = goog.object.clone(options);
|
||||
|
||||
delete baseOptions.gradient;
|
||||
delete baseOptions.radius;
|
||||
delete baseOptions.blur;
|
||||
delete baseOptions.shadow;
|
||||
delete baseOptions.weight;
|
||||
goog.base(this, /** @type {olx.layer.VectorOptions} */ (baseOptions));
|
||||
goog.base(this, /** @type {olx.layer.VectorOptions} */ (options));
|
||||
|
||||
/**
|
||||
* @private
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
goog.provide('ol.layer.Layer');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('goog.object');
|
||||
|
||||
@@ -87,12 +87,13 @@ goog.inherits(ol.layer.Base, ol.Object);
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The brightness of the layer.
|
||||
* @return {number|undefined} The brightness of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Base.prototype.getBrightness = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.LayerProperty.BRIGHTNESS));
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.BRIGHTNESS));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -101,12 +102,13 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The contrast of the layer.
|
||||
* @return {number|undefined} The contrast of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Base.prototype.getContrast = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.LayerProperty.CONTRAST));
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.CONTRAST));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -115,12 +117,12 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The hue of the layer.
|
||||
* @return {number|undefined} The hue of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Base.prototype.getHue = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.LayerProperty.HUE));
|
||||
return /** @type {number|undefined} */ (this.get(ol.layer.LayerProperty.HUE));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -144,16 +146,16 @@ ol.layer.Base.prototype.getLayerState = function() {
|
||||
var minResolution = this.getMinResolution();
|
||||
return {
|
||||
layer: /** @type {ol.layer.Layer} */ (this),
|
||||
brightness: goog.math.clamp(brightness, -1, 1),
|
||||
contrast: Math.max(contrast, 0),
|
||||
hue: hue,
|
||||
opacity: goog.math.clamp(opacity, 0, 1),
|
||||
saturation: Math.max(saturation, 0),
|
||||
brightness: goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0,
|
||||
contrast: goog.isDef(contrast) ? Math.max(contrast, 0) : 1,
|
||||
hue: goog.isDef(hue) ? hue : 0,
|
||||
opacity: goog.isDef(opacity) ? goog.math.clamp(opacity, 0, 1) : 1,
|
||||
saturation: goog.isDef(saturation) ? Math.max(saturation, 0) : 1,
|
||||
sourceState: sourceState,
|
||||
visible: visible,
|
||||
visible: goog.isDef(visible) ? !!visible : true,
|
||||
extent: extent,
|
||||
maxResolution: maxResolution,
|
||||
minResolution: Math.max(minResolution, 0)
|
||||
maxResolution: goog.isDef(maxResolution) ? maxResolution : Infinity,
|
||||
minResolution: goog.isDef(minResolution) ? Math.max(minResolution, 0) : 0
|
||||
};
|
||||
};
|
||||
|
||||
@@ -190,12 +192,12 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The maximum resolution of the layer.
|
||||
* @return {number|undefined} The maximum resolution of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
ol.layer.Base.prototype.getMaxResolution = function() {
|
||||
return /** @type {number} */ (
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.MAX_RESOLUTION));
|
||||
};
|
||||
goog.exportProperty(
|
||||
@@ -205,12 +207,12 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The minimum resolution of the layer.
|
||||
* @return {number|undefined} The minimum resolution of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
ol.layer.Base.prototype.getMinResolution = function() {
|
||||
return /** @type {number} */ (
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.MIN_RESOLUTION));
|
||||
};
|
||||
goog.exportProperty(
|
||||
@@ -220,12 +222,13 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The opacity of the layer.
|
||||
* @return {number|undefined} The opacity of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
ol.layer.Base.prototype.getOpacity = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.LayerProperty.OPACITY));
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.OPACITY));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -234,12 +237,13 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The saturation of the layer.
|
||||
* @return {number|undefined} The saturation of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Base.prototype.getSaturation = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.LayerProperty.SATURATION));
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.SATURATION));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -254,12 +258,13 @@ ol.layer.Base.prototype.getSourceState = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* @return {boolean} The visibility of the layer.
|
||||
* @return {boolean|undefined} The visiblity of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
ol.layer.Base.prototype.getVisible = function() {
|
||||
return /** @type {boolean} */ (this.get(ol.layer.LayerProperty.VISIBLE));
|
||||
return /** @type {boolean|undefined} */ (
|
||||
this.get(ol.layer.LayerProperty.VISIBLE));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Base.prototype,
|
||||
@@ -285,7 +290,7 @@ goog.exportProperty(
|
||||
* [2] https://github.com/WebKit/webkit/commit/8f4765e569
|
||||
* [3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=15647
|
||||
*
|
||||
* @param {number} brightness The brightness of the layer.
|
||||
* @param {number|undefined} brightness The brightness of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
@@ -303,7 +308,7 @@ goog.exportProperty(
|
||||
* grey. A value of 1 will leave the contrast unchanged. Other values are
|
||||
* linear multipliers on the effect (and values over 1 are permitted).
|
||||
*
|
||||
* @param {number} contrast The contrast of the layer.
|
||||
* @param {number|undefined} contrast The contrast of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
@@ -319,7 +324,7 @@ goog.exportProperty(
|
||||
/**
|
||||
* Apply a hue-rotation to the layer. A value of 0 will leave the hue
|
||||
* unchanged. Other values are radians around the color circle.
|
||||
* @param {number} hue The hue of the layer.
|
||||
* @param {number|undefined} hue The hue of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
@@ -349,7 +354,7 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} maxResolution The maximum resolution of the layer.
|
||||
* @param {number|undefined} maxResolution The maximum resolution of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
@@ -363,7 +368,7 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} minResolution The minimum resolution of the layer.
|
||||
* @param {number|undefined} minResolution The minimum resolution of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
@@ -377,7 +382,7 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @param {number} opacity The opacity of the layer.
|
||||
* @param {number|undefined} opacity The opacity of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
@@ -396,7 +401,7 @@ goog.exportProperty(
|
||||
* values are linear multipliers of the effect (and values over 1 are
|
||||
* permitted).
|
||||
*
|
||||
* @param {number} saturation The saturation of the layer.
|
||||
* @param {number|undefined} saturation The saturation of the layer.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
@@ -410,7 +415,7 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} visible The visibility of the layer.
|
||||
* @param {boolean|undefined} visible The visiblity of the layer.
|
||||
* @observable
|
||||
* @api stable
|
||||
*/
|
||||
|
||||
@@ -58,7 +58,7 @@ ol.layer.Group = function(opt_options) {
|
||||
|
||||
if (goog.isDefAndNotNull(layers)) {
|
||||
if (goog.isArray(layers)) {
|
||||
layers = new ol.Collection(layers.slice());
|
||||
layers = new ol.Collection(goog.array.clone(layers));
|
||||
} else {
|
||||
goog.asserts.assertInstanceof(layers, ol.Collection);
|
||||
layers = layers;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
goog.provide('ol.layer.Tile');
|
||||
|
||||
goog.require('goog.object');
|
||||
goog.require('ol.layer.Layer');
|
||||
|
||||
|
||||
@@ -30,27 +29,19 @@ ol.layer.TileProperty = {
|
||||
*/
|
||||
ol.layer.Tile = function(opt_options) {
|
||||
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||
|
||||
var baseOptions = goog.object.clone(options);
|
||||
|
||||
delete baseOptions.preload;
|
||||
delete baseOptions.useInterimTilesOnError;
|
||||
goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));
|
||||
|
||||
this.setPreload(goog.isDef(options.preload) ? options.preload : 0);
|
||||
this.setUseInterimTilesOnError(goog.isDef(options.useInterimTilesOnError) ?
|
||||
options.useInterimTilesOnError : true);
|
||||
goog.base(this, /** @type {olx.layer.LayerOptions} */ (options));
|
||||
};
|
||||
goog.inherits(ol.layer.Tile, ol.layer.Layer);
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} The level to preload tiles up to.
|
||||
* @return {number|undefined} The level to preload tiles up to.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Tile.prototype.getPreload = function() {
|
||||
return /** @type {number} */ (this.get(ol.layer.TileProperty.PRELOAD));
|
||||
return /** @type {number|undefined} */ (
|
||||
this.get(ol.layer.TileProperty.PRELOAD));
|
||||
};
|
||||
goog.exportProperty(
|
||||
ol.layer.Tile.prototype,
|
||||
@@ -81,12 +72,12 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @return {boolean} Use interim tiles on error.
|
||||
* @return {boolean|undefined} Use interim tiles on error.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
ol.layer.Tile.prototype.getUseInterimTilesOnError = function() {
|
||||
return /** @type {boolean} */ (
|
||||
return /** @type {boolean|undefined} */ (
|
||||
this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR));
|
||||
};
|
||||
goog.exportProperty(
|
||||
@@ -96,7 +87,7 @@ goog.exportProperty(
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} useInterimTilesOnError Use interim tiles on error.
|
||||
* @param {boolean|undefined} useInterimTilesOnError Use interim tiles on error.
|
||||
* @observable
|
||||
* @api
|
||||
*/
|
||||
|
||||
@@ -35,8 +35,6 @@ ol.layer.Vector = function(opt_options) {
|
||||
var baseOptions = goog.object.clone(options);
|
||||
|
||||
delete baseOptions.style;
|
||||
delete baseOptions.renderBuffer;
|
||||
delete baseOptions.updateWhileAnimating;
|
||||
goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));
|
||||
|
||||
/**
|
||||
@@ -62,13 +60,6 @@ ol.layer.Vector = function(opt_options) {
|
||||
|
||||
this.setStyle(options.style);
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.updateWhileAnimating_ = goog.isDef(options.updateWhileAnimating) ?
|
||||
options.updateWhileAnimating : false;
|
||||
|
||||
};
|
||||
goog.inherits(ol.layer.Vector, ol.layer.Layer);
|
||||
|
||||
@@ -121,15 +112,6 @@ ol.layer.Vector.prototype.getStyleFunction = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {boolean} Whether the rendered layer should be updated while
|
||||
* animating.
|
||||
*/
|
||||
ol.layer.Vector.prototype.getUpdateWhileAnimating = function() {
|
||||
return this.updateWhileAnimating_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {function(ol.Feature, ol.Feature):number|null|undefined} renderOrder
|
||||
* Render order.
|
||||
|
||||
129
src/ol/map.js
129
src/ol/map.js
@@ -5,6 +5,7 @@
|
||||
goog.provide('ol.Map');
|
||||
goog.provide('ol.MapProperty');
|
||||
|
||||
goog.require('goog.Uri.QueryData');
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.async.AnimationDelay');
|
||||
@@ -21,7 +22,6 @@ goog.require('goog.events.KeyHandler');
|
||||
goog.require('goog.events.KeyHandler.EventType');
|
||||
goog.require('goog.events.MouseWheelHandler');
|
||||
goog.require('goog.events.MouseWheelHandler.EventType');
|
||||
goog.require('goog.functions');
|
||||
goog.require('goog.log');
|
||||
goog.require('goog.log.Level');
|
||||
goog.require('goog.object');
|
||||
@@ -165,21 +165,6 @@ ol.Map = function(options) {
|
||||
|
||||
var optionsInternal = ol.Map.createOptionsInternal(options);
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.loadTilesWhileAnimating_ = goog.isDef(options.loadTilesWhileAnimating) ?
|
||||
options.loadTilesWhileAnimating : false;
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.loadTilesWhileInteracting_ =
|
||||
goog.isDef(options.loadTilesWhileInteracting) ?
|
||||
options.loadTilesWhileInteracting : false;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {number}
|
||||
@@ -317,6 +302,12 @@ ol.Map = function(options) {
|
||||
*/
|
||||
this.controls_ = optionsInternal.controls;
|
||||
|
||||
/**
|
||||
* @type {olx.DeviceOptions}
|
||||
* @private
|
||||
*/
|
||||
this.deviceOptions_ = optionsInternal.deviceOptions;
|
||||
|
||||
/**
|
||||
* @type {ol.Collection.<ol.interaction.Interaction>}
|
||||
* @private
|
||||
@@ -583,77 +574,12 @@ ol.Map.prototype.forEachFeatureAtPixel =
|
||||
var layerFilter = goog.isDef(opt_layerFilter) ?
|
||||
opt_layerFilter : goog.functions.TRUE;
|
||||
var thisArg2 = goog.isDef(opt_this2) ? opt_this2 : null;
|
||||
return this.renderer_.forEachFeatureAtCoordinate(
|
||||
return this.renderer_.forEachFeatureAtPixel(
|
||||
coordinate, this.frameState_, callback, thisArg,
|
||||
layerFilter, thisArg2);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Detect layers that have a color value at a pixel on the viewport, and
|
||||
* execute a callback with each matching layer. Layers included in the
|
||||
* detection can be configured through `opt_layerFilter`. Feature overlays will
|
||||
* always be included in the detection.
|
||||
* @param {ol.Pixel} pixel Pixel.
|
||||
* @param {function(this: S, ol.layer.Layer): T} callback Layer
|
||||
* callback. If the detected feature is not on a layer, but on a
|
||||
* {@link ol.FeatureOverlay}, then the argument to this function will
|
||||
* be `null`. To stop detection, callback functions can return a truthy
|
||||
* value.
|
||||
* @param {S=} opt_this Value to use as `this` when executing `callback`.
|
||||
* @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer
|
||||
* filter function, only layers which are visible and for which this
|
||||
* function returns `true` will be tested for features. By default, all
|
||||
* visible layers will be tested. Feature overlays will always be tested.
|
||||
* @param {U=} opt_this2 Value to use as `this` when executing `layerFilter`.
|
||||
* @return {T|undefined} Callback result, i.e. the return value of last
|
||||
* callback execution, or the first truthy callback return value.
|
||||
* @template S,T,U
|
||||
* @api stable
|
||||
*/
|
||||
ol.Map.prototype.forEachLayerAtPixel =
|
||||
function(pixel, callback, opt_this, opt_layerFilter, opt_this2) {
|
||||
if (goog.isNull(this.frameState_)) {
|
||||
return;
|
||||
}
|
||||
var thisArg = goog.isDef(opt_this) ? opt_this : null;
|
||||
var layerFilter = goog.isDef(opt_layerFilter) ?
|
||||
opt_layerFilter : goog.functions.TRUE;
|
||||
var thisArg2 = goog.isDef(opt_this2) ? opt_this2 : null;
|
||||
return this.renderer_.forEachLayerAtPixel(
|
||||
pixel, this.frameState_, callback, thisArg,
|
||||
layerFilter, thisArg2);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Detect if features intersect a pixel on the viewport. Layers included in the
|
||||
* detection can be configured through `opt_layerFilter`. Feature overlays will
|
||||
* always be included in the detection.
|
||||
* @param {ol.Pixel} pixel Pixel.
|
||||
* @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer
|
||||
* filter function, only layers which are visible and for which this
|
||||
* function returns `true` will be tested for features. By default, all
|
||||
* visible layers will be tested. Feature overlays will always be tested.
|
||||
* @param {U=} opt_this Value to use as `this` when executing `layerFilter`.
|
||||
* @return {boolean} Is there a feature at the given pixel?
|
||||
* @template U
|
||||
* @api
|
||||
*/
|
||||
ol.Map.prototype.hasFeatureAtPixel =
|
||||
function(pixel, opt_layerFilter, opt_this) {
|
||||
if (goog.isNull(this.frameState_)) {
|
||||
return false;
|
||||
}
|
||||
var coordinate = this.getCoordinateFromPixel(pixel);
|
||||
var layerFilter = goog.isDef(opt_layerFilter) ?
|
||||
opt_layerFilter : goog.functions.TRUE;
|
||||
var thisArg = goog.isDef(opt_this) ? opt_this : null;
|
||||
return this.renderer_.hasFeatureAtCoordinate(
|
||||
coordinate, this.frameState_, layerFilter, thisArg);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Returns the geographical coordinate for a browser event.
|
||||
* @param {Event} event Event.
|
||||
@@ -672,12 +598,19 @@ ol.Map.prototype.getEventCoordinate = function(event) {
|
||||
* @api stable
|
||||
*/
|
||||
ol.Map.prototype.getEventPixel = function(event) {
|
||||
// goog.style.getRelativePosition is based on event.targetTouches,
|
||||
// but touchend and touchcancel events have no targetTouches when
|
||||
// the last finger is removed from the screen.
|
||||
// So we ourselves compute the position of touch events.
|
||||
// See https://github.com/google/closure-library/pull/323
|
||||
if (goog.isDef(event.changedTouches)) {
|
||||
// Use the offsetX and offsetY values if available.
|
||||
// See http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx and
|
||||
// http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety
|
||||
if (goog.isDef(event.offsetX) && goog.isDef(event.offsetY)) {
|
||||
return [event.offsetX, event.offsetY];
|
||||
} else if (goog.isDef(event.changedTouches)) {
|
||||
// offsetX and offsetY are not defined for Touch Event
|
||||
//
|
||||
// goog.style.getRelativePosition is based on event.targetTouches,
|
||||
// but touchend and touchcancel events have no targetTouches when
|
||||
// the last finger is removed from the screen.
|
||||
// So we ourselves compute the position of touch events.
|
||||
// See https://github.com/google/closure-library/pull/323
|
||||
var touch = event.changedTouches[0];
|
||||
var viewportPosition = goog.style.getClientPosition(this.viewport_);
|
||||
return [
|
||||
@@ -685,6 +618,8 @@ ol.Map.prototype.getEventPixel = function(event) {
|
||||
touch.clientY - viewportPosition.y
|
||||
];
|
||||
} else {
|
||||
// Compute offsetX and offsetY values for browsers that don't implement
|
||||
// cssom-view specification
|
||||
var eventPosition = goog.style.getRelativePosition(event, this.viewport_);
|
||||
return [eventPosition.x, eventPosition.y];
|
||||
}
|
||||
@@ -980,12 +915,15 @@ ol.Map.prototype.handlePostRender = function() {
|
||||
var tileSourceCount = 0;
|
||||
if (!goog.isNull(frameState)) {
|
||||
var hints = frameState.viewHints;
|
||||
var deviceOptions = this.deviceOptions_;
|
||||
if (hints[ol.ViewHint.ANIMATING]) {
|
||||
maxTotalLoading = this.loadTilesWhileAnimating_ ? 8 : 0;
|
||||
maxTotalLoading = deviceOptions.loadTilesWhileAnimating === false ?
|
||||
0 : 8;
|
||||
maxNewLoads = 2;
|
||||
}
|
||||
if (hints[ol.ViewHint.INTERACTING]) {
|
||||
maxTotalLoading = this.loadTilesWhileInteracting_ ? 8 : 0;
|
||||
maxTotalLoading = deviceOptions.loadTilesWhileInteracting === false ?
|
||||
0 : 8;
|
||||
maxNewLoads = 2;
|
||||
}
|
||||
tileSourceCount = goog.object.getCount(frameState.wantedTiles);
|
||||
@@ -1459,6 +1397,7 @@ ol.Map.prototype.unskipFeature = function(feature) {
|
||||
|
||||
/**
|
||||
* @typedef {{controls: ol.Collection.<ol.control.Control>,
|
||||
* deviceOptions: olx.DeviceOptions,
|
||||
* interactions: ol.Collection.<ol.interaction.Interaction>,
|
||||
* keyboardEventTarget: (Element|Document),
|
||||
* logos: Object,
|
||||
@@ -1563,7 +1502,7 @@ ol.Map.createOptionsInternal = function(options) {
|
||||
var controls;
|
||||
if (goog.isDef(options.controls)) {
|
||||
if (goog.isArray(options.controls)) {
|
||||
controls = new ol.Collection(options.controls.slice());
|
||||
controls = new ol.Collection(goog.array.clone(options.controls));
|
||||
} else {
|
||||
goog.asserts.assertInstanceof(options.controls, ol.Collection);
|
||||
controls = options.controls;
|
||||
@@ -1572,10 +1511,13 @@ ol.Map.createOptionsInternal = function(options) {
|
||||
controls = ol.control.defaults();
|
||||
}
|
||||
|
||||
var deviceOptions = goog.isDef(options.deviceOptions) ?
|
||||
options.deviceOptions : /** @type {olx.DeviceOptions} */ ({});
|
||||
|
||||
var interactions;
|
||||
if (goog.isDef(options.interactions)) {
|
||||
if (goog.isArray(options.interactions)) {
|
||||
interactions = new ol.Collection(options.interactions.slice());
|
||||
interactions = new ol.Collection(goog.array.clone(options.interactions));
|
||||
} else {
|
||||
goog.asserts.assertInstanceof(options.interactions, ol.Collection);
|
||||
interactions = options.interactions;
|
||||
@@ -1587,7 +1529,7 @@ ol.Map.createOptionsInternal = function(options) {
|
||||
var overlays;
|
||||
if (goog.isDef(options.overlays)) {
|
||||
if (goog.isArray(options.overlays)) {
|
||||
overlays = new ol.Collection(options.overlays.slice());
|
||||
overlays = new ol.Collection(goog.array.clone(options.overlays));
|
||||
} else {
|
||||
goog.asserts.assertInstanceof(options.overlays, ol.Collection);
|
||||
overlays = options.overlays;
|
||||
@@ -1598,6 +1540,7 @@ ol.Map.createOptionsInternal = function(options) {
|
||||
|
||||
return {
|
||||
controls: controls,
|
||||
deviceOptions: deviceOptions,
|
||||
interactions: interactions,
|
||||
keyboardEventTarget: keyboardEventTarget,
|
||||
logos: logos,
|
||||
|
||||
@@ -30,11 +30,9 @@ goog.require('ol.pointer.PointerEventHandler');
|
||||
* @param {string} type Event type.
|
||||
* @param {ol.Map} map Map.
|
||||
* @param {goog.events.BrowserEvent} browserEvent Browser event.
|
||||
* @param {boolean=} opt_dragging Is the map currently being dragged?
|
||||
* @param {?olx.FrameState=} opt_frameState Frame state.
|
||||
*/
|
||||
ol.MapBrowserEvent = function(type, map, browserEvent, opt_dragging,
|
||||
opt_frameState) {
|
||||
ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) {
|
||||
|
||||
goog.base(this, type, map, opt_frameState);
|
||||
|
||||
@@ -63,15 +61,6 @@ ol.MapBrowserEvent = function(type, map, browserEvent, opt_dragging,
|
||||
*/
|
||||
this.coordinate = map.getCoordinateFromPixel(this.pixel);
|
||||
|
||||
/**
|
||||
* Indicates if the map is currently being dragged. Only set for
|
||||
* `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
|
||||
*
|
||||
* @type {boolean}
|
||||
* @api stable
|
||||
*/
|
||||
this.dragging = goog.isDef(opt_dragging) ? opt_dragging : false;
|
||||
|
||||
};
|
||||
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
|
||||
|
||||
@@ -107,14 +96,11 @@ ol.MapBrowserEvent.prototype.stopPropagation = function() {
|
||||
* @param {string} type Event type.
|
||||
* @param {ol.Map} map Map.
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
|
||||
* @param {boolean=} opt_dragging Is the map currently being dragged?
|
||||
* @param {?olx.FrameState=} opt_frameState Frame state.
|
||||
*/
|
||||
ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_dragging,
|
||||
opt_frameState) {
|
||||
ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_frameState) {
|
||||
|
||||
goog.base(this, type, map, pointerEvent.browserEvent, opt_dragging,
|
||||
opt_frameState);
|
||||
goog.base(this, type, map, pointerEvent.browserEvent, opt_frameState);
|
||||
|
||||
/**
|
||||
* @const
|
||||
@@ -153,7 +139,7 @@ ol.MapBrowserEventHandler = function(map) {
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.dragging_ = false;
|
||||
this.dragged_ = false;
|
||||
|
||||
/**
|
||||
* @type {Array.<number>}
|
||||
@@ -176,8 +162,6 @@ ol.MapBrowserEventHandler = function(map) {
|
||||
}
|
||||
|
||||
/**
|
||||
* The most recent "down" type event (or null if none have occurred).
|
||||
* Set on pointerdown.
|
||||
* @type {ol.pointer.PointerEvent}
|
||||
* @private
|
||||
*/
|
||||
@@ -238,6 +222,16 @@ ol.MapBrowserEventHandler = function(map) {
|
||||
goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget);
|
||||
|
||||
|
||||
/**
|
||||
* Get the last "down" type event. This will be set on pointerdown.
|
||||
* @return {ol.pointer.PointerEvent} The most recent "down" type event (or null
|
||||
* if none have occurred).
|
||||
*/
|
||||
ol.MapBrowserEventHandler.prototype.getDown = function() {
|
||||
return this.down_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {goog.events.BrowserEvent} browserEvent Pointer event.
|
||||
* @private
|
||||
@@ -310,24 +304,22 @@ ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {
|
||||
ol.MapBrowserEvent.EventType.POINTERUP, this.map_, pointerEvent);
|
||||
this.dispatchEvent(newEvent);
|
||||
|
||||
// We emulate click events on left mouse button click, touch contact, and pen
|
||||
// contact. isMouseActionButton returns true in these cases (evt.button is set
|
||||
// to 0).
|
||||
// See http://www.w3.org/TR/pointerevents/#button-states
|
||||
if (!this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
|
||||
goog.asserts.assert(!goog.isNull(this.down_));
|
||||
this.emulateClick_(this.down_);
|
||||
}
|
||||
|
||||
goog.asserts.assert(this.activePointers_ >= 0);
|
||||
if (this.activePointers_ === 0) {
|
||||
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
|
||||
this.dragListenerKeys_ = null;
|
||||
this.dragging_ = false;
|
||||
this.down_ = null;
|
||||
goog.dispose(this.documentPointerEventHandler_);
|
||||
this.documentPointerEventHandler_ = null;
|
||||
}
|
||||
|
||||
// We emulate click event on left mouse button click, touch contact, and pen
|
||||
// contact. isMouseActionButton returns true in these cases (evt.button is set
|
||||
// to 0).
|
||||
// See http://www.w3.org/TR/pointerevents/#button-states
|
||||
if (!this.dragged_ && this.isMouseActionButton_(pointerEvent)) {
|
||||
goog.asserts.assert(!goog.isNull(this.down_));
|
||||
this.emulateClick_(this.down_);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -358,6 +350,7 @@ ol.MapBrowserEventHandler.prototype.handlePointerDown_ =
|
||||
this.dispatchEvent(newEvent);
|
||||
|
||||
this.down_ = pointerEvent;
|
||||
this.dragged_ = false;
|
||||
|
||||
if (goog.isNull(this.dragListenerKeys_)) {
|
||||
/* Set up a pointer event handler on the `document`,
|
||||
@@ -406,11 +399,11 @@ ol.MapBrowserEventHandler.prototype.handlePointerMove_ =
|
||||
// the exact same coordinates of the pointerdown event. To avoid a
|
||||
// 'false' touchmove event to be dispatched , we test if the pointer
|
||||
// effectively moved.
|
||||
if (this.isMoving_(pointerEvent)) {
|
||||
this.dragging_ = true;
|
||||
if (pointerEvent.clientX != this.down_.clientX ||
|
||||
pointerEvent.clientY != this.down_.clientY) {
|
||||
this.dragged_ = true;
|
||||
var newEvent = new ol.MapBrowserPointerEvent(
|
||||
ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent,
|
||||
this.dragging_);
|
||||
ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent);
|
||||
this.dispatchEvent(newEvent);
|
||||
}
|
||||
|
||||
@@ -429,20 +422,8 @@ ol.MapBrowserEventHandler.prototype.handlePointerMove_ =
|
||||
* @private
|
||||
*/
|
||||
ol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
|
||||
var dragging = !goog.isNull(this.down_) && this.isMoving_(pointerEvent);
|
||||
this.dispatchEvent(new ol.MapBrowserPointerEvent(
|
||||
pointerEvent.type, this.map_, pointerEvent, dragging));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
|
||||
* @return {boolean}
|
||||
* @private
|
||||
*/
|
||||
ol.MapBrowserEventHandler.prototype.isMoving_ = function(pointerEvent) {
|
||||
return pointerEvent.clientX != this.down_.clientX ||
|
||||
pointerEvent.clientY != this.down_.clientY;
|
||||
pointerEvent.type, this.map_, pointerEvent));
|
||||
};
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user