Compare commits

...

266 Commits

Author SHA1 Message Date
Andreas Hocevar
c9c845394f Merge pull request #4238 from openlayers/release-v3.10.0
Release v3.10.0
2015-10-08 19:17:58 +02:00
Andreas Hocevar
63bc9459d9 Update package version to 3.10.0 2015-10-08 19:16:23 +02:00
Andreas Hocevar
f6d40faa3d Changelog for v3.10.0 2015-10-08 19:15:48 +02:00
Andreas Hocevar
c475902e19 Merge pull request #4237 from awaterme/master
#3328: GML3 - Writing features with multiple geometries
2015-10-08 18:11:53 +02:00
Andreas Watermeyer
687a65aa95 #3328: reformatted fixjsstyle 2015-10-08 17:21:15 +02:00
Andreas Watermeyer
4c207d9460 #3328: Reformat once again 2015-10-08 17:09:48 +02:00
awaterme
5fb7a8bc34 #3328: Reformatted details. 2015-10-08 16:52:32 +02:00
Andreas Hocevar
391e2b6fea Merge pull request #4218 from jonataswalker/getlayer-from-selectinteraction
Add 'getLayer()' method to 'ol.interaction.Select'
2015-10-08 16:20:31 +02:00
jonataswalker
04c16106cd Add unit test to ol.interaction.Select#getLayer 2015-10-08 16:18:33 +02:00
jonataswalker
85163bceb6 Add 'getLayer()' method to 'ol.interaction.Select' 2015-10-08 16:18:33 +02:00
jonataswalker
094f8d5391 Add 'getLayer()' method to 'ol.interaction.Select' 2015-10-08 16:18:33 +02:00
Andreas Hocevar
09026af4fa Merge pull request #4236 from ahocevar/recover-from-conflict-4036
Recover from bad merge conflict resolution in #4036
2015-10-08 15:34:37 +02:00
Andreas Hocevar
d429eba4ae Merge pull request #3858 from Jebjum/master
Fix graticule on wrapped views
2015-10-08 15:27:37 +02:00
Andreas Hocevar
dc0c0877d7 Recover from bad merge conflict resolution in #4036 2015-10-08 15:18:11 +02:00
Andreas Hocevar
21d001b22a Merge pull request #4036 from alvinlindstam/fix-modify-events
Fix modify interaction event order
2015-10-08 12:23:38 +02:00
Alvin Lindstam
487c22ceae Fix miswritten test 2015-10-08 12:23:11 +02:00
Alvin Lindstam
72a9460ff6 Fix modify event trigger order, should trigger modifystart before any modification and modifyend last. 2015-10-08 12:23:11 +02:00
Andreas Hocevar
46a1140583 Merge pull request #4036 from alvinlindstam/fix-modify-events
Fix modify interaction event order
2015-10-08 12:17:57 +02:00
Andreas Hocevar
f95b154117 Merge pull request #4116 from ahocevar/overviewmap-view
Make ol.control.OverviewMap's view configurable
2015-10-08 11:44:38 +02:00
Andreas Hocevar
7c5bec260b Merge pull request #4234 from tbarsballe/ogcwkt-proj4
Support OGC WKT proj4 def.units and def.to_meter
2015-10-07 20:59:00 +02:00
Torben Barsbsballe
7cefe56167 Support OGC WKT proj4 def.units and def.to_meter 2015-10-07 11:18:52 -07:00
Frédéric Junod
ce9ac92028 Merge pull request #4224 from fredj/simplify_rotate
Don't transform the angle into degrees to rotate the element
2015-10-07 09:04:41 +02:00
Andreas Hocevar
da830a7670 Merge pull request #4231 from ahocevar/revert-4217
Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement"
2015-10-06 16:19:25 +02:00
Andreas Hocevar
e242c2ca1d Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement"
This reverts commit 82e989b652, reversing
changes made to 0e83c90377.
2015-10-06 16:17:43 +02:00
Andreas Hocevar
82e989b652 Merge pull request #4217 from ThomasG77/clipboardjs-replacement
Replace ZeroClipboard with Clipboard.js to remove flash dependency
2015-10-06 16:08:15 +02:00
Frédéric Junod
0e83c90377 Merge pull request #4223 from fredj/rm_easing
Remove goog.fx.easing
2015-10-06 14:38:52 +02:00
Frédéric Junod
fb243807e8 Merge pull request #4222 from fredj/cleanup
Remove unnecessary cast
2015-10-06 14:27:55 +02:00
Frederic Junod
d495b19448 Don't transform the angle into degrees to rotate the element 2015-10-06 14:04:47 +02:00
Frederic Junod
ef5cdb0ec6 Remove goog.fx.easing 2015-10-06 14:00:06 +02:00
Frederic Junod
b3493c6382 Remove unnecessary cast 2015-10-06 11:26:39 +02:00
Andreas Hocevar
17bac04030 Merge pull request #4209 from gberaudo/remove_goog_string_remove
Remove goog.string.remove
2015-10-05 10:04:13 +02:00
Andreas Hocevar
e01c16c00b Merge pull request #4207 from gberaudo/remove_goog_string_startsWith
Remove goog.string.startsWith
2015-10-05 09:28:44 +02:00
Frédéric Junod
5abeaf3716 Merge pull request #4208 from gberaudo/remove_goog_string_trim
Remove goog.string.trim()
2015-10-05 09:06:32 +02:00
Andreas Hocevar
1d86ae3e3f Merge pull request #4216 from ahocevar/fill-stroke-boolean
Fix canvas replay which broke with 31a68e2
2015-10-05 08:57:36 +02:00
ThomasG77
7192a6d1a5 Replace ZeroClipboard with Clipboard.js to remove flash dependency 2015-10-05 01:23:20 +02:00
Andreas Hocevar
deea8060af Fix canvas replay which broke with 31a68e2
See #4192
2015-10-04 23:12:39 +02:00
Andreas Hocevar
faff14c44c Merge pull request #4164 from spatialillusions/patch-1 2015-10-02 11:11:08 +02:00
Andreas Hocevar
2d7d002c85 Fix coding style 2015-10-02 11:05:19 +02:00
Guillaume Beraudo
9b3f61a084 Remove goog.string.remove
Use standard replace method instead.
2015-10-01 14:54:04 +02:00
Frédéric Junod
4cf1ee769e Merge pull request #4202 from fredj/rm_appendChild
Remove use of goog.dom.appendChild
2015-10-01 14:49:15 +02:00
Frédéric Junod
0a617bef12 Merge pull request #4205 from fredj/cleanup
Minor cleanup
2015-10-01 14:23:43 +02:00
Guillaume Beraudo
fef1b0981e Remove goog.string.trim()
Replace with standard ECMAScript 5.1.
2015-10-01 14:14:06 +02:00
Guillaume Beraudo
b092bce4ff Remove goog.string.startsWith
Replace with simple indexOf test
2015-10-01 14:00:42 +02:00
Frederic Junod
ef9b64673e Remove unused local variables 2015-10-01 13:38:55 +02:00
Frederic Junod
4d53049a7f Remove unnecessary cast 2015-10-01 13:38:49 +02:00
Marc Jansen
900827987a Merge pull request #4203 from marcjansen/formatting-post-4184
Cosmetic changes to example html / css
2015-10-01 13:00:05 +02:00
Marc Jansen
53d079ed95 Cosmetic changes to example html / css 2015-10-01 12:35:53 +02:00
Marc Jansen
63ae481dae Merge pull request #4184 from jonataswalker/getfeatureinfo-example
Adjust iframe's position of GetFeatureInfo examples
2015-10-01 12:32:15 +02:00
Frederic Junod
9b6ad1b36f Remove use of goog.dom.appendChild
Use `parent.appendChild(child)` instead.
2015-10-01 12:06:38 +02:00
Marc Jansen
e5397cbfca Merge pull request #4192 from marcjansen/simpler-no-is-null
Remove use of goog.isNull in favor of simple truthy checks
2015-10-01 09:30:34 +02:00
Marc Jansen
a38ac3a07b Use !!expr and not the verbose expr !== null
This addresses review comments by @tschaub.
2015-10-01 09:18:53 +02:00
Marc Jansen
d5c5d651cb Remove goog.isNull in xml class 2015-10-01 09:18:53 +02:00
Marc Jansen
ef0153692e Remove goog.isNull in tileurlfunction class 2015-10-01 09:18:53 +02:00
Marc Jansen
5daf741922 Remove goog.isNull in tilecoord class 2015-10-01 09:18:53 +02:00
Marc Jansen
ae657518c5 Remove goog.isNull in view class 2015-10-01 09:18:53 +02:00
Marc Jansen
7d110c829f Remove goog.isNull in tilegrid class 2015-10-01 09:18:53 +02:00
Marc Jansen
369f5a6171 Remove goog.isNull in lrucache class 2015-10-01 09:18:53 +02:00
Marc Jansen
b11c9c3b9c Remove goog.isNull in proj class 2015-10-01 09:18:53 +02:00
Marc Jansen
7530e46cfa Remove goog.isNull in pointereventhandler class 2015-10-01 09:18:53 +02:00
Marc Jansen
2b84e0f245 Remove goog.isNull in overlay class 2015-10-01 09:18:53 +02:00
Marc Jansen
5502083af9 Remove goog.isNull in mapbrowserevent class 2015-10-01 09:18:53 +02:00
Marc Jansen
02fe825113 Remove goog.isNull in map class 2015-10-01 09:18:53 +02:00
Marc Jansen
6aa75c490b Remove goog.isNull in has class 2015-10-01 09:18:53 +02:00
Marc Jansen
89456e7906 Remove goog.isNull in graticule class 2015-10-01 09:18:53 +02:00
Marc Jansen
442caade91 Remove goog.isNull in geolocation class 2015-10-01 09:18:53 +02:00
Marc Jansen
e479411614 Remove goog.isNull in feature class 2015-10-01 09:18:53 +02:00
Marc Jansen
f360080fa7 Remove goog.isNull in dom class 2015-10-01 09:18:53 +02:00
Marc Jansen
e65384a407 Remove goog.isNull in deviceorientation class 2015-10-01 09:18:53 +02:00
Marc Jansen
3552f5ff66 Remove goog.isNull in attribution class 2015-10-01 09:18:53 +02:00
Marc Jansen
54d4434900 Remove goog.isNull in animation class 2015-10-01 09:18:53 +02:00
Marc Jansen
7ceb7a439e Remove goog.isNull in webgl classes 2015-10-01 09:18:53 +02:00
Marc Jansen
f9b07991e1 Remove goog.isNull in style classes 2015-10-01 09:18:53 +02:00
Marc Jansen
e1f477ad8c Remove goog.isNull in source classes 2015-10-01 09:18:52 +02:00
Marc Jansen
30e2f44825 Remove goog.isNull in image classes 2015-10-01 09:17:14 +02:00
Marc Jansen
138adf0509 Remove goog.isNull in renderer classes 2015-10-01 09:17:14 +02:00
Marc Jansen
31a68e21a5 Remove goog.isNull in render classes 2015-10-01 09:17:14 +02:00
Marc Jansen
f5788a32a7 Remove goog.isNull in layer classes 2015-10-01 09:17:14 +02:00
Marc Jansen
be2e4a33ae Remove goog.isNull in interaction classes 2015-10-01 09:17:14 +02:00
Marc Jansen
3c4e663224 Remove goog.isNull in geom classes 2015-10-01 09:17:14 +02:00
Marc Jansen
eb5088eb40 Remove goog.isNull in format classes 2015-10-01 09:17:14 +02:00
Marc Jansen
d728c71f02 Remove goog.isNull in control classes 2015-10-01 09:15:15 +02:00
Andreas Hocevar
8813180d41 Merge pull request #4187 from ahocevar/dashy-tileurl
Fix {-y} template calculation for custom (TMS) tile grids
2015-10-01 08:11:05 +02:00
Tim Schaub
6bdacced92 Merge pull request #4176 from tschaub/remove-isdefandnotnull
Remove use of goog.isDefAndNotNull().
2015-10-01 00:05:57 -06:00
Marc Jansen
74fffd5851 Merge pull request #4200 from marcjansen/no-object-get
Do not use goog.object.get
2015-10-01 07:09:57 +02:00
Marc Jansen
c4d5036878 Do not use goog.object.get 2015-09-30 22:27:39 +02:00
Andreas Hocevar
e6c5fa9cd7 Merge pull request #4198 from denilsonsa/patch-2
Improve ol.control.Rotate.prototype.resetNorth_ performance
2015-09-30 16:26:09 +02:00
Frédéric Junod
d29db03863 Merge pull request #4197 from denilsonsa/patch-1
Remove blur action on MOUSEOUT on Zoom Out button
2015-09-30 14:42:47 +02:00
Denilson Figueiredo de Sá
c8f0bb0ade Improve ol.control.Rotate.prototype.resetNorth_ performance
Changing. resetNorth_ function from O(n) to O(1).

To reproduce this issue, open the developer console and execute:

    map.getView().setRotation(5000000000);

Then click on the rotation button. Before the commit, it takes a few
seconds, after this commit it is instantaneous.

In addition, due to limited floating point precision, the previous code
calculates a different value from this one.
2015-09-30 09:37:51 -03:00
Denilson Figueiredo de Sá
e7ba63e020 Remove blur action on MOUSEOUT on Zoom Out button
This is a follow up of commit 761aa0ea5c.
That commit removed ol.control.Control.bindMouseOutFocusOutBlur function,
but forgot to remove this piece of code here.
2015-09-30 08:56:35 -03:00
Andreas Hocevar
8e122334ed Merge pull request #4195 from awaterme/Issue-4171
#4171: Prefer current layout as default on MultiLineString.setLineStrings()
2015-09-30 11:07:28 +02:00
Andreas Watermeyer
ea8ffd8b6a Issue #4171: Prefer current layout as default on MultiLineString.setLineStrings() 2015-09-30 09:21:14 +02:00
Andreas Hocevar
8248ec63ba Fix {-y} template calculation for custom (TMS) tile grids
Previously, {-y} only worked for the standard web mercator tile grid. Now
a tile grid with an extent is required (which we get from
ol.tilegrid.createXYZ() anyway), and then the y calculation for TMS style
tile grids works as expected.
2015-09-30 09:07:55 +02:00
Andreas Hocevar
79766ad25c Merge pull request #4172 from awaterme/Issue-4171
#4171: Prefer current layout as default on Multipolygon.setPolygons()
2015-09-29 22:58:12 +02:00
Marc Jansen
901eee1887 Merge pull request #4190 from marcjansen/no-goog-functions-constant
Remove use of goog.functions.constant
2015-09-29 22:11:50 +02:00
Marc Jansen
cd5b15fa55 Remove use of goog.functions.constant 2015-09-29 20:28:06 +02:00
Tim Schaub
ab87eb8af0 Remove remaining goog.isDefAndNotNull() calls 2015-09-29 09:51:41 -06:00
Tim Schaub
1aca93d297 Remove goog.isDefAndNotNull() from vector sources 2015-09-29 09:48:19 -06:00
Tim Schaub
871575607f Remove goog.isDefAndNotNull() from tileutfgridsource.js 2015-09-29 09:44:03 -06:00
Andreas Watermeyer
509cb3a3c9 Issue #4171: Prefer current layout as default on Multipolygon.setPolygons() 2015-09-29 17:40:46 +02:00
Tim Schaub
5acf9023d0 Remove goog.isDefAndNotNull() from deviceorientation.js 2015-09-29 09:39:19 -06:00
Frédéric Junod
fd729216b5 Merge pull request #4188 from fredj/rm_goog_object_getKeys
Remove use of goog.object.getKeys
2015-09-29 17:33:13 +02:00
Tim Schaub
b48cabee28 Remove unnecessary goog.isDefAndNotNull() calls 2015-09-29 09:32:51 -06:00
Tim Schaub
ed3dcd636f Replace !goog.isDefAndNotNull() with falsey checks 2015-09-29 09:32:51 -06:00
Tim Schaub
ac7db89a91 Replace goog.isDefAndNotNull() with truthy checks 2015-09-29 09:32:51 -06:00
Marc Jansen
8209ed0a4c Merge pull request #4189 from marcjansen/null-function
Replace goog.nullFunction with ol.nullFunction
2015-09-29 17:25:18 +02:00
Marc Jansen
bc58c383ba Replace goog.nullFunction with ol.nullFunction 2015-09-29 16:39:35 +02:00
Frederic Junod
d2dd7584d8 Remove use of goog.object.getKeys 2015-09-29 14:24:34 +02:00
Frederic Junod
23de622d29 Use goog.object.isEmpty instead of goog.object.getKeys 2015-09-29 14:24:34 +02:00
Frédéric Junod
fbef99ae96 Merge pull request #4165 from fredj/es5
Use ECMAScript 5.1 Array functions instead of goog.array
2015-09-29 14:09:32 +02:00
Frederic Junod
496cece074 Remove use of goog.array.forEach 2015-09-29 10:55:17 +02:00
Frederic Junod
cd152cca14 Use a for loop instead of goog.array.forEach
The variable is a NodeList, not an Array.
https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array
2015-09-29 10:55:17 +02:00
Frederic Junod
252e60b5af Remove use of goog.array.indexOf 2015-09-29 10:55:17 +02:00
Frederic Junod
f49e82ade1 Remove use of goog.array.filter 2015-09-29 10:54:55 +02:00
Frederic Junod
9e2a393426 Remove use of goog.array.map 2015-09-29 10:54:55 +02:00
Frédéric Junod
4e7f558234 Merge pull request #4181 from fredj/ol.array.includes
Remove use of goog.array.contains
2015-09-29 10:54:45 +02:00
Frederic Junod
da611b9cb5 Use ol.array.includes instead of goog.array.indexOf 2015-09-29 10:46:04 +02:00
Frederic Junod
88c3891bef Replace goog.array.contains with ol.array.includes 2015-09-29 10:42:07 +02:00
Frédéric Junod
504e67303f Merge pull request #4162 from fredj/rm_legacy_ie
Remove ol.LEGACY_IE_SUPPORT
2015-09-29 10:37:04 +02:00
Tim Schaub
ba5b950d5c Merge pull request #4174 from tschaub/fewer-layer-props
Remove hue, saturation, contrast, and brightness as layer properties.
2015-09-29 01:16:11 -06:00
jonataswalker
d939fcec3f Adjust iframe's position of GetFeatureInfo examples 2015-09-28 13:49:34 -03:00
Éric Lemoine
e8257e805d Merge pull request #4183 from elemoine/remove-extra-api
Remove @api on getHitDetectionFramebuffer
2015-09-28 16:34:51 +02:00
Éric Lemoine
4c32ec4d67 Remove @api on getHitDetectionFramebuffer
This removes the `@api` marker on `getHitDetectionFramebuffer`. I think this was added by mistake in 7404204.
2015-09-28 16:11:55 +02:00
Marc Jansen
fd69e5f2be Merge pull request #4179 from marcjansen/no-goog-now
Use Date.now() instead of goog.now()
2015-09-28 16:00:49 +02:00
Frederic Junod
e877a21b8e Remove legacy IE support 2015-09-28 15:36:49 +02:00
Marc Jansen
2ed3f28ab8 Use Date.now() instead of goog.now() 2015-09-28 15:23:36 +02:00
Tim Schaub
55908485f2 Add detail to the upgrade notes 2015-09-27 23:02:24 -06:00
Tim Schaub
d6f03697d7 Remove hue, saturation, contrast, and brightness 2015-09-27 13:16:30 -06:00
Tim Schaub
6c5775e6f6 Merge pull request #4175 from tschaub/clamp
Remove use of goog.math.clamp().
2015-09-27 13:13:25 -06:00
Andreas Hocevar
28eef6c479 Merge pull request #4173 from ahocevar/zoom-only-when-changed
Only animate when resolution is about to be changed
2015-09-27 21:13:02 +02:00
Andreas Hocevar
4e48170fac Only animate when resolution is about to be changed 2015-09-27 20:38:50 +02:00
Tim Schaub
f746cb7f57 Use ol.math.clamp() 2015-09-27 12:26:21 -06:00
Tim Schaub
5cac9d61cc Merge pull request #4129 from openlayers/no-is-def
Remove use of goog.isDef.
2015-09-27 12:10:10 -06:00
Tim Schaub
29a1ea9ae3 Remove remaining goog.isDef() calls 2015-09-27 11:13:58 -06:00
Tim Schaub
c48ce003ba Remove unnecessary goog.isDef() checks from map.js 2015-09-27 11:03:27 -06:00
Tim Schaub
27d1e808b8 Replace goog.isDef(foo[bar]) with bar in foo 2015-09-27 10:58:39 -06:00
Tim Schaub
b3b31ea16d Inline various goog.isDef() calls 2015-09-27 10:51:03 -06:00
Tim Schaub
83c59ee255 Inline goog.isDef() calls for properties 2015-09-27 10:40:20 -06:00
Tim Schaub
36e336f406 Inline !goog.isDef() calls for properties 2015-09-27 10:37:20 -06:00
Tim Schaub
e3951fa3c6 Inline simple goog.isDef() calls 2015-09-27 10:34:44 -06:00
Tim Schaub
a86c270f6a Inline simple !goog.isDef() calls 2015-09-27 10:31:16 -06:00
Tim Schaub
3a0683f373 Inline !goog.isDef() property checks 2015-09-27 10:24:38 -06:00
Tim Schaub
6638ae855d Inline simple !goog.isDef() checks 2015-09-27 10:23:30 -06:00
Tim Schaub
b36d697585 Inline goog.isDef() property checks 2015-09-27 10:21:50 -06:00
Tim Schaub
7659e47e07 Inline simple goog.isDef() checks 2015-09-27 10:18:44 -06:00
Tim Schaub
cf5eadebaa Define options 2015-09-27 10:11:30 -06:00
Tim Schaub
0927c55b3c Toward natural JavaScript syntax 2015-09-25 12:16:42 -06:00
Marc Jansen
d610b206f7 Adjust checks against undefined as suggested
This commit changes the various checks against undefined as suggested by
@elemoine, see e.g. his comments on 38636513bfc3792125de2e711a24bd3c898875ac.
2015-09-25 11:37:30 -06:00
Marc Jansen
7352ddeb89 Use ol.isDef in assertion
This addresses comment e558b5db63 (commitcomment-13406867)
by @elemoine.
2015-09-25 11:35:13 -06:00
Marc Jansen
8eea827343 Remove goog.isDef from maprenderer 2015-09-25 11:35:13 -06:00
Marc Jansen
710353784b Remove goog.isDef from render/vector 2015-09-25 11:35:13 -06:00
Marc Jansen
06b34055d1 Remove goog.isDef from touchsource 2015-09-25 11:35:13 -06:00
Marc Jansen
3de0aad52a Remove goog.isDef from pointerevent 2015-09-25 11:35:13 -06:00
Marc Jansen
4fa590965c Remove goog.isDef from vectorlayer 2015-09-25 11:35:12 -06:00
Marc Jansen
2b53d43faa Remove goog.isDef from tilelayer 2015-09-25 11:35:12 -06:00
Marc Jansen
0f55d173b8 Remove goog.isDef from layerbase 2015-09-25 11:35:12 -06:00
Marc Jansen
cbb72c1ce4 Remove goog.isDef from layer 2015-09-25 11:35:12 -06:00
Marc Jansen
66ad8364e0 Remove goog.isDef from imagelayer 2015-09-25 11:35:12 -06:00
Marc Jansen
b5ecc6e43c Remove goog.isDef from heatmaplayer 2015-09-25 11:35:12 -06:00
Marc Jansen
c1c07e2f3c Remove goog.isDef from snapinteraction 2015-09-25 11:35:12 -06:00
Marc Jansen
4b993727c8 Remove goog.isDef from selectinteraction 2015-09-25 11:35:12 -06:00
Marc Jansen
6c581b8eaf Remove goog.isDef from pointerinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
779811b52d Remove goog.isDef from pinchzoominteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
c7a98f19b7 Remove goog.isDef from pinchrotateinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
10d4aeb1c6 Remove goog.isDef from mousewheelzoominteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
20b694b8c1 Remove goog.isDef from keyboardpaninteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
13273fb632 Add explicit type casts for options.duration 2015-09-25 11:35:11 -06:00
Marc Jansen
05da0ceaab Use ol.isDef when testing options.duration 2015-09-25 11:35:11 -06:00
Marc Jansen
68442578ba Use ol.isDef when checking booleans 2015-09-25 11:35:11 -06:00
Marc Jansen
0e4c73072f Remove goog.isDef from modifyinteraction 2015-09-25 11:35:11 -06:00
Marc Jansen
bd7ff16537 Remove goog.isDef from keyboardzoominteraction 2015-09-25 11:28:56 -06:00
Marc Jansen
241047795f Remove goog.isDef from interactiondefaults 2015-09-25 11:28:56 -06:00
Marc Jansen
293c65088d Remove goog.isDef from interaction 2015-09-25 11:28:56 -06:00
Marc Jansen
c56ee19763 Remove goog.isDef from dragzoominteraction 2015-09-25 11:28:56 -06:00
Marc Jansen
08699e2b04 Remove goog.isDef from dragrotateinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
35dfa6c811 Remove goog.isDef from dragrotateandzoominteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
3e49fc6081 Remove goog.isDef from dragpaninteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
a42e4d4f4e Remove goog.isDef from dragboxinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
631b92412e Remove goog.isDef from draganddropinteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
27fb1b6fde Remove goog.isDef from geom/linestring 2015-09-25 11:28:55 -06:00
Marc Jansen
2b77e1601a Remove goog.isDef from doubleclickzoominteraction 2015-09-25 11:28:55 -06:00
Marc Jansen
eeba5f4d10 Remove goog.isDef from drawinteraction 2015-09-25 11:28:55 -06:00
Bart van den Eijnden
ceb39b0d07 Add docs for count and startIndex (WFS paging) 2015-09-25 11:28:55 -06:00
Tim Schaub
d7ca176362 Remove goog.isDef from more formats 2015-09-25 11:28:55 -06:00
Tim Schaub
b0fe36e609 Remove goog.isDef for geometries 2015-09-25 11:28:54 -06:00
Tim Schaub
1fceb4a709 Remove goog.isDef from formats 2015-09-25 11:28:54 -06:00
Tim Schaub
5350e9ba37 Remove goog.isDef from device orientation, dom, extent, and feature 2015-09-25 11:28:54 -06:00
Marc Jansen
390153adc8 Remove goog.isDef from coordinate.js 2015-09-25 11:28:54 -06:00
Tim Schaub
a096ec5bf7 Remove goog.isDef from controls (-278 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
007194a18f Remove goog.isDef from attributioncontrol.js (-33 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
4c0d857f41 Remove goog.isDef from colormatrix.js (-12 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
c8e9525f3b Remove goog.isDef from attribution.js through color.js (-54 B) 2015-09-25 11:28:54 -06:00
Tim Schaub
37d0176642 Remove goog.isDef from animation.js (-42 B) 2015-09-25 11:28:53 -06:00
Andreas Watermeyer
7c3bf59084 Issue #4171: Prefer current layout as default on Multipolygon.setPolygons() 2015-09-25 13:58:44 +02:00
Tim Schaub
e4ea5e17f7 Merge pull request #4168 from wlerner/master
Tile preload example wording (fixes #4147)
2015-09-24 11:16:54 -06:00
Warren
0acb2a335d Modified the preload.html example to reflect the correct position of the maps displayed 2015-09-24 12:18:23 -04:00
Frédéric Junod
c06d7aeacc Merge pull request #4167 from fredj/externs-cleanup
Remove externs in externs/closure-compiler.js
2015-09-24 16:03:08 +02:00
Frederic Junod
e77d705d52 Update externs/jquery-1.9.js
From https://github.com/google/closure-compiler/blob/master/contrib/externs/jquery-1.9.js
2015-09-24 14:47:39 +02:00
Frederic Junod
7252227ac6 Remove externs in externs/closure-compiler.js
Fixed upstream:
 * https://github.com/google/closure-compiler/pull/1139
 * https://github.com/google/closure-compiler/pull/1140
2015-09-24 14:21:27 +02:00
Éric Lemoine
3ddc260687 Merge pull request #4166 from elemoine/upgrade-closure
Use version 20150920 of Closure Compiler
2015-09-24 13:43:50 +02:00
Éric Lemoine
f30744c0b8 Simplify test-rendering.js
Now that https://github.com/laurentj/slimerjs/issues/333 is properly fixed (see 911fcb671a) we can no longer read Slimer's exit code from a file. Instead, we can just use the process exit code, which simplifies the test-rendering.js script.
2015-09-24 13:30:54 +02:00
Éric Lemoine
c37e80cd97 Use version 20150920 of Closure Compiler 2015-09-24 12:02:31 +02:00
Måns Beckman
0a28c4282e Adding check to see if already loaded images taints the canvas 2015-09-23 20:03:33 +02:00
Frédéric Junod
dd8422c8a0 Merge pull request #4159 from fredj/rm-goog.object.containsKey
Remove use of goog.object.containsKey
2015-09-23 13:31:14 +02:00
Frederic Junod
ee4f009d2f Remove use of goog.object.containsKey 2015-09-23 12:24:54 +02:00
Frederic Junod
901c55bf41 Remove unnecessary newlines 2015-09-23 12:18:50 +02:00
Frederic Junod
e884a8704d Remove use of goog.object.containsKey 2015-09-23 12:17:02 +02:00
Éric Lemoine
b53e4e39ad Merge pull request #4157 from elemoine/typo
Fix typo in doc
2015-09-23 10:25:52 +02:00
Éric Lemoine
6963c3c037 Merge pull request #4138 from ekargee/doc_text
Enhanced documentation for ol.style.Text
2015-09-23 10:15:44 +02:00
Éric Lemoine
d0621a1949 Fix typo in doc 2015-09-23 10:13:49 +02:00
Éric Lemoine
0c21afc3e4 Merge pull request #4151 from elemoine/modify-assert
Remove bogus assertion
2015-09-23 10:12:07 +02:00
Frédéric Junod
9a83db1c85 Merge pull request #4110 from fredj/cleanup
Minor cleanups
2015-09-23 09:55:33 +02:00
Éric Lemoine
85498983c0 Merge pull request #4156 from elemoine/custom-interactions
Rename drag-features example to custom-interactions
2015-09-23 09:54:57 +02:00
Éric Lemoine
9894ceda2a Remove bogus assertion
This commit removes an incorrect assertion from the modify interaction, which currently triggers when adding vertices to a line string. A new condition is added to the `if` statement to prevent a compilation error. In practice, `depth` and `segmentDataMatch.depth` are either both defined or both undefined.
2015-09-23 09:42:02 +02:00
Éric Lemoine
880be210a1 Rename drag-features example to custom-interactions 2015-09-23 09:16:29 +02:00
Frédéric Junod
7a38a8945c Merge pull request #4150 from fredj/rm-goog.object.remove
Remove use of goog.object.remove
2015-09-23 09:01:02 +02:00
Tim Schaub
cdf6fe44d8 Merge pull request #4145 from tschaub/simplified-geom
API method for simplifying geometries.
2015-09-22 11:45:42 -06:00
Tim Schaub
483f567d26 Working Wikipedia links 2015-09-22 10:39:19 -06:00
Tim Schaub
436561d9dd Make geom.simplify() exportable 2015-09-22 10:34:43 -06:00
Éric Lemoine
5162fda686 Merge pull request #4153 from elemoine/select-features
Add a "features" option to ol.interaction.Select
2015-09-22 17:53:39 +02:00
Tim Schaub
250e86e5f2 Update simplification docs 2015-09-22 09:49:42 -06:00
Éric Lemoine
0bc8858760 Add a "features" option to ol.interaction.Select 2015-09-22 17:02:14 +02:00
ekargee
3978dd87be Updated documentation for ol.style.Text - font and text 2015-09-22 18:57:49 +08:00
Éric Lemoine
0def9728bb Merge pull request #4144 from elemoine/feature-animation
Set context.fillStyle to a string
2015-09-22 12:13:12 +02:00
Frederic Junod
b128675e60 Remove use of goog.object.remove 2015-09-22 12:08:09 +02:00
Frédéric Junod
9f57e57400 Merge pull request #4149 from fredj/no-is-empty
Remove use of goog.array.isEmpty
2015-09-22 12:07:45 +02:00
Frederic Junod
0d23ab44b3 Remove use of goog.array.isEmpty 2015-09-22 11:25:04 +02:00
Tobias Sauerwein
44b1c9da89 Merge pull request #4139 from tsauerwein/turf-jsts-example
Add turf.js and JSTS example
2015-09-22 08:47:45 +02:00
Tim Schaub
e81b68ce8b API method for simplifying geometries 2015-09-21 14:20:16 -06:00
Éric Lemoine
167480bde6 context.fillStyle should be a string
The value we set context.fillStyle to should always be a string. This commit fixes a bug in circlestyle.js where we did set context.fillStyle to an array instead of a string.
2015-09-21 20:49:05 +02:00
Éric Lemoine
4f45bbc05d ol.style.Stroke has no "opacity" option 2015-09-21 20:49:05 +02:00
tsauerwein
8a703640d0 Add example with turf.js 2015-09-21 13:44:17 +02:00
tsauerwein
a5626a0573 Add example with JSTS 2015-09-21 13:44:10 +02:00
Elizabeth-Kate Gulland
33dbaccb68 Enhanced documentation for ol.style.Text 2015-09-19 06:26:41 +02:00
Tobias Sauerwein
f65129850d Merge pull request #4136 from marcjansen/fork-me
Fix the 'click-to-fork' link in contributer notes
2015-09-19 11:02:53 +09:00
Marc Jansen
851d7e065a Fix the 'click-to-fork' link in contributer notes 2015-09-19 03:46:19 +02:00
Andreas Hocevar
37112e07b6 Merge pull request #4132 from tsauerwein/doc-lat-lon
Update quickstart tutorial
2015-09-19 08:23:21 +09:00
tsauerwein
263960aad1 Use ol.proj.fromLonLat 2015-09-18 16:42:19 +09:00
tsauerwein
b1f56c1e98 Fix lat/lon order 2015-09-18 16:35:44 +09:00
Marc Jansen
73b67f7a74 Merge pull request #4111 from marcjansen/text-default-fill
Use a blackish default for filling texts
2015-09-18 07:28:17 +09:00
Marc Jansen
80995159b1 Use a blackish default for filling texts 2015-09-17 16:52:59 +02:00
Frédéric Junod
bfa16529de Merge pull request #4120 from kalbermattenm/featureoverlay
Remove invalid link to featureOverlay in API doc
2015-09-17 11:53:23 +02:00
Michael Kalbermatten
9543cc10dd Remove invalid link to featureOverlay in API doc 2015-09-17 11:12:54 +02:00
Pierre GIRAUD
7896350fe4 Merge pull request #4117 from pgiraud/foreachfeatureatcoordinate_nosource
forEachFeatureAtPixel shouldn't fail if layer has no source
2015-09-16 13:53:02 +02:00
Pierre GIRAUD
badf14e0f1 forEachFeatureAtPixel shouldn't fail if layer has no source 2015-09-16 13:27:01 +02:00
Andreas Hocevar
ea8ad4fc16 Make ol.control.OverviewMap's view configurable
This is useful for creating an OverviewMap in a different projection than
EPSG:3857.
2015-09-16 17:28:16 +09:00
Frederic Junod
139bcca26a Use goog.array.forEach to unlisten the array of keys 2015-09-15 10:05:57 +02:00
Frederic Junod
a613420953 Don't use deprecated ol.Observable#unByKey function 2015-09-15 10:01:56 +02:00
Éric Lemoine
e88f06b70f Merge pull request #4106 from elemoine/search-focus
Focus to search field on page load
2015-09-15 16:22:07 +09:00
Marc Jansen
da627dda4b Merge pull request #4079 from marcjansen/mark-required-options
Automatically mark required options in API-docs
2015-09-15 16:13:36 +09:00
Frédéric Junod
059ee6eaa5 Merge pull request #4108 from fredj/touchAction_extern
Add missing CSSProperties.prototype.touchAction extern
2015-09-14 14:51:03 +02:00
Frederic Junod
8afa911eb5 Add missing CSSProperties.prototype.touchAction extern 2015-09-14 14:26:43 +02:00
Frédéric Junod
a6f16e58e5 Merge pull request #4107 from fredj/touchAction
Prevent page zoom on IE Edge
2015-09-14 13:54:49 +02:00
Frederic Junod
758118e00d Prevent page zoom on IE Edge
The deprecated msTouchAction property was removed in IE Edge.
2015-09-14 13:38:35 +02:00
Éric Lemoine
1bebf55d30 Focus to search field on page load
This uses the "autofocus" on the search field to focus the search field on page load.
2015-09-14 09:15:12 +02:00
Marc Jansen
32c776ba9f Merge pull request #3969 from samuellapointe/MouseZoomSimple
Add an option to use the mouse's location as an anchor when zooming
2015-09-12 08:57:22 +02:00
Samuel Lapointe
c2c4dbfc32 Add a zoom setting to MouseWheelZoomInteraction
By default, zooming in or out zooms using the mouse's location
as an anchor, which makes it possible to navigate the map
using scrolling only, and makes zooming in more intuitive.

This commit adds a new useAnchor option to the MouseWheelZoom
interaction. It is enabled by default, which changes nothing
to the current behavior of the interaction. When disabled,
the interaction stops registering its lastAnchor_ value. This
turns the zoom into a very basic one, that zooms to the center
of the screen.

To use the map center zoom, set the useAnchor option to
false when creating the MouseWheelZoomInteraction, or use its
setMouseAnchor function.
2015-09-11 16:20:10 -04:00
Éric Lemoine
b2566cb64c Merge pull request #4101 from elemoine/release-v3.9.0
Release v3.9.0
2015-09-10 10:57:13 +02:00
Marc Jansen
0a99d0f211 Automatically mark required options in API-docs 2015-09-03 16:44:12 +02:00
Alvin Lindstam
cb8e4e0ee7 Fix miswritten test 2015-08-23 23:35:08 +02:00
Alvin Lindstam
c5fe7df2e4 Fix modify event trigger order, should trigger modifystart before any modification and modifyend last. 2015-08-23 23:35:07 +02:00
Ryan Curry
9a44895d41 Update graticule.js - fixed style / missing line
My comment on line 375 was too long, so I broke it up into multiple lines. Also I accidentally left a line out of the commit (line 384) when transcribing my changes into the web based editor.
2015-07-02 12:35:38 -07:00
Ryan Curry
56e871f8b5 Update graticule.js - fixed typo/build error
Corrected reference to variable frameState - it was misspelled by the previous commit.
2015-07-02 12:23:05 -07:00
Ryan Curry
de6ecb22a8 graticule.js - Fixed build. No functional change.
viewContext.extent_ is private, so we can't use it directly. Instead, re-calculate the corrected wrapped extent.
2015-07-02 12:20:05 -07:00
Ryan Curry
7b4a954c40 graticule.js now uses vectorContext.extent_
When creating the graticule use the extent from the vectorContext instead of the frameState to determine what parallels and meridians should be created. This will allow the graticule to be drawn correctly on views that wrap across the dateline.
2015-06-30 11:09:20 -07:00
Ryan Curry
1159e1f792 Merge pull request #1 from openlayers/master
Test Merge openlayers master
2015-06-30 11:03:24 -07:00
Andreas Watermeyer
c530f872f9 #3328 - GML3: Writing features with multiple geometries 2015-04-07 10:32:26 +02:00
248 changed files with 7756 additions and 5081 deletions

View File

@@ -38,7 +38,7 @@ Contributor License Agreement](https://docs.google.com/spreadsheet/viewform?form
## Setting up development environment ## Setting up development environment
You will obviously start by You will obviously start by
[forking](https://github.com/openlayers/ol3/fork_select) the ol3 repository. [forking](https://github.com/openlayers/ol3/fork) the ol3 repository.
### Travis CI ### Travis CI

View File

@@ -1,7 +1,13 @@
## Upgrade notes ## Upgrade notes
### v3.11.0
### v3.10.0 ### v3.10.0
#### `ol.layer.Layer` changes
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
### v3.9.0 ### v3.9.0
#### `ol.style.Circle` changes #### `ol.style.Circle` changes

93
changelog/v3.10.0.md Normal file
View File

@@ -0,0 +1,93 @@
# v3.10.0
## Summary
The v3.10.0 release includes features and fixes from 66 pull requests since the v3.9.0 release. New features and improvements include:
* Full touch gesture support for the Microsoft Edge browser.
* Improved API docs - required constructor options are now marked as such.
* Text styles (vector labels) now work with defaults instead of failing when only a label text is set.
* Write support for GML3 features with multiple geometries
See the complete list below for details. And see the following notes to know how to upgrade from v3.9.0 to v3.10.0.
## Upgrade notes
#### `ol.layer.Layer` changes
The experimental `setHue`, `setContrast`, `setBrightness`, `setSaturation`, and the corresponding getter methods have been removed. These properties only worked with the WebGL renderer. If you are interested in applying color transforms, look for the `postcompose` event in the API docs. In addition, the `ol.source.Raster` source provides a way to create new raster data based on arbitrary transforms run on any number of input sources.
#### Removal of legacy Internet Explorer support
If you are building an appliction that supports Internet Explorer 8 or older, you'll need to use ES5 shims to make OpenLayers work. As before, support for such old browsers is very basic, and we recommend to not support them.
## New features and fixes
* [#4237](https://github.com/openlayers/ol3/pull/4237) - #3328: GML3 - Writing features with multiple geometries ([@awaterme](https://github.com/awaterme))
* [#4218](https://github.com/openlayers/ol3/pull/4218) - Add 'getLayer()' method to 'ol.interaction.Select' ([@jonataswalker](https://github.com/jonataswalker))
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4036](https://github.com/openlayers/ol3/pull/4036) - Fix modify interaction event order ([@alvinlindstam](https://github.com/alvinlindstam))
* [#4116](https://github.com/openlayers/ol3/pull/4116) - Make ol.control.OverviewMap's view configurable ([@ahocevar](https://github.com/ahocevar))
* [#4234](https://github.com/openlayers/ol3/pull/4234) - Support OGC WKT proj4 def.units and def.to_meter ([@tbarsballe](https://github.com/tbarsballe))
* [#4224](https://github.com/openlayers/ol3/pull/4224) - Don't transform the angle into degrees to rotate the element ([@fredj](https://github.com/fredj))
* [#4231](https://github.com/openlayers/ol3/pull/4231) - Revert "Merge pull request #4217 from ThomasG77/clipboardjs-replacement" ([@ahocevar](https://github.com/ahocevar))
* [#4217](https://github.com/openlayers/ol3/pull/4217) - Replace ZeroClipboard with Clipboard.js to remove flash dependency ([@ThomasG77](https://github.com/ThomasG77))
* [#4223](https://github.com/openlayers/ol3/pull/4223) - Remove goog.fx.easing ([@fredj](https://github.com/fredj))
* [#4222](https://github.com/openlayers/ol3/pull/4222) - Remove unnecessary cast ([@fredj](https://github.com/fredj))
* [#4209](https://github.com/openlayers/ol3/pull/4209) - Remove goog.string.remove ([@gberaudo](https://github.com/gberaudo))
* [#4207](https://github.com/openlayers/ol3/pull/4207) - Remove goog.string.startsWith ([@gberaudo](https://github.com/gberaudo))
* [#4208](https://github.com/openlayers/ol3/pull/4208) - Remove goog.string.trim() ([@gberaudo](https://github.com/gberaudo))
* [#4216](https://github.com/openlayers/ol3/pull/4216) - Fix canvas replay which broke with 31a68e2 ([@ahocevar](https://github.com/ahocevar))
* [#4202](https://github.com/openlayers/ol3/pull/4202) - Remove use of goog.dom.appendChild ([@fredj](https://github.com/fredj))
* [#4205](https://github.com/openlayers/ol3/pull/4205) - Minor cleanup ([@fredj](https://github.com/fredj))
* [#4203](https://github.com/openlayers/ol3/pull/4203) - Cosmetic changes to example html / css ([@marcjansen](https://github.com/marcjansen))
* [#4184](https://github.com/openlayers/ol3/pull/4184) - Adjust iframe's position of GetFeatureInfo examples ([@jonataswalker](https://github.com/jonataswalker))
* [#4192](https://github.com/openlayers/ol3/pull/4192) - Remove use of goog.isNull in favor of simple truthy checks ([@marcjansen](https://github.com/marcjansen))
* [#4187](https://github.com/openlayers/ol3/pull/4187) - Fix {-y} template calculation for custom (TMS) tile grids ([@ahocevar](https://github.com/ahocevar))
* [#4176](https://github.com/openlayers/ol3/pull/4176) - Remove use of goog.isDefAndNotNull().
([@tschaub](https://github.com/tschaub))
* [#4200](https://github.com/openlayers/ol3/pull/4200) - Do not use goog.object.get ([@marcjansen](https://github.com/marcjansen))
* [#4198](https://github.com/openlayers/ol3/pull/4198) - Improve ol.control.Rotate.prototype.resetNorth_ performance ([@denilsonsa](https://github.com/denilsonsa))
* [#4197](https://github.com/openlayers/ol3/pull/4197) - Remove blur action on MOUSEOUT on Zoom Out button ([@denilsonsa](https://github.com/denilsonsa))
* [#4195](https://github.com/openlayers/ol3/pull/4195) - #4171: Prefer current layout as default on MultiLineString.setLineStrings() ([@awaterme](https://github.com/awaterme))
* [#4172](https://github.com/openlayers/ol3/pull/4172) - #4171: Prefer current layout as default on Multipolygon.setPolygons() ([@awaterme](https://github.com/awaterme))
* [#4190](https://github.com/openlayers/ol3/pull/4190) - Remove use of goog.functions.constant ([@marcjansen](https://github.com/marcjansen))
* [#4188](https://github.com/openlayers/ol3/pull/4188) - Remove use of goog.object.getKeys ([@fredj](https://github.com/fredj))
* [#4189](https://github.com/openlayers/ol3/pull/4189) - Replace goog.nullFunction with ol.nullFunction ([@marcjansen](https://github.com/marcjansen))
* [#4165](https://github.com/openlayers/ol3/pull/4165) - Use ECMAScript 5.1 Array functions instead of goog.array ([@fredj](https://github.com/fredj))
* [#4181](https://github.com/openlayers/ol3/pull/4181) - Remove use of goog.array.contains ([@fredj](https://github.com/fredj))
* [#4162](https://github.com/openlayers/ol3/pull/4162) - Remove ol.LEGACY_IE_SUPPORT ([@fredj](https://github.com/fredj))
* [#4174](https://github.com/openlayers/ol3/pull/4174) - Remove hue, saturation, contrast, and brightness as layer properties. ([@tschaub](https://github.com/tschaub))
* [#4183](https://github.com/openlayers/ol3/pull/4183) - Remove @api on getHitDetectionFramebuffer ([@elemoine](https://github.com/elemoine))
* [#4179](https://github.com/openlayers/ol3/pull/4179) - Use Date.now() instead of goog.now() ([@marcjansen](https://github.com/marcjansen))
* [#4175](https://github.com/openlayers/ol3/pull/4175) - Remove use of goog.math.clamp(). ([@tschaub](https://github.com/tschaub))
* [#4173](https://github.com/openlayers/ol3/pull/4173) - Only animate when resolution is about to be changed ([@ahocevar](https://github.com/ahocevar))
* [#4129](https://github.com/openlayers/ol3/pull/4129) - Remove use of goog.isDef. ([@openlayers](https://github.com/openlayers))
* [#4168](https://github.com/openlayers/ol3/pull/4168) - Tile preload example wording (fixes #4147) ([@wlerner](https://github.com/wlerner))
* [#4167](https://github.com/openlayers/ol3/pull/4167) - Remove externs in externs/closure-compiler.js ([@fredj](https://github.com/fredj))
* [#4166](https://github.com/openlayers/ol3/pull/4166) - Use version 20150920 of Closure Compiler ([@elemoine](https://github.com/elemoine))
* [#4159](https://github.com/openlayers/ol3/pull/4159) - Remove use of goog.object.containsKey ([@fredj](https://github.com/fredj))
* [#4157](https://github.com/openlayers/ol3/pull/4157) - Fix typo in doc ([@elemoine](https://github.com/elemoine))
* [#4138](https://github.com/openlayers/ol3/pull/4138) - Enhanced documentation for ol.style.Text ([@ekargee](https://github.com/ekargee))
* [#4151](https://github.com/openlayers/ol3/pull/4151) - Remove bogus assertion ([@elemoine](https://github.com/elemoine))
* [#4110](https://github.com/openlayers/ol3/pull/4110) - Minor cleanups ([@fredj](https://github.com/fredj))
* [#4156](https://github.com/openlayers/ol3/pull/4156) - Rename drag-features example to custom-interactions ([@elemoine](https://github.com/elemoine))
* [#4150](https://github.com/openlayers/ol3/pull/4150) - Remove use of goog.object.remove ([@fredj](https://github.com/fredj))
* [#4145](https://github.com/openlayers/ol3/pull/4145) - API method for simplifying geometries. ([@tschaub](https://github.com/tschaub))
* [#4153](https://github.com/openlayers/ol3/pull/4153) - Add a "features" option to ol.interaction.Select ([@elemoine](https://github.com/elemoine))
* [#4144](https://github.com/openlayers/ol3/pull/4144) - Set context.fillStyle to a string ([@elemoine](https://github.com/elemoine))
* [#4149](https://github.com/openlayers/ol3/pull/4149) - Remove use of goog.array.isEmpty ([@fredj](https://github.com/fredj))
* [#4139](https://github.com/openlayers/ol3/pull/4139) - Add turf.js and JSTS example ([@tsauerwein](https://github.com/tsauerwein))
* [#4136](https://github.com/openlayers/ol3/pull/4136) - Fix the 'click-to-fork' link in contributer notes ([@marcjansen](https://github.com/marcjansen))
* [#4132](https://github.com/openlayers/ol3/pull/4132) - Update quickstart tutorial ([@tsauerwein](https://github.com/tsauerwein))
* [#4111](https://github.com/openlayers/ol3/pull/4111) - Use a blackish default for filling texts ([@marcjansen](https://github.com/marcjansen))
* [#4120](https://github.com/openlayers/ol3/pull/4120) - Remove invalid link to featureOverlay in API doc ([@kalbermattenm](https://github.com/kalbermattenm))
* [#4117](https://github.com/openlayers/ol3/pull/4117) - forEachFeatureAtPixel shouldn't fail if layer has no source ([@pgiraud](https://github.com/pgiraud))
* [#4106](https://github.com/openlayers/ol3/pull/4106) - Focus to search field on page load ([@elemoine](https://github.com/elemoine))
* [#4079](https://github.com/openlayers/ol3/pull/4079) - Automatically mark required options in API-docs ([@marcjansen](https://github.com/marcjansen))
* [#4108](https://github.com/openlayers/ol3/pull/4108) - Add missing CSSProperties.prototype.touchAction extern ([@fredj](https://github.com/fredj))
* [#4107](https://github.com/openlayers/ol3/pull/4107) - Prevent page zoom on IE Edge ([@fredj](https://github.com/fredj))
* [#3969](https://github.com/openlayers/ol3/pull/3969) - Add an option to use the mouse's location as an anchor when zooming ([@samuellapointe](https://github.com/samuellapointe))

View File

@@ -1,3 +1,3 @@
{ {
"library_url": "https://github.com/google/closure-library/archive/a5f9b8a.zip" "library_url": "https://github.com/google/closure-library/archive/5b25e65.zip"
} }

View File

@@ -35,6 +35,5 @@ Interactions for [vector features](ol.Feature.html)
<td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.ObjectEvent](ol.ObjectEvent.html) with information on the changed property and old value.</p> <td><p>Changes to all [ol.Objects](ol.Object.html) can observed by calling the [object.on('propertychange')](ol.Object.html#on) method. Listeners receive an [ol.ObjectEvent](ol.ObjectEvent.html) with information on the changed property and old value.</p>
<td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br> <td>[ol.DeviceOrientation](ol.DeviceOrientation.html)<br>
[ol.Geolocation](ol.Geolocation.html)<br> [ol.Geolocation](ol.Geolocation.html)<br>
[ol.Overlay](ol.Overlay.html)<br> [ol.Overlay](ol.Overlay.html)<br></td>
[ol.FeatureOverlay](ol.FeatureOverlay.html)<br></td>
</tr></table> </tr></table>

View File

@@ -5,6 +5,10 @@
var lastOlxTypedef = null; var lastOlxTypedef = null;
var olxTypes = {}; var olxTypes = {};
// names of the olx typenames
var olxTypeNames = [];
// types that are undefined or typedefs containing undefined
var undefinedLikes = null;
function addSubparams(params) { function addSubparams(params) {
for (var j = 0, jj = params.length; j < jj; ++j) { for (var j = 0, jj = params.length; j < jj; ++j) {
@@ -23,6 +27,63 @@ function addSubparams(params) {
} }
} }
/**
* Changes the description of the param, if it is found to be a required
* option of an olxTypeName.
*/
function markRequiredIfNeeded(doclet){
var memberof = doclet.memberof;
// only check doclets that belong to an olxTypeName
if (!memberof || olxTypeNames.indexOf(memberof) == -1) {
return doclet;
}
var types = doclet.type.names;
var isRequiredParam = true;
// iterate over all types that are like-undefined (see above for explanation)
for (var idx = undefinedLikes.length - 1; idx >= 0; idx--) {
var undefinedLike = undefinedLikes[idx];
// … if the current types contains a type that is undefined-like,
// it is not required.
if (types.indexOf(undefinedLike) != -1) {
isRequiredParam = false;
}
}
if (isRequiredParam) {
var reqSnippet = '<span class="required-option">Required.</span></p>';
var endsWithP = /<\/p>$/i;
var description = doclet.description;
if (description && endsWithP.test(description)) {
description = description.replace(endsWithP, ' ' + reqSnippet);
} else if (doclet.description === undefined) {
description = '<p>' + reqSnippet;
}
doclet.description = description;
}
return doclet;
}
/**
* Iterates over all doclets and finds the names of types that contain
* undefined. Stores the names in the global variable undefinedLikes, so
* that e.g. markRequiredIfNeeded can use these.
*/
function findTypesLikeUndefined(doclets) {
undefinedLikes = ['undefined']; // include type 'undefined' explicitly
for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i];
if(doclet.kind === 'typedef') {
var types = doclet.type.names;
if (types.indexOf('undefined') !== -1) {
// the typedef contains 'undefined', so it self is undefinedLike.
undefinedLikes.push(doclet.longname);
}
}
}
}
exports.handlers = { exports.handlers = {
newDoclet: function(e) { newDoclet: function(e) {
@@ -34,6 +95,7 @@ exports.handlers = {
} }
if (doclet.kind == 'typedef') { if (doclet.kind == 'typedef') {
lastOlxTypedef = doclet; lastOlxTypedef = doclet;
olxTypeNames.push(doclet.longname);
olxTypes[doclet.longname] = []; olxTypes[doclet.longname] = [];
doclet.properties = []; doclet.properties = [];
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) { } else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
@@ -51,12 +113,14 @@ exports.handlers = {
parseComplete: function(e) { parseComplete: function(e) {
var doclets = e.doclets; var doclets = e.doclets;
findTypesLikeUndefined(doclets);
for (var i = doclets.length - 1; i >= 0; --i) { for (var i = doclets.length - 1; i >= 0; --i) {
var doclet = doclets[i]; var doclet = doclets[i];
var params = doclet.params; var params = doclet.params;
if (params) { if (params) {
addSubparams(params); addSubparams(params);
} }
markRequiredIfNeeded(doclet);
} }
} }

View File

@@ -35,7 +35,7 @@ Below you'll find a complete working example. Create a new file, copy in the co
}) })
], ],
view: new ol.View({ view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4 zoom: 4
}) })
}); });
@@ -89,7 +89,7 @@ The map in the application is contained in a [`<div>` HTML element](http://en.wi
}) })
], ],
view: new ol.View({ view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4 zoom: 4
}) })
}); });
@@ -125,9 +125,9 @@ The next part of the `Map` object is the `View`. The view allow to specify the c
```js ```js
view: new ol.View({ view: new ol.View({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4 zoom: 4
}) })
``` ```
You will notice that the `center` specified is in lat/lon coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates. You will notice that the `center` specified is in lon/lat coordinates (EPSG:4326). Since the only layer we use is in Spherical Mercator projection (EPSG:3857), we can reproject them on the fly to be able to zoom the map on the right coordinates.

View File

@@ -1,7 +0,0 @@
#reset-brightness {
min-width: 138px;
}
#reset-contrast {
min-width: 120px;
}

View File

@@ -1,27 +0,0 @@
---
template: example.html
title: Brightness/contrast example
shortdesc: Example of brightness/contrast control on the client (WebGL only).
docs: >
This example shows how to control brightness/contrast on the client,
the example is limited to WebGL.
tags: "brightness, contrast, webgl"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-danger" style="display: none">
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>
<div class="btn-group">
<button id="increase-brightness"><i class="fa fa-plus"></i></button>
<button id="reset-brightness">Brightness</button>
<button id="decrease-brightness"><i class="fa fa-minus"></i></button>
</div>
<div class="btn-group">
<button id="increase-contrast"><i class="fa fa-plus"></i></button>
<button id="reset-contrast">Contrast</button>
<button id="decrease-contrast"><i class="fa fa-minus"></i></button>
</div>
</div>
</div>

View File

@@ -1,75 +0,0 @@
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.has');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuest');
function setResetBrightnessButtonHTML() {
resetBrightness.innerHTML = 'Brightness (' +
layer.getBrightness().toFixed(3) + ')';
}
function setResetContrastButtonHTML() {
resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')';
}
if (!ol.has.WEBGL) {
var info = document.getElementById('no-webgl');
/**
* display error message
*/
info.style.display = '';
} else {
var layer = new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'sat'})
});
var map = new ol.Map({
layers: [layer],
renderer: 'webgl',
target: 'map',
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
var increaseBrightness = document.getElementById('increase-brightness');
var resetBrightness = document.getElementById('reset-brightness');
var decreaseBrightness = document.getElementById('decrease-brightness');
setResetBrightnessButtonHTML();
increaseBrightness.addEventListener('click', function() {
layer.setBrightness(Math.min(layer.getBrightness() + 0.125, 1));
setResetBrightnessButtonHTML();
}, false);
resetBrightness.addEventListener('click', function() {
layer.setBrightness(0);
setResetBrightnessButtonHTML();
}, false);
decreaseBrightness.addEventListener('click', function() {
layer.setBrightness(Math.max(layer.getBrightness() - 0.125, -1));
setResetBrightnessButtonHTML();
}, false);
var increaseContrast = document.getElementById('increase-contrast');
var resetContrast = document.getElementById('reset-contrast');
var decreaseContrast = document.getElementById('decrease-contrast');
setResetContrastButtonHTML();
increaseContrast.addEventListener('click', function() {
layer.setContrast(layer.getContrast() + 0.125);
setResetContrastButtonHTML();
}, false);
resetContrast.addEventListener('click', function() {
layer.setContrast(1);
setResetContrastButtonHTML();
}, false);
decreaseContrast.addEventListener('click', function() {
layer.setContrast(Math.max(layer.getContrast() - 0.125, 0));
setResetContrastButtonHTML();
}, false);
}

View File

@@ -1,9 +1,9 @@
--- ---
template: example.html template: example.html
title: Custom interaction example title: Custom interaction example
shortdesc: Example of a custom drag features interaction. shortdesc: Example of a custom interaction.
docs: > docs: >
This example demonstrates using a custom interaction with OpenLayers, by subclassing `ol.interaction.Pointer`. This example demonstrates creating a custom interaction by subclassing `ol.interaction.Pointer`.
Note that the built in interaction `ol.interaction.Translate` might be a better option for moving features. Note that the built in interaction `ol.interaction.Translate` might be a better option for moving features.
tags: "drag, feature, vector, editing, custom, interaction" tags: "drag, feature, vector, editing, custom, interaction"
--- ---

File diff suppressed because it is too large Load Diff

View File

@@ -72,8 +72,7 @@ function flash(feature) {
snapToPixel: false, snapToPixel: false,
stroke: new ol.style.Stroke({ stroke: new ol.style.Stroke({
color: 'rgba(255, 0, 0, ' + opacity + ')', color: 'rgba(255, 0, 0, ' + opacity + ')',
width: 1, width: 1
opacity: opacity
}) })
}); });

View File

@@ -9,10 +9,12 @@ tags: "getfeatureinfo, forEachLayerAtPixel"
<div class="row-fluid"> <div class="row-fluid">
<div class="span12"> <div class="span12">
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div class="span4 offset4 pull-right"> </div>
<div id="info" class="alert alert-success"> </div>
&nbsp; <div class="row-fluid">
</div> <div class="span4 offset4 iframe-info">
<div id="info" class="alert alert-success">
&nbsp;
</div> </div>
</div> </div>
</div> </div>

View File

@@ -9,10 +9,12 @@ tags: "getfeatureinfo, forEachLayerAtPixel"
<div class="row-fluid"> <div class="row-fluid">
<div class="span12"> <div class="span12">
<div id="map" class="map"></div> <div id="map" class="map"></div>
<div class="span4 offset4 pull-right"> </div>
<div id="info" class="alert alert-success"> </div>
&nbsp; <div class="row-fluid">
</div> <div class="span4 offset4 iframe-info">
<div id="info" class="alert alert-success">
&nbsp;
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,6 +0,0 @@
#reset-hue {
min-width: 90px;
}
#reset-saturation {
min-width: 124px;
}

View File

@@ -1,26 +0,0 @@
---
template: example.html
title: Hue/saturation example
shortdesc: Example of hue/saturation control on the client (WebGL only).
docs: >
Example of hue/saturation control on the client (WebGL only).
tags: "custom, control"
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-danger" style="display: none">
This example requires a browser that supports <a href="http://get.webgl.org/">WebGL</a>.
</div>
<div class="btn-group">
<button id="increase-hue"><i class="fa fa-plus"></i></button>
<button id="reset-hue">Hue</button>
<button id="decrease-hue"><i class="fa fa-minus"></i></button>
</div>
<div class="btn-group">
<button id="increase-saturation"><i class="fa fa-plus"></i></button>
<button id="reset-saturation">Saturation</button>
<button id="decrease-saturation"><i class="fa fa-minus"></i></button>
</div>
</div>
</div>

View File

@@ -1,79 +0,0 @@
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.has');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.BingMaps');
function setResetHueButtonHTML() {
resetHue.innerHTML = 'Hue (' + layer.getHue().toFixed(2) + ')';
}
function setResetSaturationButtonHTML() {
resetSaturation.innerHTML = 'Saturation (' +
layer.getSaturation().toFixed(2) + ')';
}
if (!ol.has.WEBGL) {
var info = document.getElementById('no-webgl');
/**
* display error message
*/
info.style.display = '';
} else {
var layer = new ol.layer.Tile({
source: new ol.source.BingMaps({
key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3',
imagerySet: 'Aerial'
})
});
var map = new ol.Map({
layers: [layer],
renderer: 'webgl',
target: 'map',
view: new ol.View({
center: ol.proj.fromLonLat([-9.375, 51.483333]),
zoom: 15
})
});
var increaseHue = document.getElementById('increase-hue');
var resetHue = document.getElementById('reset-hue');
var decreaseHue = document.getElementById('decrease-hue');
setResetHueButtonHTML();
increaseHue.addEventListener('click', function() {
layer.setHue(layer.getHue() + 0.25);
setResetHueButtonHTML();
}, false);
resetHue.addEventListener('click', function() {
layer.setHue(0);
setResetHueButtonHTML();
}, false);
decreaseHue.addEventListener('click', function() {
layer.setHue(layer.getHue() - 0.25);
setResetHueButtonHTML();
}, false);
var increaseSaturation = document.getElementById('increase-saturation');
var resetSaturation = document.getElementById('reset-saturation');
var decreaseSaturation = document.getElementById('decrease-saturation');
setResetSaturationButtonHTML();
increaseSaturation.addEventListener('click', function() {
layer.setSaturation(layer.getSaturation() + 0.25);
setResetSaturationButtonHTML();
}, false);
resetSaturation.addEventListener('click', function() {
layer.setSaturation(1);
setResetSaturationButtonHTML();
}, false);
decreaseSaturation.addEventListener('click', function() {
layer.setSaturation(Math.max(layer.getSaturation() - 0.25, 0));
setResetSaturationButtonHTML();
}, false);
}

View File

@@ -170,13 +170,13 @@
for (var i = 0; i < info.examples.length; ++i) { for (var i = 0; i < info.examples.length; ++i) {
info.examples[i].link += window.location.search; info.examples[i].link += window.location.search;
} }
// document.getElementById('keywords').focus();
template = new jugl.Template("template"); template = new jugl.Template("template");
target = document.getElementById("examples"); target = document.getElementById("examples");
listExamples(info.examples); listExamples(info.examples);
document.getElementById("keywords").onkeyup = inputChange; document.getElementById("keywords").onkeyup = inputChange;
parseQuery(); parseQuery();
}; };
</script> </script>
<title>OpenLayers 3 Examples</title> <title>OpenLayers 3 Examples</title>
@@ -187,7 +187,7 @@
<div class="container"> <div class="container">
<a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png">&nbsp;OpenLayers 3 Examples</a> <a class="navbar-brand" href="./"><img src="./resources/logo-70x70.png">&nbsp;OpenLayers 3 Examples</a>
<form class="navbar-form navbar-left" role="search"> <form class="navbar-form navbar-left" role="search">
<input name="q" type="text" id="keywords" class="search-query" placeholder="Search"> <input name="q" type="text" id="keywords" class="search-query" placeholder="Search" autofocus>
<span id="count"></span> <span id="count"></span>
</form> </form>
</div> </div>

19
examples/jsts.html Normal file
View File

@@ -0,0 +1,19 @@
---
template: example.html
title: JSTS Example
shortdesc: Example on how to use JSTS with OpenLayers 3.
docs: >
Example showing the integration of <a href="https://github.com/bjornharrtell/jsts">JSTS</a>
with OpenLayers 3.
tags: "vector, jsts, buffer"
resources:
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/lib/0.16.0/javascript.util.min.js
- https://cdn.rawgit.com/bjornharrtell/jsts/gh-pages/lib/0.16.0/jsts.min.js
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>

53
examples/jsts.js Normal file
View File

@@ -0,0 +1,53 @@
// NOCOMPILE
// this example uses JSTS for which we don't have an externs file.
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.format.GeoJSON');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.proj');
goog.require('ol.source.MapQuest');
goog.require('ol.source.Vector');
var source = new ol.source.Vector();
$.ajax('data/geojson/roads-seoul.geojson').then(function(response) {
var format = new ol.format.GeoJSON();
var features = format.readFeatures(response,
{featureProjection: 'EPSG:3857'});
var parser = new jsts.io.olParser();
for (var i = 0; i < features.length; i++) {
var feature = features[i];
// convert the OpenLayers geometry to a JSTS geometry
var jstsGeom = parser.read(feature.getGeometry());
// create a buffer of 40 meters around each line
var buffered = jstsGeom.buffer(40);
// convert back from JSTS and replace the geometry on the feature
feature.setGeometry(parser.write(buffered));
}
source.addFeatures(features);
});
var vectorLayer = new ol.layer.Vector({
source: source
});
var rasterLayer = new ol.layer.Tile({
source: new ol.source.MapQuest({
layer: 'osm'
})
});
var map = new ol.Map({
layers: [rasterLayer, vectorLayer],
target: document.getElementById('map'),
view: new ol.View({
center: ol.proj.fromLonLat([126.979293, 37.528787]),
zoom: 15
})
});

View File

@@ -20,14 +20,6 @@ tags: "tilejson, input, bind, group, layergroup"
</label> </label>
<label>opacity</label> <label>opacity</label>
<input class="opacity" type="range" min="0" max="1" step="0.01"/> <input class="opacity" type="range" min="0" max="1" step="0.01"/>
<label>hue</label>
<input class="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input class="saturation" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input class="contrast" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input class="brightness" type="range" min="-1" max="1" step="0.01"/>
</fieldset> </fieldset>
</li> </li>
<li><span>Layer group</span> <li><span>Layer group</span>
@@ -37,14 +29,6 @@ tags: "tilejson, input, bind, group, layergroup"
</label> </label>
<label>opacity</label> <label>opacity</label>
<input class="opacity" type="range" min="0" max="1" step="0.01"/> <input class="opacity" type="range" min="0" max="1" step="0.01"/>
<label>hue</label>
<input class="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input class="saturation" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input class="contrast" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input class="brightness" type="range" min="-1" max="1" step="0.01"/>
</fieldset> </fieldset>
<ul> <ul>
<li><span>Food insecurity layer</span> <li><span>Food insecurity layer</span>
@@ -54,14 +38,6 @@ tags: "tilejson, input, bind, group, layergroup"
</label> </label>
<label>opacity</label> <label>opacity</label>
<input class="opacity" type="range" min="0" max="1" step="0.01"/> <input class="opacity" type="range" min="0" max="1" step="0.01"/>
<label>hue</label>
<input class="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input class="saturation" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input class="contrast" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input class="brightness" type="range" min="-1" max="1" step="0.01"/>
</fieldset> </fieldset>
</li> </li>
<li><span>World borders layer</span> <li><span>World borders layer</span>
@@ -71,14 +47,6 @@ tags: "tilejson, input, bind, group, layergroup"
</label> </label>
<label>opacity</label> <label>opacity</label>
<input class="opacity" type="range" min="0" max="1" step="0.01"/> <input class="opacity" type="range" min="0" max="1" step="0.01"/>
<label>hue</label>
<input class="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input class="saturation" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input class="contrast" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input class="brightness" type="range" min="-1" max="1" step="0.01"/>
</fieldset> </fieldset>
</li> </li>
</ul> </ul>

View File

@@ -44,15 +44,11 @@ function bindInputs(layerid, layer) {
}); });
visibilityInput.prop('checked', layer.getVisible()); visibilityInput.prop('checked', layer.getVisible());
$.each(['opacity', 'hue', 'saturation', 'contrast', 'brightness'], var opacityInput = $(layerid + ' input.opacity');
function(i, v) { opacityInput.on('input change', function() {
var input = $(layerid + ' input.' + v); layer.setOpacity(parseFloat(this.value));
input.on('input change', function() { });
layer.set(v, parseFloat(this.value)); opacityInput.val(String(layer.getOpacity()));
});
input.val(String(layer.get(v)));
}
);
} }
map.getLayers().forEach(function(layer, i) { map.getLayers().forEach(function(layer, i) {
bindInputs('#layer' + i, layer); bindInputs('#layer' + i, layer);

View File

@@ -3,7 +3,7 @@ template: example.html
title: Preload example title: Preload example
shortdesc: Example of tile preloading. shortdesc: Example of tile preloading.
docs: > docs: >
<p>The map on the left preloads low resolution tiles. The map on the right does not use any preloading. Try zooming out and panning to see the difference.</p> <p>The map on the top preloads low resolution tiles. The map on the bottom does not use any preloading. Try zooming out and panning to see the difference.</p>
tags: "preload, bing" tags: "preload, bing"
--- ---
<div class="row-fluid"> <div class="row-fluid">

View File

@@ -58,6 +58,9 @@ ol.inline>li {
.ol-control button, .ol-attribution, .ol-scale-line-inner { .ol-control button, .ol-attribution, .ol-scale-line-inner {
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif; font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
} }
.iframe-info iframe {
width: 100%;
}
pre[class*="language-"] { pre[class*="language-"] {
margin-top: 20px; margin-top: 20px;

19
examples/turf.html Normal file
View File

@@ -0,0 +1,19 @@
---
template: example.html
title: turf.js Example
shortdesc: Example on how to use turf.js with OpenLayers 3.
docs: >
Example showing the integration of <a href="http://turfjs.org">turf.js</a>
with OpenLayers 3. The turf.js function <code>along</code> is used to
display a marker every 200 meters along a street.
tags: "vector, turfjs, along, distance"
resources:
- https://api.tiles.mapbox.com/mapbox.js/plugins/turf/v2.0.0/turf.min.js
---
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>

57
examples/turf.js Normal file
View File

@@ -0,0 +1,57 @@
// NOCOMPILE
// this example uses turf.js for which we don't have an externs file.
goog.require('ol.Feature');
goog.require('ol.Map');
goog.require('ol.View');
goog.require('ol.format.GeoJSON');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.proj');
goog.require('ol.source.MapQuest');
goog.require('ol.source.Vector');
var source = new ol.source.Vector();
$.ajax('data/geojson/roads-seoul.geojson').then(function(response) {
var format = new ol.format.GeoJSON();
var features = format.readFeatures(response);
var street = features[0];
// convert to a turf.js feature
var turfLine = format.writeFeatureObject(street);
// show a marker every 200 meters
var distance = 0.2;
// get the line length in kilometers
var length = turf.lineDistance(turfLine, 'kilometers');
for (var i = 1; i <= length / distance; i++) {
var turfPoint = turf.along(turfLine, i * distance, 'kilometers');
// convert the generated point to a OpenLayers feature
var marker = format.readFeature(turfPoint);
marker.getGeometry().transform('EPSG:4326', 'EPSG:3857');
source.addFeature(marker);
}
street.getGeometry().transform('EPSG:4326', 'EPSG:3857');
source.addFeature(street);
});
var vectorLayer = new ol.layer.Vector({
source: source
});
var rasterLayer = new ol.layer.Tile({
source: new ol.source.MapQuest({
layer: 'osm'
})
});
var map = new ol.Map({
layers: [rasterLayer, vectorLayer],
target: document.getElementById('map'),
view: new ol.View({
center: ol.proj.fromLonLat([126.980366, 37.526540]),
zoom: 15
})
});

View File

@@ -7,26 +7,3 @@
* *
* @externs * @externs
*/ */
/** @type {number} */
Touch.prototype.force;
/** @type {number} */
Touch.prototype.radiusX;
/** @type {number} */
Touch.prototype.radiusY;
/** @type {number} */
Touch.prototype.webkitForce;
/** @type {number} */
Touch.prototype.webkitRadiusX;
/** @type {number} */
Touch.prototype.webkitRadiusY;

943
externs/jquery-1.9.js vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1160,7 +1160,8 @@ olx.control.MousePositionOptions.prototype.undefinedHTML;
* layers: (Array.<ol.layer.Layer>|ol.Collection|undefined), * layers: (Array.<ol.layer.Layer>|ol.Collection|undefined),
* render: (function(ol.MapEvent)|undefined), * render: (function(ol.MapEvent)|undefined),
* target: (Element|undefined), * target: (Element|undefined),
* tipLabel: (string|undefined)}} * tipLabel: (string|undefined),
* view: (ol.View|undefined)}}
* @api * @api
*/ */
olx.control.OverviewMapOptions; olx.control.OverviewMapOptions;
@@ -1236,6 +1237,15 @@ olx.control.OverviewMapOptions.prototype.target;
olx.control.OverviewMapOptions.prototype.tipLabel; olx.control.OverviewMapOptions.prototype.tipLabel;
/**
* Custom view for the overview map. If not provided, a default view with
* an EPSG:3857 projection will be used.
* @type {ol.View|undefined}
* @api
*/
olx.control.OverviewMapOptions.prototype.view;
/** /**
* @typedef {{className: (string|undefined), * @typedef {{className: (string|undefined),
* minWidth: (number|undefined), * minWidth: (number|undefined),
@@ -1291,7 +1301,7 @@ olx.control.ScaleLineOptions.prototype.units;
/** /**
* @typedef {{duration: (number|undefined), * @typedef {{duration: (number|undefined),
* className: (string|undefined), * className: (string|undefined),
* label: (string|Node|undefined), * label: (string|Element|undefined),
* tipLabel: (string|undefined), * tipLabel: (string|undefined),
* target: (Element|undefined), * target: (Element|undefined),
* render: (function(ol.MapEvent)|undefined), * render: (function(ol.MapEvent)|undefined),
@@ -1914,6 +1924,8 @@ olx.format.WFSOptions.prototype.schemaLocation;
* maxFeatures: (number|undefined), * maxFeatures: (number|undefined),
* geometryName: (string|undefined), * geometryName: (string|undefined),
* propertyNames: (Array.<string>|undefined), * propertyNames: (Array.<string>|undefined),
* startIndex: (number|undefined),
* count: (number|undefined),
* bbox: (ol.Extent|undefined)}} * bbox: (ol.Extent|undefined)}}
* @api * @api
*/ */
@@ -1993,6 +2005,25 @@ olx.format.WFSWriteGetFeatureOptions.prototype.geometryName;
olx.format.WFSWriteGetFeatureOptions.prototype.propertyNames; olx.format.WFSWriteGetFeatureOptions.prototype.propertyNames;
/**
* Start index to use for WFS paging. This is a WFS 2.0 feature backported to
* WFS 1.1.0 by some Web Feature Services.
* @type {number|undefined}
* @api
*/
olx.format.WFSWriteGetFeatureOptions.prototype.startIndex;
/**
* Number of features to retrieve when paging. This is a WFS 2.0 feature
* backported to WFS 1.1.0 by some Web Feature Services. Please note that some
* Web Feature Services have repurposed `maxfeatures` instead.
* @type {number|undefined}
* @api
*/
olx.format.WFSWriteGetFeatureOptions.prototype.count;
/** /**
* Extent to use for the BBOX filter. * Extent to use for the BBOX filter.
* @type {ol.Extent|undefined} * @type {ol.Extent|undefined}
@@ -2648,7 +2679,8 @@ olx.interaction.ModifyOptions.prototype.wrapX;
/** /**
* @typedef {{duration: (number|undefined)}} * @typedef {{duration: (number|undefined),
* useAnchor: (boolean|undefined)}}
* @api * @api
*/ */
olx.interaction.MouseWheelZoomOptions; olx.interaction.MouseWheelZoomOptions;
@@ -2662,6 +2694,16 @@ olx.interaction.MouseWheelZoomOptions;
olx.interaction.MouseWheelZoomOptions.prototype.duration; olx.interaction.MouseWheelZoomOptions.prototype.duration;
/**
* Enable zooming using the mouse's location as the anchor. Default is `true`.
* When set to false, zooming in and out will zoom to the center of the screen
* instead of zooming on the mouse's location.
* @type {boolean|undefined}
* @api
*/
olx.interaction.MouseWheelZoomOptions.prototype.useAnchor;
/** /**
* @typedef {{threshold: (number|undefined), * @typedef {{threshold: (number|undefined),
* duration: (number|undefined)}} * duration: (number|undefined)}}
@@ -2768,6 +2810,7 @@ olx.interaction.PointerOptions.prototype.handleUpEvent;
* removeCondition: (ol.events.ConditionType|undefined), * removeCondition: (ol.events.ConditionType|undefined),
* toggleCondition: (ol.events.ConditionType|undefined), * toggleCondition: (ol.events.ConditionType|undefined),
* multi: (boolean|undefined), * multi: (boolean|undefined),
* features: (ol.Collection.<ol.Feature>|undefined),
* filter: (ol.interaction.SelectFilterFunction|undefined), * filter: (ol.interaction.SelectFilterFunction|undefined),
* wrapX: (boolean|undefined)}} * wrapX: (boolean|undefined)}}
* @api * @api
@@ -2858,6 +2901,17 @@ olx.interaction.SelectOptions.prototype.toggleCondition;
olx.interaction.SelectOptions.prototype.multi; olx.interaction.SelectOptions.prototype.multi;
/**
* Collection where the interaction will place selected features. Optional. If
* not set the interaction will create a collection. In any case the collection
* used by the interaction is returned by
* {@link ol.interaction.Select#getFeatures}.
* @type {ol.Collection.<ol.Feature>}
* @api
*/
olx.interaction.SelectOptions.prototype.features;
/** /**
* A function that takes an {@link ol.Feature} and an {@link ol.layer.Layer} and * A function that takes an {@link ol.Feature} and an {@link ol.layer.Layer} and
* returns `true` if the feature may be selected or `false` otherwise. * returns `true` if the feature may be selected or `false` otherwise.
@@ -2920,11 +2974,7 @@ olx.layer;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{opacity: (number|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* opacity: (number|undefined),
* saturation: (number|undefined),
* visible: (boolean|undefined), * visible: (boolean|undefined),
* extent: (ol.Extent|undefined), * extent: (ol.Extent|undefined),
* zIndex: (number|undefined), * zIndex: (number|undefined),
@@ -2935,30 +2985,6 @@ olx.layer;
olx.layer.BaseOptions; olx.layer.BaseOptions;
/**
* Brightness. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.BaseOptions.prototype.brightness;
/**
* Contrast. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.BaseOptions.prototype.contrast;
/**
* Hue. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.BaseOptions.prototype.hue;
/** /**
* Opacity (0, 1). Default is `1`. * Opacity (0, 1). Default is `1`.
* @type {number|undefined} * @type {number|undefined}
@@ -2967,14 +2993,6 @@ olx.layer.BaseOptions.prototype.hue;
olx.layer.BaseOptions.prototype.opacity; olx.layer.BaseOptions.prototype.opacity;
/**
* Saturation. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.BaseOptions.prototype.saturation;
/** /**
* Visibility. Default is `true`. * Visibility. Default is `true`.
* @type {boolean|undefined} * @type {boolean|undefined}
@@ -3018,11 +3036,7 @@ olx.layer.BaseOptions.prototype.maxResolution;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{opacity: (number|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* opacity: (number|undefined),
* saturation: (number|undefined),
* source: (ol.source.Source|undefined), * source: (ol.source.Source|undefined),
* visible: (boolean|undefined), * visible: (boolean|undefined),
* extent: (ol.Extent|undefined), * extent: (ol.Extent|undefined),
@@ -3034,30 +3048,6 @@ olx.layer.BaseOptions.prototype.maxResolution;
olx.layer.LayerOptions; olx.layer.LayerOptions;
/**
* Brightness. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.LayerOptions.prototype.brightness;
/**
* Contrast. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.LayerOptions.prototype.contrast;
/**
* Hue. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.LayerOptions.prototype.hue;
/** /**
* Opacity (0, 1). Default is `1`. * Opacity (0, 1). Default is `1`.
* @type {number|undefined} * @type {number|undefined}
@@ -3066,14 +3056,6 @@ olx.layer.LayerOptions.prototype.hue;
olx.layer.LayerOptions.prototype.opacity; olx.layer.LayerOptions.prototype.opacity;
/**
* Saturation. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.LayerOptions.prototype.saturation;
/** /**
* Source for this layer. If not provided to the constructor, the source can * Source for this layer. If not provided to the constructor, the source can
* be set by calling {@link ol.layer.Layer#setSource layer.setSource(source)} * be set by calling {@link ol.layer.Layer#setSource layer.setSource(source)}
@@ -3127,11 +3109,7 @@ olx.layer.LayerOptions.prototype.maxResolution;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{opacity: (number|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* opacity: (number|undefined),
* saturation: (number|undefined),
* visible: (boolean|undefined), * visible: (boolean|undefined),
* extent: (ol.Extent|undefined), * extent: (ol.Extent|undefined),
* zIndex: (number|undefined), * zIndex: (number|undefined),
@@ -3143,30 +3121,6 @@ olx.layer.LayerOptions.prototype.maxResolution;
olx.layer.GroupOptions; olx.layer.GroupOptions;
/**
* Brightness. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.GroupOptions.prototype.brightness;
/**
* Contrast. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.GroupOptions.prototype.contrast;
/**
* Hue. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.GroupOptions.prototype.hue;
/** /**
* Opacity (0, 1). Default is `1`. * Opacity (0, 1). Default is `1`.
* @type {number|undefined} * @type {number|undefined}
@@ -3175,14 +3129,6 @@ olx.layer.GroupOptions.prototype.hue;
olx.layer.GroupOptions.prototype.opacity; olx.layer.GroupOptions.prototype.opacity;
/**
* Saturation. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.GroupOptions.prototype.saturation;
/** /**
* Visibility. Default is `true`. * Visibility. Default is `true`.
* @type {boolean|undefined} * @type {boolean|undefined}
@@ -3234,10 +3180,7 @@ olx.layer.GroupOptions.prototype.layers;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{gradient: (Array.<string>|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* gradient: (Array.<string>|undefined),
* radius: (number|undefined), * radius: (number|undefined),
* blur: (number|undefined), * blur: (number|undefined),
* shadow: (number|undefined), * shadow: (number|undefined),
@@ -3246,7 +3189,6 @@ olx.layer.GroupOptions.prototype.layers;
* minResolution: (number|undefined), * minResolution: (number|undefined),
* maxResolution: (number|undefined), * maxResolution: (number|undefined),
* opacity: (number|undefined), * opacity: (number|undefined),
* saturation: (number|undefined),
* source: (ol.source.Vector|undefined), * source: (ol.source.Vector|undefined),
* visible: (boolean|undefined)}} * visible: (boolean|undefined)}}
* @api * @api
@@ -3254,30 +3196,6 @@ olx.layer.GroupOptions.prototype.layers;
olx.layer.HeatmapOptions; olx.layer.HeatmapOptions;
/**
* Brightness.
* @type {number|undefined}
* @api
*/
olx.layer.HeatmapOptions.prototype.brightness;
/**
* Contrast.
* @type {number|undefined}
* @api
*/
olx.layer.HeatmapOptions.prototype.contrast;
/**
* Hue.
* @type {number|undefined}
* @api
*/
olx.layer.HeatmapOptions.prototype.hue;
/** /**
* The color gradient of the heatmap, specified as an array of CSS color * The color gradient of the heatmap, specified as an array of CSS color
* strings. Default is `['#00f', '#0ff', '#0f0', '#ff0', '#f00']`. * strings. Default is `['#00f', '#0ff', '#0f0', '#ff0', '#f00']`.
@@ -3354,14 +3272,6 @@ olx.layer.HeatmapOptions.prototype.maxResolution;
olx.layer.HeatmapOptions.prototype.opacity; olx.layer.HeatmapOptions.prototype.opacity;
/**
* Saturation.
* @type {number|undefined}
* @api
*/
olx.layer.HeatmapOptions.prototype.saturation;
/** /**
* Source. * Source.
* @type {ol.source.Vector} * @type {ol.source.Vector}
@@ -3379,11 +3289,7 @@ olx.layer.HeatmapOptions.prototype.visible;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{opacity: (number|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* opacity: (number|undefined),
* saturation: (number|undefined),
* map: (ol.Map|undefined), * map: (ol.Map|undefined),
* source: (ol.source.Image|undefined), * source: (ol.source.Image|undefined),
* visible: (boolean|undefined), * visible: (boolean|undefined),
@@ -3395,30 +3301,6 @@ olx.layer.HeatmapOptions.prototype.visible;
olx.layer.ImageOptions; olx.layer.ImageOptions;
/**
* Brightness. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.ImageOptions.prototype.brightness;
/**
* Contrast. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.ImageOptions.prototype.contrast;
/**
* Hue. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.ImageOptions.prototype.hue;
/** /**
* Opacity (0, 1). Default is `1`. * Opacity (0, 1). Default is `1`.
* @type {number|undefined} * @type {number|undefined}
@@ -3427,14 +3309,6 @@ olx.layer.ImageOptions.prototype.hue;
olx.layer.ImageOptions.prototype.opacity; olx.layer.ImageOptions.prototype.opacity;
/**
* Saturation. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.ImageOptions.prototype.saturation;
/** /**
* Source for this layer. * Source for this layer.
* @type {ol.source.Image} * @type {ol.source.Image}
@@ -3488,12 +3362,8 @@ olx.layer.ImageOptions.prototype.maxResolution;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{opacity: (number|undefined),
* contrast: (number|undefined),
* hue: (number|undefined),
* opacity: (number|undefined),
* preload: (number|undefined), * preload: (number|undefined),
* saturation: (number|undefined),
* source: (ol.source.Tile|undefined), * source: (ol.source.Tile|undefined),
* map: (ol.Map|undefined), * map: (ol.Map|undefined),
* visible: (boolean|undefined), * visible: (boolean|undefined),
@@ -3506,30 +3376,6 @@ olx.layer.ImageOptions.prototype.maxResolution;
olx.layer.TileOptions; olx.layer.TileOptions;
/**
* Brightness. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.TileOptions.prototype.brightness;
/**
* Contrast. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.TileOptions.prototype.contrast;
/**
* Hue. Default is `0`.
* @type {number|undefined}
* @api
*/
olx.layer.TileOptions.prototype.hue;
/** /**
* Opacity (0, 1). Default is `1`. * Opacity (0, 1). Default is `1`.
* @type {number|undefined} * @type {number|undefined}
@@ -3547,14 +3393,6 @@ olx.layer.TileOptions.prototype.opacity;
olx.layer.TileOptions.prototype.preload; olx.layer.TileOptions.prototype.preload;
/**
* Saturation. Default is `1`.
* @type {number|undefined}
* @api
*/
olx.layer.TileOptions.prototype.saturation;
/** /**
* Source for this layer. * Source for this layer.
* @type {ol.source.Tile} * @type {ol.source.Tile}
@@ -3616,15 +3454,11 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError;
/** /**
* @typedef {{brightness: (number|undefined), * @typedef {{renderOrder: (function(ol.Feature, ol.Feature):number|null|undefined),
* contrast: (number|undefined),
* renderOrder: (function(ol.Feature, ol.Feature):number|null|undefined),
* hue: (number|undefined),
* minResolution: (number|undefined), * minResolution: (number|undefined),
* maxResolution: (number|undefined), * maxResolution: (number|undefined),
* opacity: (number|undefined), * opacity: (number|undefined),
* renderBuffer: (number|undefined), * renderBuffer: (number|undefined),
* saturation: (number|undefined),
* source: (ol.source.Vector|undefined), * source: (ol.source.Vector|undefined),
* map: (ol.Map|undefined), * map: (ol.Map|undefined),
* style: (ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction|undefined), * style: (ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction|undefined),
@@ -3636,22 +3470,6 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError;
olx.layer.VectorOptions; olx.layer.VectorOptions;
/**
* Brightness.
* @type {number|undefined}
* @api
*/
olx.layer.VectorOptions.prototype.brightness;
/**
* Contrast.
* @type {number|undefined}
* @api
*/
olx.layer.VectorOptions.prototype.contrast;
/** /**
* Render order. Function to be used when sorting features before rendering. By * Render order. Function to be used when sorting features before rendering. By
* default features are drawn in the order that they are created. Use `null` to * default features are drawn in the order that they are created. Use `null` to
@@ -3662,14 +3480,6 @@ olx.layer.VectorOptions.prototype.contrast;
olx.layer.VectorOptions.prototype.renderOrder; olx.layer.VectorOptions.prototype.renderOrder;
/**
* Hue.
* @type {number|undefined}
* @api
*/
olx.layer.VectorOptions.prototype.hue;
/** /**
* Sets the layer as overlay on a map. The map will not manage this layer in its * Sets the layer as overlay on a map. The map will not manage this layer in its
* layers collection, and the layer will be rendered on top. This is useful for * layers collection, and the layer will be rendered on top. This is useful for
@@ -3725,14 +3535,6 @@ olx.layer.VectorOptions.prototype.opacity;
olx.layer.VectorOptions.prototype.renderBuffer; olx.layer.VectorOptions.prototype.renderBuffer;
/**
* Saturation.
* @type {number|undefined}
* @api
*/
olx.layer.VectorOptions.prototype.saturation;
/** /**
* Source. * Source.
* @type {ol.source.Vector} * @type {ol.source.Vector}
@@ -4230,7 +4032,7 @@ olx.source.ImageMapGuideOptions.prototype.projection;
/** /**
* Ratio. `1` means image requests are the size of the map viewport, `2` means * Ratio. `1` means image requests are the size of the map viewport, `2` means
* twice the width and height of the map viewport, and so on. Must be `1` or * twice the width and height of the map viewport, and so on. Must be `1` or
* higher. Default is `1`. * higher. Default is `1`.
* @type {number|undefined} * @type {number|undefined}
* @api stable * @api stable
@@ -4513,7 +4315,7 @@ olx.source.ImageVectorOptions.prototype.projection;
/** /**
* Ratio. 1 means canvases are the size of the map viewport, 2 means twice the * Ratio. 1 means canvases are the size of the map viewport, 2 means twice the
* width and height of the map viewport, and so on. Must be `1` or higher. * width and height of the map viewport, and so on. Must be `1` or higher.
* Default is `1.5`. * Default is `1.5`.
* @type {number|undefined} * @type {number|undefined}
* @api * @api
@@ -4697,7 +4499,7 @@ olx.source.ImageWMSOptions.prototype.projection;
/** /**
* Ratio. `1` means image requests are the size of the map viewport, `2` means * Ratio. `1` means image requests are the size of the map viewport, `2` means
* twice the width and height of the map viewport, and so on. Must be `1` or * twice the width and height of the map viewport, and so on. Must be `1` or
* higher. Default is `1.5`. * higher. Default is `1.5`.
* @type {number|undefined} * @type {number|undefined}
* @api stable * @api stable
@@ -6139,7 +5941,9 @@ olx.style.TextOptions;
/** /**
* Font. * Font style as CSS 'font' value, see:
* {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font}.
* Default is '10px sans-serif'
* @type {string|undefined} * @type {string|undefined}
* @api * @api
*/ */
@@ -6181,7 +5985,7 @@ olx.style.TextOptions.prototype.rotation;
/** /**
* Text. * Text content.
* @type {string|undefined} * @type {string|undefined}
* @api * @api
*/ */
@@ -6189,7 +5993,8 @@ olx.style.TextOptions.prototype.text;
/** /**
* Text alignment. * Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.
* Default is 'start'.
* @type {string|undefined} * @type {string|undefined}
* @api * @api
*/ */
@@ -6197,7 +6002,8 @@ olx.style.TextOptions.prototype.textAlign;
/** /**
* Text base line. * Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',
* 'hanging', 'ideographic'. Default is 'alphabetic'.
* @type {string|undefined} * @type {string|undefined}
* @api * @api
*/ */
@@ -6205,7 +6011,7 @@ olx.style.TextOptions.prototype.textBaseline;
/** /**
* Fill style. * Fill style. If none is provided, we'll use a dark fill-style (#333).
* @type {ol.style.Fill|undefined} * @type {ol.style.Fill|undefined}
* @api * @api
*/ */

View File

@@ -1,6 +1,6 @@
{ {
"name": "openlayers", "name": "openlayers",
"version": "3.9.0", "version": "3.10.0",
"description": "Build tools and sources for developing OpenLayers based mapping applications", "description": "Build tools and sources for developing OpenLayers based mapping applications",
"keywords": [ "keywords": [
"map", "map",
@@ -27,7 +27,7 @@
"dependencies": { "dependencies": {
"async": "0.9.0", "async": "0.9.0",
"browserify": "9.0.3", "browserify": "9.0.3",
"closure-util": "1.7.0", "closure-util": "1.8.0",
"fs-extra": "0.12.0", "fs-extra": "0.12.0",
"glob": "5.0.3", "glob": "5.0.3",
"graceful-fs": "3.0.2", "graceful-fs": "3.0.2",
@@ -55,7 +55,7 @@
"mocha-phantomjs": "3.5.1", "mocha-phantomjs": "3.5.1",
"mustache": "2.1.3", "mustache": "2.1.3",
"phantomjs": "1.9.10", "phantomjs": "1.9.10",
"proj4": "2.3.6", "proj4": "2.3.12",
"resemblejs": "1.2.0", "resemblejs": "1.2.0",
"sinon": "1.10.3", "sinon": "1.10.3",
"slimerjs-edge": "0.10.0-pre-2", "slimerjs-edge": "0.10.0-pre-2",

View File

@@ -1,5 +1,6 @@
goog.provide('ol.animation'); goog.provide('ol.animation');
goog.require('ol');
goog.require('ol.PreRenderFunction'); goog.require('ol.PreRenderFunction');
goog.require('ol.ViewHint'); goog.require('ol.ViewHint');
goog.require('ol.coordinate'); goog.require('ol.coordinate');
@@ -15,9 +16,9 @@ goog.require('ol.easing');
*/ */
ol.animation.bounce = function(options) { ol.animation.bounce = function(options) {
var resolution = options.resolution; var resolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now(); var start = options.start ? options.start : Date.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000; var duration = options.duration !== undefined ? options.duration : 1000;
var easing = goog.isDef(options.easing) ? var easing = options.easing ?
options.easing : ol.easing.upAndDown; options.easing : ol.easing.upAndDown;
return ( return (
/** /**
@@ -51,11 +52,11 @@ ol.animation.bounce = function(options) {
*/ */
ol.animation.pan = function(options) { ol.animation.pan = function(options) {
var source = options.source; var source = options.source;
var start = goog.isDef(options.start) ? options.start : goog.now(); var start = options.start ? options.start : Date.now();
var sourceX = source[0]; var sourceX = source[0];
var sourceY = source[1]; var sourceY = source[1];
var duration = goog.isDef(options.duration) ? options.duration : 1000; var duration = options.duration !== undefined ? options.duration : 1000;
var easing = goog.isDef(options.easing) ? var easing = options.easing ?
options.easing : ol.easing.inAndOut; options.easing : ol.easing.inAndOut;
return ( return (
/** /**
@@ -90,12 +91,12 @@ ol.animation.pan = function(options) {
* @api * @api
*/ */
ol.animation.rotate = function(options) { ol.animation.rotate = function(options) {
var sourceRotation = goog.isDef(options.rotation) ? options.rotation : 0; var sourceRotation = options.rotation ? options.rotation : 0;
var start = goog.isDef(options.start) ? options.start : goog.now(); var start = options.start ? options.start : Date.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000; var duration = options.duration !== undefined ? options.duration : 1000;
var easing = goog.isDef(options.easing) ? var easing = options.easing ?
options.easing : ol.easing.inAndOut; options.easing : ol.easing.inAndOut;
var anchor = goog.isDef(options.anchor) ? var anchor = options.anchor ?
options.anchor : null; options.anchor : null;
return ( return (
@@ -114,7 +115,7 @@ ol.animation.rotate = function(options) {
(sourceRotation - frameState.viewState.rotation) * delta; (sourceRotation - frameState.viewState.rotation) * delta;
frameState.animate = true; frameState.animate = true;
frameState.viewState.rotation += deltaRotation; frameState.viewState.rotation += deltaRotation;
if (!goog.isNull(anchor)) { if (anchor) {
var center = frameState.viewState.center; var center = frameState.viewState.center;
ol.coordinate.sub(center, anchor); ol.coordinate.sub(center, anchor);
ol.coordinate.rotate(center, deltaRotation); ol.coordinate.rotate(center, deltaRotation);
@@ -137,9 +138,9 @@ ol.animation.rotate = function(options) {
*/ */
ol.animation.zoom = function(options) { ol.animation.zoom = function(options) {
var sourceResolution = options.resolution; var sourceResolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now(); var start = options.start ? options.start : Date.now();
var duration = goog.isDef(options.duration) ? options.duration : 1000; var duration = options.duration !== undefined ? options.duration : 1000;
var easing = goog.isDef(options.easing) ? var easing = options.easing ?
options.easing : ol.easing.inAndOut; options.easing : ol.easing.inAndOut;
return ( return (
/** /**

View File

@@ -37,6 +37,17 @@ ol.array.binaryFindNearest = function(arr, target) {
}; };
/**
* Whether the array contains the given object.
* @param {Array.<*>} arr The array to test for the presence of the element.
* @param {*} obj The object for which to test.
* @return {boolean} The object is in the array.
*/
ol.array.includes = function(arr, obj) {
return arr.indexOf(obj) >= 0;
};
/** /**
* @param {Array.<number>} arr Array. * @param {Array.<number>} arr Array.
* @param {number} target Target. * @param {number} target Target.

View File

@@ -38,8 +38,7 @@ ol.Attribution = function(options) {
* @private * @private
* @type {Object.<string, Array.<ol.TileRange>>} * @type {Object.<string, Array.<ol.TileRange>>}
*/ */
this.tileRanges_ = goog.isDef(options.tileRanges) ? this.tileRanges_ = options.tileRanges ? options.tileRanges : null;
options.tileRanges : null;
}; };
@@ -62,7 +61,7 @@ ol.Attribution.prototype.getHTML = function() {
*/ */
ol.Attribution.prototype.intersectsAnyTileRange = ol.Attribution.prototype.intersectsAnyTileRange =
function(tileRanges, tileGrid, projection) { function(tileRanges, tileGrid, projection) {
if (goog.isNull(this.tileRanges_)) { if (!this.tileRanges_) {
return true; return true;
} }
var i, ii, tileRange, zKey; var i, ii, tileRange, zKey;

View File

@@ -1,7 +1,7 @@
goog.provide('ol.CenterConstraint'); goog.provide('ol.CenterConstraint');
goog.provide('ol.CenterConstraintType'); goog.provide('ol.CenterConstraintType');
goog.require('goog.math'); goog.require('ol.math');
/** /**
@@ -21,10 +21,10 @@ ol.CenterConstraint.createExtent = function(extent) {
* @return {ol.Coordinate|undefined} Center. * @return {ol.Coordinate|undefined} Center.
*/ */
function(center) { function(center) {
if (goog.isDef(center)) { if (center) {
return [ return [
goog.math.clamp(center[0], extent[0], extent[2]), ol.math.clamp(center[0], extent[0], extent[2]),
goog.math.clamp(center[1], extent[1], extent[3]) ol.math.clamp(center[1], extent[1], extent[3])
]; ];
} else { } else {
return undefined; return undefined;

View File

@@ -91,7 +91,7 @@ ol.Collection = function(opt_array) {
* @private * @private
* @type {!Array.<T>} * @type {!Array.<T>}
*/ */
this.array_ = goog.isDef(opt_array) ? opt_array : []; this.array_ = opt_array ? opt_array : [];
this.updateLength_(); this.updateLength_();
@@ -136,7 +136,7 @@ ol.Collection.prototype.extend = function(arr) {
* @api stable * @api stable
*/ */
ol.Collection.prototype.forEach = function(f, opt_this) { ol.Collection.prototype.forEach = function(f, opt_this) {
goog.array.forEach(this.array_, f, opt_this); this.array_.forEach(f, opt_this);
}; };

View File

@@ -9,9 +9,9 @@ goog.provide('ol.color');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.color'); goog.require('goog.color');
goog.require('goog.color.names'); goog.require('goog.color.names');
goog.require('goog.math');
goog.require('goog.vec.Mat4'); goog.require('goog.vec.Mat4');
goog.require('ol'); goog.require('ol');
goog.require('ol.math');
/** /**
@@ -62,7 +62,7 @@ ol.color.rgbaColorRe_ =
ol.color.blend = function(dst, src, opt_color) { ol.color.blend = function(dst, src, opt_color) {
// http://en.wikipedia.org/wiki/Alpha_compositing // http://en.wikipedia.org/wiki/Alpha_compositing
// FIXME do we need to scale by 255? // FIXME do we need to scale by 255?
var out = goog.isDef(opt_color) ? opt_color : []; var out = opt_color ? opt_color : [];
var dstA = dst[3]; var dstA = dst[3];
var srcA = src[3]; var srcA = src[3];
if (dstA == 1) { if (dstA == 1) {
@@ -271,11 +271,11 @@ ol.color.isValid = function(color) {
* @return {ol.Color} Clamped color. * @return {ol.Color} Clamped color.
*/ */
ol.color.normalize = function(color, opt_color) { ol.color.normalize = function(color, opt_color) {
var result = goog.isDef(opt_color) ? opt_color : []; var result = opt_color || [];
result[0] = goog.math.clamp((color[0] + 0.5) | 0, 0, 255); result[0] = ol.math.clamp((color[0] + 0.5) | 0, 0, 255);
result[1] = goog.math.clamp((color[1] + 0.5) | 0, 0, 255); result[1] = ol.math.clamp((color[1] + 0.5) | 0, 0, 255);
result[2] = goog.math.clamp((color[2] + 0.5) | 0, 0, 255); result[2] = ol.math.clamp((color[2] + 0.5) | 0, 0, 255);
result[3] = goog.math.clamp(color[3], 0, 1); result[3] = ol.math.clamp(color[3], 0, 1);
return result; return result;
}; };
@@ -309,7 +309,7 @@ ol.color.toString = function(color) {
* @return {ol.Color} Transformed color. * @return {ol.Color} Transformed color.
*/ */
ol.color.transform = function(color, transform, opt_color) { ol.color.transform = function(color, transform, opt_color) {
var result = goog.isDef(opt_color) ? opt_color : []; var result = opt_color ? opt_color : [];
result = goog.vec.Mat4.multVec3(transform, color, result); result = goog.vec.Mat4.multVec3(transform, color, result);
goog.asserts.assert(goog.isArray(result), 'result should be an array'); goog.asserts.assert(goog.isArray(result), 'result should be an array');
result[3] = color[3]; result[3] = color[3];

View File

@@ -1,205 +0,0 @@
goog.provide('ol.color.Matrix');
goog.require('goog.vec.Mat4');
/**
* @constructor
*/
ol.color.Matrix = function() {
/**
* @private
* @type {!goog.vec.Mat4.Number}
*/
this.colorMatrix_ = goog.vec.Mat4.createNumber();
/**
* @private
* @type {number|undefined}
*/
this.brightness_ = undefined;
/**
* @private
* @type {!goog.vec.Mat4.Number}
*/
this.brightnessMatrix_ = goog.vec.Mat4.createNumber();
/**
* @private
* @type {number|undefined}
*/
this.contrast_ = undefined;
/**
* @private
* @type {!goog.vec.Mat4.Number}
*/
this.contrastMatrix_ = goog.vec.Mat4.createNumber();
/**
* @private
* @type {number|undefined}
*/
this.hue_ = undefined;
/**
* @private
* @type {!goog.vec.Mat4.Number}
*/
this.hueMatrix_ = goog.vec.Mat4.createNumber();
/**
* @private
* @type {number|undefined}
*/
this.saturation_ = undefined;
/**
* @private
* @type {!goog.vec.Mat4.Number}
*/
this.saturationMatrix_ = goog.vec.Mat4.createNumber();
};
/**
* @param {!goog.vec.Mat4.Number} matrix Matrix.
* @param {number} value Brightness value.
* @return {!goog.vec.Mat4.Number} Matrix.
*/
ol.color.Matrix.makeBrightness = function(matrix, value) {
goog.vec.Mat4.makeTranslate(matrix, value, value, value);
return matrix;
};
/**
* @param {!goog.vec.Mat4.Number} matrix Matrix.
* @param {number} value Contrast value.
* @return {!goog.vec.Mat4.Number} Matrix.
*/
ol.color.Matrix.makeContrast = function(matrix, value) {
goog.vec.Mat4.makeScale(matrix, value, value, value);
var translateValue = (-0.5 * value + 0.5);
goog.vec.Mat4.setColumnValues(matrix, 3,
translateValue, translateValue, translateValue, 1);
return matrix;
};
/**
* @param {!goog.vec.Mat4.Number} matrix Matrix.
* @param {number} value Hue value.
* @return {!goog.vec.Mat4.Number} Matrix.
*/
ol.color.Matrix.makeHue = function(matrix, value) {
var cosHue = Math.cos(value);
var sinHue = Math.sin(value);
var v00 = 0.213 + cosHue * 0.787 - sinHue * 0.213;
var v01 = 0.715 - cosHue * 0.715 - sinHue * 0.715;
var v02 = 0.072 - cosHue * 0.072 + sinHue * 0.928;
var v03 = 0;
var v10 = 0.213 - cosHue * 0.213 + sinHue * 0.143;
var v11 = 0.715 + cosHue * 0.285 + sinHue * 0.140;
var v12 = 0.072 - cosHue * 0.072 - sinHue * 0.283;
var v13 = 0;
var v20 = 0.213 - cosHue * 0.213 - sinHue * 0.787;
var v21 = 0.715 - cosHue * 0.715 + sinHue * 0.715;
var v22 = 0.072 + cosHue * 0.928 + sinHue * 0.072;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix,
v00, v10, v20, v30,
v01, v11, v21, v31,
v02, v12, v22, v32,
v03, v13, v23, v33);
return matrix;
};
/**
* @param {!goog.vec.Mat4.Number} matrix Matrix.
* @param {number} value Saturation value.
* @return {!goog.vec.Mat4.Number} Matrix.
*/
ol.color.Matrix.makeSaturation = function(matrix, value) {
var v00 = 0.213 + 0.787 * value;
var v01 = 0.715 - 0.715 * value;
var v02 = 0.072 - 0.072 * value;
var v03 = 0;
var v10 = 0.213 - 0.213 * value;
var v11 = 0.715 + 0.285 * value;
var v12 = 0.072 - 0.072 * value;
var v13 = 0;
var v20 = 0.213 - 0.213 * value;
var v21 = 0.715 - 0.715 * value;
var v22 = 0.072 + 0.928 * value;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix,
v00, v10, v20, v30,
v01, v11, v21, v31,
v02, v12, v22, v32,
v03, v13, v23, v33);
return matrix;
};
/**
* @param {number|undefined} brightness Brightness.
* @param {number|undefined} contrast Contrast.
* @param {number|undefined} hue Hue.
* @param {number|undefined} saturation Saturation.
* @return {!goog.vec.Mat4.Number} Matrix.
*/
ol.color.Matrix.prototype.getMatrix = function(
brightness, contrast, hue, saturation) {
var colorMatrixDirty = false;
if (goog.isDef(brightness) && brightness !== this.brightness_) {
ol.color.Matrix.makeBrightness(this.brightnessMatrix_, brightness);
this.brightness_ = brightness;
colorMatrixDirty = true;
}
if (goog.isDef(contrast) && contrast !== this.contrast_) {
ol.color.Matrix.makeContrast(this.contrastMatrix_, contrast);
this.contrast_ = contrast;
colorMatrixDirty = true;
}
if (goog.isDef(hue) && hue !== this.hue_) {
ol.color.Matrix.makeHue(this.hueMatrix_, hue);
this.hue_ = hue;
colorMatrixDirty = true;
}
if (goog.isDef(saturation) && saturation !== this.saturation_) {
ol.color.Matrix.makeSaturation(this.saturationMatrix_, saturation);
this.saturation_ = saturation;
colorMatrixDirty = true;
}
if (colorMatrixDirty) {
var colorMatrix = this.colorMatrix_;
goog.vec.Mat4.makeIdentity(colorMatrix);
if (goog.isDef(contrast)) {
goog.vec.Mat4.multMat(colorMatrix, this.contrastMatrix_, colorMatrix);
}
if (goog.isDef(brightness)) {
goog.vec.Mat4.multMat(colorMatrix, this.brightnessMatrix_, colorMatrix);
}
if (goog.isDef(saturation)) {
goog.vec.Mat4.multMat(colorMatrix, this.saturationMatrix_, colorMatrix);
}
if (goog.isDef(hue)) {
goog.vec.Mat4.multMat(colorMatrix, this.hueMatrix_, colorMatrix);
}
}
return this.colorMatrix_;
};

View File

@@ -10,6 +10,7 @@ goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('goog.style'); goog.require('goog.style');
goog.require('ol');
goog.require('ol.Attribution'); goog.require('ol.Attribution');
goog.require('ol.control.Control'); goog.require('ol.control.Control');
goog.require('ol.css'); goog.require('ol.css');
@@ -31,7 +32,7 @@ goog.require('ol.source.Tile');
*/ */
ol.control.Attribution = function(opt_options) { ol.control.Attribution = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @private * @private
@@ -45,52 +46,49 @@ ol.control.Attribution = function(opt_options) {
*/ */
this.logoLi_ = goog.dom.createElement(goog.dom.TagName.LI); this.logoLi_ = goog.dom.createElement(goog.dom.TagName.LI);
goog.dom.appendChild(this.ulElement_, this.logoLi_); this.ulElement_.appendChild(this.logoLi_);
goog.style.setElementShown(this.logoLi_, false); goog.style.setElementShown(this.logoLi_, false);
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.collapsed_ = goog.isDef(options.collapsed) ? options.collapsed : true; this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.collapsible_ = goog.isDef(options.collapsible) ? this.collapsible_ = options.collapsible !== undefined ?
options.collapsible : true; options.collapsible : true;
if (!this.collapsible_) { if (!this.collapsible_) {
this.collapsed_ = false; this.collapsed_ = false;
} }
var className = goog.isDef(options.className) ? var className = options.className ? options.className : 'ol-attribution';
options.className : 'ol-attribution';
var tipLabel = goog.isDef(options.tipLabel) ? var tipLabel = options.tipLabel ? options.tipLabel : 'Attributions';
options.tipLabel : 'Attributions';
var collapseLabel = goog.isDef(options.collapseLabel) ? var collapseLabel = options.collapseLabel ? options.collapseLabel : '\u00BB';
options.collapseLabel : '\u00BB';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.collapseLabel_ = /** @type {Node} */ (goog.isString(collapseLabel) ? this.collapseLabel_ = goog.isString(collapseLabel) ?
goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) : goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) :
collapseLabel); collapseLabel;
var label = goog.isDef(options.label) ? options.label : 'i'; var label = options.label ? options.label : 'i';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.label_ = /** @type {Node} */ (goog.isString(label) ? this.label_ = goog.isString(label) ?
goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) : goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) :
label); label;
var activeLabel = (this.collapsible_ && !this.collapsed_) ? var activeLabel = (this.collapsible_ && !this.collapsed_) ?
this.collapseLabel_ : this.label_; this.collapseLabel_ : this.label_;
@@ -116,8 +114,7 @@ ol.control.Attribution = function(opt_options) {
var element = goog.dom.createDom(goog.dom.TagName.DIV, var element = goog.dom.createDom(goog.dom.TagName.DIV,
cssClasses, this.ulElement_, button); cssClasses, this.ulElement_, button);
var render = goog.isDef(options.render) ? var render = options.render ? options.render : ol.control.Attribution.render;
options.render : ol.control.Attribution.render;
goog.base(this, { goog.base(this, {
element: element, element: element,
@@ -167,15 +164,15 @@ ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
/** @type {Object.<string, ol.Attribution>} */ /** @type {Object.<string, ol.Attribution>} */
var hiddenAttributions = {}; var hiddenAttributions = {};
var projection = frameState.viewState.projection; var projection = frameState.viewState.projection;
goog.asserts.assert(!goog.isNull(projection), 'projection cannot be null'); goog.asserts.assert(projection, 'projection of viewState required');
for (i = 0, ii = layerStatesArray.length; i < ii; i++) { for (i = 0, ii = layerStatesArray.length; i < ii; i++) {
source = layerStatesArray[i].layer.getSource(); source = layerStatesArray[i].layer.getSource();
if (goog.isNull(source)) { if (!source) {
continue; continue;
} }
sourceKey = goog.getUid(source).toString(); sourceKey = goog.getUid(source).toString();
sourceAttributions = source.getAttributions(); sourceAttributions = source.getAttributions();
if (goog.isNull(sourceAttributions)) { if (!sourceAttributions) {
continue; continue;
} }
for (j = 0, jj = sourceAttributions.length; j < jj; j++) { for (j = 0, jj = sourceAttributions.length; j < jj; j++) {
@@ -185,11 +182,11 @@ ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
continue; continue;
} }
tileRanges = frameState.usedTiles[sourceKey]; tileRanges = frameState.usedTiles[sourceKey];
if (goog.isDef(tileRanges)) { if (tileRanges) {
goog.asserts.assertInstanceof(source, ol.source.Tile, goog.asserts.assertInstanceof(source, ol.source.Tile,
'source should be an ol.source.Tile'); 'source should be an ol.source.Tile');
var tileGrid = source.getTileGridForProjection(projection); var tileGrid = source.getTileGridForProjection(projection);
goog.asserts.assert(!goog.isNull(tileGrid), 'tileGrid cannot be null'); goog.asserts.assert(tileGrid, 'tileGrid required for projection');
intersectsTileRange = sourceAttribution.intersectsAnyTileRange( intersectsTileRange = sourceAttribution.intersectsAnyTileRange(
tileRanges, tileGrid, projection); tileRanges, tileGrid, projection);
} else { } else {
@@ -226,7 +223,7 @@ ol.control.Attribution.render = function(mapEvent) {
*/ */
ol.control.Attribution.prototype.updateElement_ = function(frameState) { ol.control.Attribution.prototype.updateElement_ = function(frameState) {
if (goog.isNull(frameState)) { if (!frameState) {
if (this.renderedVisible_) { if (this.renderedVisible_) {
goog.style.setElementShown(this.element, false); goog.style.setElementShown(this.element, false);
this.renderedVisible_ = false; this.renderedVisible_ = false;
@@ -268,7 +265,7 @@ ol.control.Attribution.prototype.updateElement_ = function(frameState) {
attributionElement = goog.dom.createElement(goog.dom.TagName.LI); attributionElement = goog.dom.createElement(goog.dom.TagName.LI);
attributionElement.innerHTML = attributionElement.innerHTML =
visibleAttributions[attributionKey].getHTML(); visibleAttributions[attributionKey].getHTML();
goog.dom.appendChild(this.ulElement_, attributionElement); this.ulElement_.appendChild(attributionElement);
this.attributionElements_[attributionKey] = attributionElement; this.attributionElements_[attributionKey] = attributionElement;
this.attributionElementRenderedVisible_[attributionKey] = true; this.attributionElementRenderedVisible_[attributionKey] = true;
} }
@@ -277,7 +274,7 @@ ol.control.Attribution.prototype.updateElement_ = function(frameState) {
attributionElement.innerHTML = attributionElement.innerHTML =
hiddenAttributions[attributionKey].getHTML(); hiddenAttributions[attributionKey].getHTML();
goog.style.setElementShown(attributionElement, false); goog.style.setElementShown(attributionElement, false);
goog.dom.appendChild(this.ulElement_, attributionElement); this.ulElement_.appendChild(attributionElement);
this.attributionElements_[attributionKey] = attributionElement; this.attributionElements_[attributionKey] = attributionElement;
} }
@@ -331,7 +328,7 @@ ol.control.Attribution.prototype.insertLogos_ = function(frameState) {
}); });
logoElement.appendChild(image); logoElement.appendChild(image);
} }
goog.dom.appendChild(this.logoLi_, logoElement); this.logoLi_.appendChild(logoElement);
logoElements[logoKey] = logoElement; logoElements[logoKey] = logoElement;
} }
} }

View File

@@ -1,8 +1,8 @@
goog.provide('ol.control.Control'); goog.provide('ol.control.Control');
goog.require('goog.array');
goog.require('goog.dom'); goog.require('goog.dom');
goog.require('goog.events'); goog.require('goog.events');
goog.require('ol');
goog.require('ol.MapEventType'); goog.require('ol.MapEventType');
goog.require('ol.Object'); goog.require('ol.Object');
@@ -45,7 +45,7 @@ ol.control.Control = function(options) {
* @protected * @protected
* @type {Element} * @type {Element}
*/ */
this.element = goog.isDef(options.element) ? options.element : null; this.element = options.element ? options.element : null;
/** /**
* @private * @private
@@ -68,9 +68,9 @@ ol.control.Control = function(options) {
/** /**
* @type {function(ol.MapEvent)} * @type {function(ol.MapEvent)}
*/ */
this.render = goog.isDef(options.render) ? options.render : goog.nullFunction; this.render = options.render ? options.render : ol.nullFunction;
if (goog.isDef(options.target)) { if (options.target) {
this.setTarget(options.target); this.setTarget(options.target);
} }
@@ -105,19 +105,19 @@ ol.control.Control.prototype.getMap = function() {
* @api stable * @api stable
*/ */
ol.control.Control.prototype.setMap = function(map) { ol.control.Control.prototype.setMap = function(map) {
if (!goog.isNull(this.map_)) { if (this.map_) {
goog.dom.removeNode(this.element); goog.dom.removeNode(this.element);
} }
if (!goog.array.isEmpty(this.listenerKeys)) { if (this.listenerKeys.length > 0) {
goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey); this.listenerKeys.forEach(goog.events.unlistenByKey);
this.listenerKeys.length = 0; this.listenerKeys.length = 0;
} }
this.map_ = map; this.map_ = map;
if (!goog.isNull(this.map_)) { if (this.map_) {
var target = !goog.isNull(this.target_) ? var target = this.target_ ?
this.target_ : map.getOverlayContainerStopEvent(); this.target_ : map.getOverlayContainerStopEvent();
goog.dom.appendChild(target, this.element); target.appendChild(this.element);
if (this.render !== goog.nullFunction) { if (this.render !== ol.nullFunction) {
this.listenerKeys.push(goog.events.listen(map, this.listenerKeys.push(goog.events.listen(map,
ol.MapEventType.POSTRENDER, this.render, false, this)); ol.MapEventType.POSTRENDER, this.render, false, this));
} }

View File

@@ -1,5 +1,6 @@
goog.provide('ol.control'); goog.provide('ol.control');
goog.require('ol');
goog.require('ol.Collection'); goog.require('ol.Collection');
goog.require('ol.control.Attribution'); goog.require('ol.control.Attribution');
goog.require('ol.control.Rotate'); goog.require('ol.control.Rotate');
@@ -20,23 +21,21 @@ goog.require('ol.control.Zoom');
*/ */
ol.control.defaults = function(opt_options) { ol.control.defaults = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
var controls = new ol.Collection(); var controls = new ol.Collection();
var zoomControl = goog.isDef(options.zoom) ? var zoomControl = options.zoom !== undefined ? options.zoom : true;
options.zoom : true;
if (zoomControl) { if (zoomControl) {
controls.push(new ol.control.Zoom(options.zoomOptions)); controls.push(new ol.control.Zoom(options.zoomOptions));
} }
var rotateControl = goog.isDef(options.rotate) ? var rotateControl = options.rotate !== undefined ? options.rotate : true;
options.rotate : true;
if (rotateControl) { if (rotateControl) {
controls.push(new ol.control.Rotate(options.rotateOptions)); controls.push(new ol.control.Rotate(options.rotateOptions));
} }
var attributionControl = goog.isDef(options.attribution) ? var attributionControl = options.attribution !== undefined ?
options.attribution : true; options.attribution : true;
if (attributionControl) { if (attributionControl) {
controls.push(new ol.control.Attribution(options.attributionOptions)); controls.push(new ol.control.Attribution(options.attributionOptions));

View File

@@ -8,6 +8,7 @@ goog.require('goog.dom.fullscreen');
goog.require('goog.dom.fullscreen.EventType'); goog.require('goog.dom.fullscreen.EventType');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('ol');
goog.require('ol.control.Control'); goog.require('ol.control.Control');
goog.require('ol.css'); goog.require('ol.css');
@@ -28,36 +29,33 @@ goog.require('ol.css');
*/ */
ol.control.FullScreen = function(opt_options) { ol.control.FullScreen = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @private * @private
* @type {string} * @type {string}
*/ */
this.cssClassName_ = goog.isDef(options.className) ? this.cssClassName_ = options.className ? options.className : 'ol-full-screen';
options.className : 'ol-full-screen';
var label = goog.isDef(options.label) ? options.label : '\u2194'; var label = options.label ? options.label : '\u2194';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.labelNode_ = /** @type {Node} */ (goog.isString(label) ? this.labelNode_ = goog.isString(label) ?
goog.dom.createTextNode(label) : label); goog.dom.createTextNode(label) : label;
var labelActive = goog.isDef(options.labelActive) ? var labelActive = options.labelActive ? options.labelActive : '\u00d7';
options.labelActive : '\u00d7';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.labelActiveNode_ = /** @type {Node} */ (goog.isString(labelActive) ? this.labelActiveNode_ = goog.isString(labelActive) ?
goog.dom.createTextNode(labelActive) : labelActive); goog.dom.createTextNode(labelActive) : labelActive;
var tipLabel = goog.isDef(options.tipLabel) ? var tipLabel = options.tipLabel ? options.tipLabel : 'Toggle full-screen';
options.tipLabel : 'Toggle full-screen';
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, { var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
'class': this.cssClassName_ + '-' + goog.dom.fullscreen.isFullScreen(), 'class': this.cssClassName_ + '-' + goog.dom.fullscreen.isFullScreen(),
'type': 'button', 'type': 'button',
@@ -85,7 +83,7 @@ ol.control.FullScreen = function(opt_options) {
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.keys_ = goog.isDef(options.keys) ? options.keys : false; this.keys_ = options.keys !== undefined ? options.keys : false;
}; };
goog.inherits(ol.control.FullScreen, ol.control.Control); goog.inherits(ol.control.FullScreen, ol.control.Control);
@@ -109,18 +107,16 @@ ol.control.FullScreen.prototype.handleFullScreen_ = function() {
return; return;
} }
var map = this.getMap(); var map = this.getMap();
if (goog.isNull(map)) { if (!map) {
return; return;
} }
if (goog.dom.fullscreen.isFullScreen()) { if (goog.dom.fullscreen.isFullScreen()) {
goog.dom.fullscreen.exitFullScreen(); goog.dom.fullscreen.exitFullScreen();
} else { } else {
var target = map.getTarget(); var target = map.getTarget();
goog.asserts.assert(goog.isDefAndNotNull(target), goog.asserts.assert(target, 'target should be defined');
'target should be defined');
var element = goog.dom.getElement(target); var element = goog.dom.getElement(target);
goog.asserts.assert(goog.isDefAndNotNull(element), goog.asserts.assert(element, 'element should be defined');
'element should be defined');
if (this.keys_) { if (this.keys_) {
goog.dom.fullscreen.requestFullScreenWithKeys(element); goog.dom.fullscreen.requestFullScreenWithKeys(element);
} else { } else {
@@ -145,7 +141,7 @@ ol.control.FullScreen.prototype.handleFullScreenChange_ = function() {
goog.dom.classlist.swap(button, opened, closed); goog.dom.classlist.swap(button, opened, closed);
goog.dom.replaceNode(this.labelNode_, this.labelActiveNode_); goog.dom.replaceNode(this.labelNode_, this.labelActiveNode_);
} }
if (!goog.isNull(map)) { if (map) {
map.updateSize(); map.updateSize();
} }
}; };

View File

@@ -40,14 +40,13 @@ ol.control.MousePositionProperty = {
*/ */
ol.control.MousePosition = function(opt_options) { ol.control.MousePosition = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
var className = goog.isDef(options.className) ? var className = options.className ? options.className : 'ol-mouse-position';
options.className : 'ol-mouse-position';
var element = goog.dom.createDom(goog.dom.TagName.DIV, className); var element = goog.dom.createDom(goog.dom.TagName.DIV, className);
var render = goog.isDef(options.render) ? var render = options.render ?
options.render : ol.control.MousePosition.render; options.render : ol.control.MousePosition.render;
goog.base(this, { goog.base(this, {
@@ -60,10 +59,10 @@ ol.control.MousePosition = function(opt_options) {
ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION), ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION),
this.handleProjectionChanged_, false, this); this.handleProjectionChanged_, false, this);
if (goog.isDef(options.coordinateFormat)) { if (options.coordinateFormat) {
this.setCoordinateFormat(options.coordinateFormat); this.setCoordinateFormat(options.coordinateFormat);
} }
if (goog.isDef(options.projection)) { if (options.projection) {
this.setProjection(ol.proj.get(options.projection)); this.setProjection(ol.proj.get(options.projection));
} }
@@ -71,8 +70,7 @@ ol.control.MousePosition = function(opt_options) {
* @private * @private
* @type {string} * @type {string}
*/ */
this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ? this.undefinedHTML_ = options.undefinedHTML ? options.undefinedHTML : '';
options.undefinedHTML : '';
/** /**
* @private * @private
@@ -110,7 +108,7 @@ goog.inherits(ol.control.MousePosition, ol.control.Control);
*/ */
ol.control.MousePosition.render = function(mapEvent) { ol.control.MousePosition.render = function(mapEvent) {
var frameState = mapEvent.frameState; var frameState = mapEvent.frameState;
if (goog.isNull(frameState)) { if (!frameState) {
this.mapProjection_ = null; this.mapProjection_ = null;
} else { } else {
if (this.mapProjection_ != frameState.viewState.projection) { if (this.mapProjection_ != frameState.viewState.projection) {
@@ -184,7 +182,7 @@ ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) {
*/ */
ol.control.MousePosition.prototype.setMap = function(map) { ol.control.MousePosition.prototype.setMap = function(map) {
goog.base(this, 'setMap', map); goog.base(this, 'setMap', map);
if (!goog.isNull(map)) { if (map) {
var viewport = map.getViewport(); var viewport = map.getViewport();
this.listenerKeys.push( this.listenerKeys.push(
goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE,
@@ -226,10 +224,10 @@ ol.control.MousePosition.prototype.setProjection = function(projection) {
*/ */
ol.control.MousePosition.prototype.updateHTML_ = function(pixel) { ol.control.MousePosition.prototype.updateHTML_ = function(pixel) {
var html = this.undefinedHTML_; var html = this.undefinedHTML_;
if (!goog.isNull(pixel) && !goog.isNull(this.mapProjection_)) { if (pixel && this.mapProjection_) {
if (goog.isNull(this.transform_)) { if (!this.transform_) {
var projection = this.getProjection(); var projection = this.getProjection();
if (goog.isDef(projection)) { if (projection) {
this.transform_ = ol.proj.getTransformFromProjections( this.transform_ = ol.proj.getTransformFromProjections(
this.mapProjection_, projection); this.mapProjection_, projection);
} else { } else {
@@ -238,17 +236,17 @@ ol.control.MousePosition.prototype.updateHTML_ = function(pixel) {
} }
var map = this.getMap(); var map = this.getMap();
var coordinate = map.getCoordinateFromPixel(pixel); var coordinate = map.getCoordinateFromPixel(pixel);
if (!goog.isNull(coordinate)) { if (coordinate) {
this.transform_(coordinate, coordinate); this.transform_(coordinate, coordinate);
var coordinateFormat = this.getCoordinateFormat(); var coordinateFormat = this.getCoordinateFormat();
if (goog.isDef(coordinateFormat)) { if (coordinateFormat) {
html = coordinateFormat(coordinate); html = coordinateFormat(coordinate);
} else { } else {
html = coordinate.toString(); html = coordinate.toString();
} }
} }
} }
if (!goog.isDef(this.renderedHTML_) || html != this.renderedHTML_) { if (!this.renderedHTML_ || html != this.renderedHTML_) {
this.element.innerHTML = html; this.element.innerHTML = html;
this.renderedHTML_ = html; this.renderedHTML_ = html;
} }

View File

@@ -8,6 +8,7 @@ goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.math.Size'); goog.require('goog.math.Size');
goog.require('goog.style'); goog.require('goog.style');
goog.require('ol');
goog.require('ol.Collection'); goog.require('ol.Collection');
goog.require('ol.Map'); goog.require('ol.Map');
goog.require('ol.MapEventType'); goog.require('ol.MapEventType');
@@ -34,51 +35,48 @@ goog.require('ol.extent');
*/ */
ol.control.OverviewMap = function(opt_options) { ol.control.OverviewMap = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @type {boolean} * @type {boolean}
* @private * @private
*/ */
this.collapsed_ = goog.isDef(options.collapsed) ? options.collapsed : true; this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.collapsible_ = goog.isDef(options.collapsible) ? this.collapsible_ = options.collapsible !== undefined ?
options.collapsible : true; options.collapsible : true;
if (!this.collapsible_) { if (!this.collapsible_) {
this.collapsed_ = false; this.collapsed_ = false;
} }
var className = goog.isDef(options.className) ? var className = options.className ? options.className : 'ol-overviewmap';
options.className : 'ol-overviewmap';
var tipLabel = goog.isDef(options.tipLabel) ? var tipLabel = options.tipLabel ? options.tipLabel : 'Overview map';
options.tipLabel : 'Overview map';
var collapseLabel = goog.isDef(options.collapseLabel) ? var collapseLabel = options.collapseLabel ? options.collapseLabel : '\u00AB';
options.collapseLabel : '\u00AB';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.collapseLabel_ = /** @type {Node} */ (goog.isString(collapseLabel) ? this.collapseLabel_ = goog.isString(collapseLabel) ?
goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) : goog.dom.createDom(goog.dom.TagName.SPAN, {}, collapseLabel) :
collapseLabel); collapseLabel;
var label = goog.isDef(options.label) ? options.label : '\u00BB'; var label = options.label ? options.label : '\u00BB';
/** /**
* @private * @private
* @type {Node} * @type {Node}
*/ */
this.label_ = /** @type {Node} */ (goog.isString(label) ? this.label_ = goog.isString(label) ?
goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) : goog.dom.createDom(goog.dom.TagName.SPAN, {}, label) :
label); label;
var activeLabel = (this.collapsible_ && !this.collapsed_) ? var activeLabel = (this.collapsible_ && !this.collapsed_) ?
this.collapseLabel_ : this.label_; this.collapseLabel_ : this.label_;
@@ -99,11 +97,12 @@ ol.control.OverviewMap = function(opt_options) {
this.ovmap_ = new ol.Map({ this.ovmap_ = new ol.Map({
controls: new ol.Collection(), controls: new ol.Collection(),
interactions: new ol.Collection(), interactions: new ol.Collection(),
target: ovmapDiv target: ovmapDiv,
view: options.view
}); });
var ovmap = this.ovmap_; var ovmap = this.ovmap_;
if (goog.isDef(options.layers)) { if (options.layers) {
options.layers.forEach( options.layers.forEach(
/** /**
* @param {ol.layer.Layer} layer Layer. * @param {ol.layer.Layer} layer Layer.
@@ -133,8 +132,7 @@ ol.control.OverviewMap = function(opt_options) {
var element = goog.dom.createDom(goog.dom.TagName.DIV, var element = goog.dom.createDom(goog.dom.TagName.DIV,
cssClasses, ovmapDiv, button); cssClasses, ovmapDiv, button);
var render = goog.isDef(options.render) ? var render = options.render ? options.render : ol.control.OverviewMap.render;
options.render : ol.control.OverviewMap.render;
goog.base(this, { goog.base(this, {
element: element, element: element,
@@ -271,14 +269,14 @@ ol.control.OverviewMap.prototype.validateExtent_ = function() {
goog.asserts.assertArray(mapSize, 'mapSize should be an array'); goog.asserts.assertArray(mapSize, 'mapSize should be an array');
var view = map.getView(); var view = map.getView();
goog.asserts.assert(goog.isDef(view), 'view should be defined'); goog.asserts.assert(view, 'view should be defined');
var extent = view.calculateExtent(mapSize); var extent = view.calculateExtent(mapSize);
var ovmapSize = ovmap.getSize(); var ovmapSize = ovmap.getSize();
goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array'); goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array');
var ovview = ovmap.getView(); var ovview = ovmap.getView();
goog.asserts.assert(goog.isDef(ovview), 'ovview should be defined'); goog.asserts.assert(ovview, 'ovview should be defined');
var ovextent = ovview.calculateExtent(ovmapSize); var ovextent = ovview.calculateExtent(ovmapSize);
var topLeftPixel = var topLeftPixel =
@@ -320,14 +318,14 @@ ol.control.OverviewMap.prototype.resetExtent_ = function() {
goog.asserts.assertArray(mapSize, 'mapSize should be an array'); goog.asserts.assertArray(mapSize, 'mapSize should be an array');
var view = map.getView(); var view = map.getView();
goog.asserts.assert(goog.isDef(view), 'view should be defined'); goog.asserts.assert(view, 'view should be defined');
var extent = view.calculateExtent(mapSize); var extent = view.calculateExtent(mapSize);
var ovmapSize = ovmap.getSize(); var ovmapSize = ovmap.getSize();
goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array'); goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array');
var ovview = ovmap.getView(); var ovview = ovmap.getView();
goog.asserts.assert(goog.isDef(ovview), 'ovview should be defined'); goog.asserts.assert(ovview, 'ovview should be defined');
// get how many times the current map overview could hold different // get how many times the current map overview could hold different
// box sizes using the min and max ratio, pick the step in the middle used // box sizes using the min and max ratio, pick the step in the middle used
@@ -350,10 +348,10 @@ ol.control.OverviewMap.prototype.recenter_ = function() {
var ovmap = this.ovmap_; var ovmap = this.ovmap_;
var view = map.getView(); var view = map.getView();
goog.asserts.assert(goog.isDef(view), 'view should be defined'); goog.asserts.assert(view, 'view should be defined');
var ovview = ovmap.getView(); var ovview = ovmap.getView();
goog.asserts.assert(goog.isDef(ovview), 'ovview should be defined'); goog.asserts.assert(ovview, 'ovview should be defined');
ovview.setCenter(view.getCenter()); ovview.setCenter(view.getCenter());
}; };
@@ -375,16 +373,16 @@ ol.control.OverviewMap.prototype.updateBox_ = function() {
goog.asserts.assertArray(mapSize, 'mapSize should be an array'); goog.asserts.assertArray(mapSize, 'mapSize should be an array');
var view = map.getView(); var view = map.getView();
goog.asserts.assert(goog.isDef(view), 'view should be defined'); goog.asserts.assert(view, 'view should be defined');
var ovview = ovmap.getView(); var ovview = ovmap.getView();
goog.asserts.assert(goog.isDef(ovview), 'ovview should be defined'); goog.asserts.assert(ovview, 'ovview should be defined');
var ovmapSize = ovmap.getSize(); var ovmapSize = ovmap.getSize();
goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array'); goog.asserts.assertArray(ovmapSize, 'ovmapSize should be an array');
var rotation = view.getRotation(); var rotation = view.getRotation();
goog.asserts.assert(goog.isDef(rotation), 'rotation should be defined'); goog.asserts.assert(rotation !== undefined, 'rotation should be defined');
var overlay = this.boxOverlay_; var overlay = this.boxOverlay_;
var box = this.boxOverlay_.getElement(); var box = this.boxOverlay_.getElement();
@@ -398,7 +396,7 @@ ol.control.OverviewMap.prototype.updateBox_ = function() {
overlay.setPosition(rotateBottomLeft); overlay.setPosition(rotateBottomLeft);
// set box size calculated from map extent size and overview map resolution // set box size calculated from map extent size and overview map resolution
if (goog.isDefAndNotNull(box)) { if (box) {
var boxWidth = Math.abs((bottomLeft[0] - topRight[0]) / ovresolution); var boxWidth = Math.abs((bottomLeft[0] - topRight[0]) / ovresolution);
var boxHeight = Math.abs((topRight[1] - bottomLeft[1]) / ovresolution); var boxHeight = Math.abs((topRight[1] - bottomLeft[1]) / ovresolution);
goog.style.setBorderBoxSize(box, new goog.math.Size( goog.style.setBorderBoxSize(box, new goog.math.Size(
@@ -419,11 +417,11 @@ ol.control.OverviewMap.prototype.calculateCoordinateRotate_ = function(
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
goog.asserts.assert(goog.isDef(view), 'view should be defined'); goog.asserts.assert(view, 'view should be defined');
var currentCenter = view.getCenter(); var currentCenter = view.getCenter();
if (goog.isDef(currentCenter)) { if (currentCenter) {
coordinateRotate = [ coordinateRotate = [
coordinate[0] - currentCenter[0], coordinate[0] - currentCenter[0],
coordinate[1] - currentCenter[1] coordinate[1] - currentCenter[1]

View File

@@ -5,7 +5,7 @@ goog.require('goog.dom.TagName');
goog.require('goog.dom.classlist'); goog.require('goog.dom.classlist');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.math'); goog.require('ol');
goog.require('ol.animation'); goog.require('ol.animation');
goog.require('ol.control.Control'); goog.require('ol.control.Control');
goog.require('ol.css'); goog.require('ol.css');
@@ -26,16 +26,15 @@ goog.require('ol.easing');
*/ */
ol.control.Rotate = function(opt_options) { ol.control.Rotate = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
var className = goog.isDef(options.className) ? var className = options.className ?
options.className : 'ol-rotate'; options.className : 'ol-rotate';
var label = goog.isDef(options.label) ? var label = options.label ? options.label : '\u21E7';
options.label : '\u21E7';
/** /**
* @type {Node} * @type {Element}
* @private * @private
*/ */
this.label_ = null; this.label_ = null;
@@ -48,8 +47,7 @@ ol.control.Rotate = function(opt_options) {
goog.dom.classlist.add(this.label_, 'ol-compass'); goog.dom.classlist.add(this.label_, 'ol-compass');
} }
var tipLabel = goog.isDef(options.tipLabel) ? var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';
options.tipLabel : 'Reset rotation';
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, { var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
'class': className + '-reset', 'class': className + '-reset',
@@ -64,8 +62,7 @@ ol.control.Rotate = function(opt_options) {
ol.css.CLASS_CONTROL; ol.css.CLASS_CONTROL;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button); var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, button);
var render = goog.isDef(options.render) ? var render = options.render ? options.render : ol.control.Rotate.render;
options.render : ol.control.Rotate.render;
goog.base(this, { goog.base(this, {
element: element, element: element,
@@ -77,13 +74,13 @@ ol.control.Rotate = function(opt_options) {
* @type {number} * @type {number}
* @private * @private
*/ */
this.duration_ = goog.isDef(options.duration) ? options.duration : 250; this.duration_ = options.duration ? options.duration : 250;
/** /**
* @type {boolean} * @type {boolean}
* @private * @private
*/ */
this.autoHide_ = goog.isDef(options.autoHide) ? options.autoHide : true; this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;
/** /**
* @private * @private
@@ -115,20 +112,21 @@ ol.control.Rotate.prototype.handleClick_ = function(event) {
ol.control.Rotate.prototype.resetNorth_ = function() { ol.control.Rotate.prototype.resetNorth_ = function() {
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
if (goog.isNull(view)) { if (!view) {
// the map does not have a view, so we can't act // the map does not have a view, so we can't act
// upon it // upon it
return; return;
} }
var currentRotation = view.getRotation(); var currentRotation = view.getRotation();
while (currentRotation < -Math.PI) { if (currentRotation !== undefined) {
currentRotation += 2 * Math.PI;
}
while (currentRotation > Math.PI) {
currentRotation -= 2 * Math.PI;
}
if (goog.isDef(currentRotation)) {
if (this.duration_ > 0) { if (this.duration_ > 0) {
currentRotation = currentRotation % (2 * Math.PI);
if (currentRotation < -Math.PI) {
currentRotation += 2 * Math.PI;
}
if (currentRotation > Math.PI) {
currentRotation -= 2 * Math.PI;
}
map.beforeRender(ol.animation.rotate({ map.beforeRender(ol.animation.rotate({
rotation: currentRotation, rotation: currentRotation,
duration: this.duration_, duration: this.duration_,
@@ -148,12 +146,12 @@ ol.control.Rotate.prototype.resetNorth_ = function() {
*/ */
ol.control.Rotate.render = function(mapEvent) { ol.control.Rotate.render = function(mapEvent) {
var frameState = mapEvent.frameState; var frameState = mapEvent.frameState;
if (goog.isNull(frameState)) { if (!frameState) {
return; return;
} }
var rotation = frameState.viewState.rotation; var rotation = frameState.viewState.rotation;
if (rotation != this.rotation_) { if (rotation != this.rotation_) {
var transform = 'rotate(' + goog.math.toDegrees(rotation) + 'deg)'; var transform = 'rotate(' + rotation + 'rad)';
if (this.autoHide_) { if (this.autoHide_) {
goog.dom.classlist.enable( goog.dom.classlist.enable(
this.element, ol.css.CLASS_HIDDEN, rotation === 0); this.element, ol.css.CLASS_HIDDEN, rotation === 0);

View File

@@ -8,6 +8,7 @@ goog.require('goog.dom.TagName');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.math'); goog.require('goog.math');
goog.require('goog.style'); goog.require('goog.style');
goog.require('ol');
goog.require('ol.Object'); goog.require('ol.Object');
goog.require('ol.TransformFunction'); goog.require('ol.TransformFunction');
goog.require('ol.control.Control'); goog.require('ol.control.Control');
@@ -58,10 +59,9 @@ ol.control.ScaleLineUnits = {
*/ */
ol.control.ScaleLine = function(opt_options) { ol.control.ScaleLine = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
var className = goog.isDef(options.className) ? var className = options.className ? options.className : 'ol-scale-line';
options.className : 'ol-scale-line';
/** /**
* @private * @private
@@ -87,7 +87,7 @@ ol.control.ScaleLine = function(opt_options) {
* @private * @private
* @type {number} * @type {number}
*/ */
this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64; this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;
/** /**
* @private * @private
@@ -113,8 +113,7 @@ ol.control.ScaleLine = function(opt_options) {
*/ */
this.toEPSG4326_ = null; this.toEPSG4326_ = null;
var render = goog.isDef(options.render) ? var render = options.render ? options.render : ol.control.ScaleLine.render;
options.render : ol.control.ScaleLine.render;
goog.base(this, { goog.base(this, {
element: this.element_, element: this.element_,
@@ -161,7 +160,7 @@ ol.control.ScaleLine.prototype.getUnits = function() {
*/ */
ol.control.ScaleLine.render = function(mapEvent) { ol.control.ScaleLine.render = function(mapEvent) {
var frameState = mapEvent.frameState; var frameState = mapEvent.frameState;
if (goog.isNull(frameState)) { if (!frameState) {
this.viewState_ = null; this.viewState_ = null;
} else { } else {
this.viewState_ = frameState.viewState; this.viewState_ = frameState.viewState;
@@ -195,7 +194,7 @@ ol.control.ScaleLine.prototype.setUnits = function(units) {
ol.control.ScaleLine.prototype.updateElement_ = function() { ol.control.ScaleLine.prototype.updateElement_ = function() {
var viewState = this.viewState_; var viewState = this.viewState_;
if (goog.isNull(viewState)) { if (!viewState) {
if (this.renderedVisible_) { if (this.renderedVisible_) {
goog.style.setElementShown(this.element_, false); goog.style.setElementShown(this.element_, false);
this.renderedVisible_ = false; this.renderedVisible_ = false;
@@ -227,13 +226,13 @@ ol.control.ScaleLine.prototype.updateElement_ = function() {
units == ol.control.ScaleLineUnits.DEGREES) { units == ol.control.ScaleLineUnits.DEGREES) {
// Convert pointResolution from other units to degrees // Convert pointResolution from other units to degrees
if (goog.isNull(this.toEPSG4326_)) { if (!this.toEPSG4326_) {
this.toEPSG4326_ = ol.proj.getTransformFromProjections( this.toEPSG4326_ = ol.proj.getTransformFromProjections(
projection, ol.proj.get('EPSG:4326')); projection, ol.proj.get('EPSG:4326'));
} }
cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1])); cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1]));
var radius = ol.sphere.NORMAL.radius; var radius = ol.sphere.NORMAL.radius;
goog.asserts.assert(goog.isDef(ol.proj.METERS_PER_UNIT[projectionUnits]), goog.asserts.assert(ol.proj.METERS_PER_UNIT[projectionUnits],
'Meters per unit should be defined for the projection unit'); 'Meters per unit should be defined for the projection unit');
radius /= ol.proj.METERS_PER_UNIT[projectionUnits]; radius /= ol.proj.METERS_PER_UNIT[projectionUnits];
pointResolution *= 180 / (Math.PI * cosLatitude * radius); pointResolution *= 180 / (Math.PI * cosLatitude * radius);

View File

@@ -24,20 +24,18 @@ goog.require('ol.easing');
*/ */
ol.control.Zoom = function(opt_options) { ol.control.Zoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : 'ol-zoom'; var className = options.className ? options.className : 'ol-zoom';
var delta = goog.isDef(options.delta) ? options.delta : 1; var delta = options.delta ? options.delta : 1;
var zoomInLabel = goog.isDef(options.zoomInLabel) ? var zoomInLabel = options.zoomInLabel ? options.zoomInLabel : '+';
options.zoomInLabel : '+'; var zoomOutLabel = options.zoomOutLabel ? options.zoomOutLabel : '\u2212';
var zoomOutLabel = goog.isDef(options.zoomOutLabel) ?
options.zoomOutLabel : '\u2212';
var zoomInTipLabel = goog.isDef(options.zoomInTipLabel) ? var zoomInTipLabel = options.zoomInTipLabel ?
options.zoomInTipLabel : 'Zoom in'; options.zoomInTipLabel : 'Zoom in';
var zoomOutTipLabel = goog.isDef(options.zoomOutTipLabel) ? var zoomOutTipLabel = options.zoomOutTipLabel ?
options.zoomOutTipLabel : 'Zoom out'; options.zoomOutTipLabel : 'Zoom out';
var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, { var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {
@@ -60,13 +58,6 @@ ol.control.Zoom = function(opt_options) {
goog.events.EventType.CLICK, goog.partial( goog.events.EventType.CLICK, goog.partial(
ol.control.Zoom.prototype.handleClick_, -delta), false, this); ol.control.Zoom.prototype.handleClick_, -delta), false, this);
goog.events.listen(outElement, [
goog.events.EventType.MOUSEOUT,
goog.events.EventType.FOCUSOUT
], function() {
this.blur();
}, false);
var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' + var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
ol.css.CLASS_CONTROL; ol.css.CLASS_CONTROL;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement,
@@ -81,7 +72,7 @@ ol.control.Zoom = function(opt_options) {
* @type {number} * @type {number}
* @private * @private
*/ */
this.duration_ = goog.isDef(options.duration) ? options.duration : 250; this.duration_ = options.duration ? options.duration : 250;
}; };
goog.inherits(ol.control.Zoom, ol.control.Control); goog.inherits(ol.control.Zoom, ol.control.Control);
@@ -105,13 +96,13 @@ ol.control.Zoom.prototype.handleClick_ = function(delta, event) {
ol.control.Zoom.prototype.zoomByDelta_ = function(delta) { ol.control.Zoom.prototype.zoomByDelta_ = function(delta) {
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
if (goog.isNull(view)) { if (!view) {
// the map does not have a view, so we can't act // the map does not have a view, so we can't act
// upon it // upon it
return; return;
} }
var currentResolution = view.getResolution(); var currentResolution = view.getResolution();
if (goog.isDef(currentResolution)) { if (currentResolution) {
if (this.duration_ > 0) { if (this.duration_ > 0) {
map.beforeRender(ol.animation.zoom({ map.beforeRender(ol.animation.zoom({
resolution: currentResolution, resolution: currentResolution,

View File

@@ -11,7 +11,6 @@ goog.require('goog.events.EventType');
goog.require('goog.fx.DragEvent'); goog.require('goog.fx.DragEvent');
goog.require('goog.fx.Dragger'); goog.require('goog.fx.Dragger');
goog.require('goog.fx.Dragger.EventType'); goog.require('goog.fx.Dragger.EventType');
goog.require('goog.math');
goog.require('goog.math.Rect'); goog.require('goog.math.Rect');
goog.require('goog.style'); goog.require('goog.style');
goog.require('ol.Size'); goog.require('ol.Size');
@@ -20,6 +19,7 @@ goog.require('ol.animation');
goog.require('ol.control.Control'); goog.require('ol.control.Control');
goog.require('ol.css'); goog.require('ol.css');
goog.require('ol.easing'); goog.require('ol.easing');
goog.require('ol.math');
@@ -38,7 +38,7 @@ goog.require('ol.easing');
*/ */
ol.control.ZoomSlider = function(opt_options) { ol.control.ZoomSlider = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* Will hold the current resolution of the view. * Will hold the current resolution of the view.
@@ -76,10 +76,9 @@ ol.control.ZoomSlider = function(opt_options) {
* @private * @private
* @type {number} * @type {number}
*/ */
this.duration_ = goog.isDef(options.duration) ? options.duration : 200; this.duration_ = options.duration ? options.duration : 200;
var className = goog.isDef(options.className) ? var className = options.className ? options.className : 'ol-zoomslider';
options.className : 'ol-zoomslider';
var thumbElement = goog.dom.createDom(goog.dom.TagName.DIV, var thumbElement = goog.dom.createDom(goog.dom.TagName.DIV,
[className + '-thumb', ol.css.CLASS_UNSELECTABLE]); [className + '-thumb', ol.css.CLASS_UNSELECTABLE]);
var containerElement = goog.dom.createDom(goog.dom.TagName.DIV, var containerElement = goog.dom.createDom(goog.dom.TagName.DIV,
@@ -105,8 +104,7 @@ ol.control.ZoomSlider = function(opt_options) {
goog.events.listen(thumbElement, goog.events.EventType.CLICK, goog.events.listen(thumbElement, goog.events.EventType.CLICK,
goog.events.Event.stopPropagation); goog.events.Event.stopPropagation);
var render = goog.isDef(options.render) ? var render = options.render ? options.render : ol.control.ZoomSlider.render;
options.render : ol.control.ZoomSlider.render;
goog.base(this, { goog.base(this, {
element: containerElement, element: containerElement,
@@ -132,7 +130,7 @@ ol.control.ZoomSlider.direction = {
*/ */
ol.control.ZoomSlider.prototype.setMap = function(map) { ol.control.ZoomSlider.prototype.setMap = function(map) {
goog.base(this, 'setMap', map); goog.base(this, 'setMap', map);
if (!goog.isNull(map)) { if (map) {
map.render(); map.render();
} }
}; };
@@ -181,10 +179,10 @@ ol.control.ZoomSlider.prototype.initSlider_ = function() {
* @api * @api
*/ */
ol.control.ZoomSlider.render = function(mapEvent) { ol.control.ZoomSlider.render = function(mapEvent) {
if (goog.isNull(mapEvent.frameState)) { if (!mapEvent.frameState) {
return; return;
} }
goog.asserts.assert(goog.isDefAndNotNull(mapEvent.frameState.viewState), goog.asserts.assert(mapEvent.frameState.viewState,
'viewState should be defined'); 'viewState should be defined');
if (!this.sliderInitialized_) { if (!this.sliderInitialized_) {
this.initSlider_(); this.initSlider_();
@@ -205,7 +203,7 @@ ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) {
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
var currentResolution = view.getResolution(); var currentResolution = view.getResolution();
goog.asserts.assert(goog.isDef(currentResolution), goog.asserts.assert(currentResolution,
'currentResolution should be defined'); 'currentResolution should be defined');
map.beforeRender(ol.animation.zoom({ map.beforeRender(ol.animation.zoom({
resolution: currentResolution, resolution: currentResolution,
@@ -252,7 +250,7 @@ ol.control.ZoomSlider.prototype.handleDraggerEnd_ = function(event) {
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
view.setHint(ol.ViewHint.INTERACTING, -1); view.setHint(ol.ViewHint.INTERACTING, -1);
goog.asserts.assert(goog.isDef(this.currentResolution_), goog.asserts.assert(this.currentResolution_,
'this.currentResolution_ should be defined'); 'this.currentResolution_ should be defined');
map.beforeRender(ol.animation.zoom({ map.beforeRender(ol.animation.zoom({
resolution: this.currentResolution_, resolution: this.currentResolution_,
@@ -303,7 +301,7 @@ ol.control.ZoomSlider.prototype.getRelativePosition_ = function(x, y) {
} else { } else {
amount = (y - draggerLimits.top) / draggerLimits.height; amount = (y - draggerLimits.top) / draggerLimits.height;
} }
return goog.math.clamp(amount, 0, 1); return ol.math.clamp(amount, 0, 1);
}; };

View File

@@ -21,19 +21,19 @@ goog.require('ol.css');
* @api stable * @api stable
*/ */
ol.control.ZoomToExtent = function(opt_options) { ol.control.ZoomToExtent = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @type {ol.Extent} * @type {ol.Extent}
* @private * @private
*/ */
this.extent_ = goog.isDef(options.extent) ? options.extent : null; this.extent_ = options.extent ? options.extent : null;
var className = goog.isDef(options.className) ? options.className : var className = options.className ? options.className :
'ol-zoom-extent'; 'ol-zoom-extent';
var label = goog.isDef(options.label) ? options.label : 'E'; var label = options.label ? options.label : 'E';
var tipLabel = goog.isDef(options.tipLabel) ? var tipLabel = options.tipLabel ?
options.tipLabel : 'Fit to extent'; options.tipLabel : 'Fit to extent';
var button = goog.dom.createDom(goog.dom.TagName.BUTTON, { var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {
'type': 'button', 'type': 'button',
@@ -71,9 +71,9 @@ ol.control.ZoomToExtent.prototype.handleClick_ = function(event) {
ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function() { ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function() {
var map = this.getMap(); var map = this.getMap();
var view = map.getView(); var view = map.getView();
var extent = goog.isNull(this.extent_) ? var extent = !this.extent_ ?
view.getProjection().getExtent() : this.extent_; view.getProjection().getExtent() : this.extent_;
var size = map.getSize(); var size = map.getSize();
goog.asserts.assert(goog.isDef(size), 'size should be defined'); goog.asserts.assert(size, 'size should be defined');
view.fit(extent, size); view.fit(extent, size);
}; };

View File

@@ -164,7 +164,7 @@ ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres) {
* @api stable * @api stable
*/ */
ol.coordinate.format = function(coordinate, template, opt_fractionDigits) { ol.coordinate.format = function(coordinate, template, opt_fractionDigits) {
if (goog.isDef(coordinate)) { if (coordinate) {
return template return template
.replace('{x}', coordinate[0].toFixed(opt_fractionDigits)) .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))
.replace('{y}', coordinate[1].toFixed(opt_fractionDigits)); .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));
@@ -295,7 +295,7 @@ ol.coordinate.squaredDistanceToSegment = function(coordinate, segment) {
* @api stable * @api stable
*/ */
ol.coordinate.toStringHDMS = function(coordinate) { ol.coordinate.toStringHDMS = function(coordinate) {
if (goog.isDef(coordinate)) { if (coordinate) {
return ol.coordinate.degreesToStringHDMS_(coordinate[1], 'NS') + ' ' + return ol.coordinate.degreesToStringHDMS_(coordinate[1], 'NS') + ' ' +
ol.coordinate.degreesToStringHDMS_(coordinate[0], 'EW'); ol.coordinate.degreesToStringHDMS_(coordinate[0], 'EW');
} else { } else {

View File

@@ -3,6 +3,7 @@ goog.provide('ol.DeviceOrientationProperty');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.math'); goog.require('goog.math');
goog.require('ol');
goog.require('ol.Object'); goog.require('ol.Object');
goog.require('ol.has'); goog.require('ol.has');
@@ -79,7 +80,7 @@ ol.DeviceOrientation = function(opt_options) {
goog.base(this); goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @private * @private
@@ -91,7 +92,7 @@ ol.DeviceOrientation = function(opt_options) {
ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING), ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING),
this.handleTrackingChanged_, false, this); this.handleTrackingChanged_, false, this);
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false); this.setTracking(options.tracking !== undefined ? options.tracking : false);
}; };
goog.inherits(ol.DeviceOrientation, ol.Object); goog.inherits(ol.DeviceOrientation, ol.Object);
@@ -113,24 +114,23 @@ ol.DeviceOrientation.prototype.disposeInternal = function() {
ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) { ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) {
var event = /** @type {DeviceOrientationEvent} */ var event = /** @type {DeviceOrientationEvent} */
(browserEvent.getBrowserEvent()); (browserEvent.getBrowserEvent());
if (goog.isDefAndNotNull(event.alpha)) { if (event.alpha !== null) {
var alpha = goog.math.toRadians(event.alpha); var alpha = goog.math.toRadians(event.alpha);
this.set(ol.DeviceOrientationProperty.ALPHA, alpha); this.set(ol.DeviceOrientationProperty.ALPHA, alpha);
// event.absolute is undefined in iOS. // event.absolute is undefined in iOS.
if (goog.isBoolean(event.absolute) && event.absolute) { if (goog.isBoolean(event.absolute) && event.absolute) {
this.set(ol.DeviceOrientationProperty.HEADING, alpha); this.set(ol.DeviceOrientationProperty.HEADING, alpha);
} else if (goog.isDefAndNotNull(event.webkitCompassHeading) && } else if (goog.isNumber(event.webkitCompassHeading) &&
goog.isDefAndNotNull(event.webkitCompassAccuracy) &&
event.webkitCompassAccuracy != -1) { event.webkitCompassAccuracy != -1) {
var heading = goog.math.toRadians(event.webkitCompassHeading); var heading = goog.math.toRadians(event.webkitCompassHeading);
this.set(ol.DeviceOrientationProperty.HEADING, heading); this.set(ol.DeviceOrientationProperty.HEADING, heading);
} }
} }
if (goog.isDefAndNotNull(event.beta)) { if (event.beta !== null) {
this.set(ol.DeviceOrientationProperty.BETA, this.set(ol.DeviceOrientationProperty.BETA,
goog.math.toRadians(event.beta)); goog.math.toRadians(event.beta));
} }
if (goog.isDefAndNotNull(event.gamma)) { if (event.gamma !== null) {
this.set(ol.DeviceOrientationProperty.GAMMA, this.set(ol.DeviceOrientationProperty.GAMMA,
goog.math.toRadians(event.gamma)); goog.math.toRadians(event.gamma));
} }
@@ -208,10 +208,10 @@ ol.DeviceOrientation.prototype.getTracking = function() {
ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() { ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() {
if (ol.has.DEVICE_ORIENTATION) { if (ol.has.DEVICE_ORIENTATION) {
var tracking = this.getTracking(); var tracking = this.getTracking();
if (tracking && goog.isNull(this.listenerKey_)) { if (tracking && !this.listenerKey_) {
this.listenerKey_ = goog.events.listen(goog.global, 'deviceorientation', this.listenerKey_ = goog.events.listen(goog.global, 'deviceorientation',
this.orientationChange_, false, this); this.orientationChange_, false, this);
} else if (!tracking && !goog.isNull(this.listenerKey_)) { } else if (!tracking && this.listenerKey_) {
goog.events.unlistenByKey(this.listenerKey_); goog.events.unlistenByKey(this.listenerKey_);
this.listenerKey_ = null; this.listenerKey_ = null;
} }

View File

@@ -19,25 +19,16 @@ goog.require('ol');
*/ */
ol.dom.createCanvasContext2D = function(opt_width, opt_height) { ol.dom.createCanvasContext2D = function(opt_width, opt_height) {
var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS); var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS);
if (goog.isDef(opt_width)) { if (opt_width) {
canvas.width = opt_width; canvas.width = opt_width;
} }
if (goog.isDef(opt_height)) { if (opt_height) {
canvas.height = opt_height; canvas.height = opt_height;
} }
return canvas.getContext('2d'); return canvas.getContext('2d');
}; };
/**
* @enum {boolean}
*/
ol.dom.BrowserFeature = {
USE_MS_MATRIX_TRANSFORM: ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE,
USE_MS_ALPHA_FILTER: ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE
};
/** /**
* Detect 2d transform. * Detect 2d transform.
* Adapted from http://stackoverflow.com/q/5661671/130442 * Adapted from http://stackoverflow.com/q/5661671/130442
@@ -47,8 +38,8 @@ ol.dom.BrowserFeature = {
ol.dom.canUseCssTransform = (function() { ol.dom.canUseCssTransform = (function() {
var canUseCssTransform; var canUseCssTransform;
return function() { return function() {
if (!goog.isDef(canUseCssTransform)) { if (canUseCssTransform === undefined) {
goog.asserts.assert(!goog.isNull(document.body), goog.asserts.assert(document.body,
'document.body should not be null'); 'document.body should not be null');
if (!goog.global.getComputedStyle) { if (!goog.global.getComputedStyle) {
// this browser is ancient // this browser is ancient
@@ -63,7 +54,7 @@ ol.dom.canUseCssTransform = (function() {
'MozTransform': '-moz-transform', 'MozTransform': '-moz-transform',
'transform': 'transform' 'transform': 'transform'
}; };
goog.dom.appendChild(document.body, el); document.body.appendChild(el);
for (var t in transforms) { for (var t in transforms) {
if (t in el.style) { if (t in el.style) {
el.style[t] = 'translate(1px,1px)'; el.style[t] = 'translate(1px,1px)';
@@ -90,8 +81,8 @@ ol.dom.canUseCssTransform = (function() {
ol.dom.canUseCssTransform3D = (function() { ol.dom.canUseCssTransform3D = (function() {
var canUseCssTransform3D; var canUseCssTransform3D;
return function() { return function() {
if (!goog.isDef(canUseCssTransform3D)) { if (canUseCssTransform3D === undefined) {
goog.asserts.assert(!goog.isNull(document.body), goog.asserts.assert(document.body,
'document.body should not be null'); 'document.body should not be null');
if (!goog.global.getComputedStyle) { if (!goog.global.getComputedStyle) {
// this browser is ancient // this browser is ancient
@@ -106,7 +97,7 @@ ol.dom.canUseCssTransform3D = (function() {
'MozTransform': '-moz-transform', 'MozTransform': '-moz-transform',
'transform': 'transform' 'transform': 'transform'
}; };
goog.dom.appendChild(document.body, el); document.body.appendChild(el);
for (var t in transforms) { for (var t in transforms) {
if (t in el.style) { if (t in el.style) {
el.style[t] = 'translate3d(1px,1px,1px)'; el.style[t] = 'translate3d(1px,1px,1px)';
@@ -137,94 +128,25 @@ ol.dom.setTransform = function(element, value) {
style.transform = value; style.transform = value;
// IE 9+ seems to assume transform-origin: 100% 100%; for some unknown reason // IE 9+ seems to assume transform-origin: 100% 100%; for some unknown reason
if (goog.userAgent.IE && !ol.IS_LEGACY_IE) { if (goog.userAgent.IE && goog.userAgent.isVersionOrHigher('9.0')) {
element.style.transformOrigin = '0 0'; element.style.transformOrigin = '0 0';
} }
}; };
/**
* Sets the opacity of an element, in an IE-compatible way
* @param {!Element} element Element
* @param {number} value Opacity, [0..1]
*/
ol.dom.setOpacity = function(element, value) {
if (ol.dom.BrowserFeature.USE_MS_ALPHA_FILTER) {
/** @type {string} */
var filter = element.currentStyle.filter;
/** @type {RegExp} */
var regex;
/** @type {string} */
var alpha;
if (goog.userAgent.VERSION == '8.0') {
regex = /progid:DXImageTransform\.Microsoft\.Alpha\(.*?\)/i;
alpha = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
(value * 100) + ')';
} else {
regex = /alpha\(.*?\)/i;
alpha = 'alpha(opacity=' + (value * 100) + ')';
}
var newFilter = filter.replace(regex, alpha);
if (newFilter === filter) {
// no replace was made? just append the new alpha filter instead
newFilter += ' ' + alpha;
}
element.style.filter = newFilter;
// Fix to apply filter to absolutely-positioned children element
if (element.currentStyle.zIndex === 'auto') {
element.style.zIndex = 0;
}
} else {
element.style.opacity = value;
}
};
/**
* Sets the IE matrix transform without replacing other filters
* @private
* @param {!Element} element Element
* @param {string} value The new progid string
*/
ol.dom.setIEMatrix_ = function(element, value) {
var filter = element.currentStyle.filter;
var newFilter =
filter.replace(/progid:DXImageTransform.Microsoft.Matrix\(.*?\)/i, value);
if (newFilter === filter) {
newFilter = ' ' + value;
}
element.style.filter = newFilter;
// Fix to apply filter to absolutely-positioned children element
if (element.currentStyle.zIndex === 'auto') {
element.style.zIndex = 0;
}
};
/** /**
* @param {!Element} element Element. * @param {!Element} element Element.
* @param {goog.vec.Mat4.Number} transform Matrix. * @param {goog.vec.Mat4.Number} transform Matrix.
* @param {number=} opt_precision Precision. * @param {number=} opt_precision Precision.
* @param {Element=} opt_translationElement Required for IE7-8
*/ */
ol.dom.transformElement2D = ol.dom.transformElement2D = function(element, transform, opt_precision) {
function(element, transform, opt_precision, opt_translationElement) {
// using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer // using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer
// matrix3d() // matrix3d()
var i; var i;
if (ol.dom.canUseCssTransform3D()) { if (ol.dom.canUseCssTransform3D()) {
var value3D; var value3D;
if (goog.isDef(opt_precision)) { if (opt_precision !== undefined) {
/** @type {Array.<string>} */ /** @type {Array.<string>} */
var strings3D = new Array(16); var strings3D = new Array(16);
for (i = 0; i < 16; ++i) { for (i = 0; i < 16; ++i) {
@@ -246,7 +168,7 @@ ol.dom.transformElement2D =
goog.vec.Mat4.getElement(transform, 1, 3) goog.vec.Mat4.getElement(transform, 1, 3)
]; ];
var value2D; var value2D;
if (goog.isDef(opt_precision)) { if (opt_precision !== undefined) {
/** @type {Array.<string>} */ /** @type {Array.<string>} */
var strings2D = new Array(6); var strings2D = new Array(6);
for (i = 0; i < 6; ++i) { for (i = 0; i < 6; ++i) {
@@ -257,38 +179,6 @@ ol.dom.transformElement2D =
value2D = transform2D.join(','); value2D = transform2D.join(',');
} }
ol.dom.setTransform(element, 'matrix(' + value2D + ')'); ol.dom.setTransform(element, 'matrix(' + value2D + ')');
} else if (ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) {
var m11 = goog.vec.Mat4.getElement(transform, 0, 0),
m12 = goog.vec.Mat4.getElement(transform, 0, 1),
m21 = goog.vec.Mat4.getElement(transform, 1, 0),
m22 = goog.vec.Mat4.getElement(transform, 1, 1),
dx = goog.vec.Mat4.getElement(transform, 0, 3),
dy = goog.vec.Mat4.getElement(transform, 1, 3);
// See: http://msdn.microsoft.com/en-us/library/ms533014(v=vs.85).aspx
// and: http://extremelysatisfactorytotalitarianism.com/blog/?p=1002
// @TODO: fix terrible IE bbox rotation issue.
var s = 'progid:DXImageTransform.Microsoft.Matrix(';
s += 'sizingMethod="auto expand"';
s += ',M11=' + m11.toFixed(opt_precision || 20);
s += ',M12=' + m12.toFixed(opt_precision || 20);
s += ',M21=' + m21.toFixed(opt_precision || 20);
s += ',M22=' + m22.toFixed(opt_precision || 20);
s += ')';
ol.dom.setIEMatrix_(element, s);
// scale = m11 = m22 = target resolution [m/px] / current res [m/px]
// dx = (viewport width [px] / 2) * scale
// + (layer.x [m] - view.x [m]) / target resolution [m / px]
// except that we're positioning the child element relative to the
// viewport, not the map.
// dividing by the scale factor isn't the exact correction, but it's
// close enough that you can barely tell unless you're looking for it
dx /= m11;
dy /= m22;
opt_translationElement.style.left = Math.round(dx) + 'px';
opt_translationElement.style.top = Math.round(dy) + 'px';
} else { } else {
element.style.left = element.style.left =
Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + 'px'; Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + 'px';

View File

@@ -1,36 +1,37 @@
goog.provide('ol.easing'); goog.provide('ol.easing');
goog.require('goog.fx.easing');
/** /**
* Start slow and speed up. * Start slow and speed up.
* @function
* @param {number} t Input between 0 and 1. * @param {number} t Input between 0 and 1.
* @return {number} Output between 0 and 1. * @return {number} Output between 0 and 1.
* @api * @api
*/ */
ol.easing.easeIn = goog.fx.easing.easeIn; ol.easing.easeIn = function(t) {
return Math.pow(t, 3);
};
/** /**
* Start fast and slow down. * Start fast and slow down.
* @function
* @param {number} t Input between 0 and 1. * @param {number} t Input between 0 and 1.
* @return {number} Output between 0 and 1. * @return {number} Output between 0 and 1.
* @api * @api
*/ */
ol.easing.easeOut = goog.fx.easing.easeOut; ol.easing.easeOut = function(t) {
return 1 - ol.easing.easeIn(1 - t);
};
/** /**
* Start slow, speed up, and then slow down again. * Start slow, speed up, and then slow down again.
* @function
* @param {number} t Input between 0 and 1. * @param {number} t Input between 0 and 1.
* @return {number} Output between 0 and 1. * @return {number} Output between 0 and 1.
* @api * @api
*/ */
ol.easing.inAndOut = goog.fx.easing.inAndOut; ol.easing.inAndOut = function(t) {
return 3 * t * t - 2 * t * t * t;
};
/** /**

View File

@@ -87,7 +87,7 @@ ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) {
* @api stable * @api stable
*/ */
ol.extent.buffer = function(extent, value, opt_extent) { ol.extent.buffer = function(extent, value, opt_extent) {
if (goog.isDef(opt_extent)) { if (opt_extent) {
opt_extent[0] = extent[0] - value; opt_extent[0] = extent[0] - value;
opt_extent[1] = extent[1] - value; opt_extent[1] = extent[1] - value;
opt_extent[2] = extent[2] + value; opt_extent[2] = extent[2] + value;
@@ -112,7 +112,7 @@ ol.extent.buffer = function(extent, value, opt_extent) {
* @return {ol.Extent} The clone. * @return {ol.Extent} The clone.
*/ */
ol.extent.clone = function(extent, opt_extent) { ol.extent.clone = function(extent, opt_extent) {
if (goog.isDef(opt_extent)) { if (opt_extent) {
opt_extent[0] = extent[0]; opt_extent[0] = extent[0];
opt_extent[1] = extent[1]; opt_extent[1] = extent[1];
opt_extent[2] = extent[2]; opt_extent[2] = extent[2];
@@ -247,7 +247,7 @@ ol.extent.createEmpty = function() {
* @return {ol.Extent} Extent. * @return {ol.Extent} Extent.
*/ */
ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) { ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) {
if (goog.isDef(opt_extent)) { if (opt_extent) {
opt_extent[0] = minX; opt_extent[0] = minX;
opt_extent[1] = minY; opt_extent[1] = minY;
opt_extent[2] = maxX; opt_extent[2] = maxX;
@@ -545,7 +545,7 @@ ol.extent.getCorner = function(extent, corner) {
} else { } else {
goog.asserts.fail('Invalid corner: %s', corner); goog.asserts.fail('Invalid corner: %s', corner);
} }
goog.asserts.assert(goog.isDef(coordinate), 'coordinate should be defined'); goog.asserts.assert(coordinate, 'coordinate should be defined');
return coordinate; return coordinate;
}; };
@@ -624,8 +624,7 @@ ol.extent.getIntersectionArea = function(extent1, extent2) {
* @api stable * @api stable
*/ */
ol.extent.getIntersection = function(extent1, extent2, opt_extent) { ol.extent.getIntersection = function(extent1, extent2, opt_extent) {
var intersection = goog.isDef(opt_extent) ? var intersection = opt_extent ? opt_extent : ol.extent.createEmpty();
opt_extent : ol.extent.createEmpty();
if (ol.extent.intersects(extent1, extent2)) { if (ol.extent.intersects(extent1, extent2)) {
if (extent1[0] > extent2[0]) { if (extent1[0] > extent2[0]) {
intersection[0] = extent1[0]; intersection[0] = extent1[0];
@@ -760,7 +759,7 @@ ol.extent.normalize = function(extent, coordinate) {
* @return {ol.Extent} Extent. * @return {ol.Extent} Extent.
*/ */
ol.extent.returnOrUpdate = function(extent, opt_extent) { ol.extent.returnOrUpdate = function(extent, opt_extent) {
if (goog.isDef(opt_extent)) { if (opt_extent) {
opt_extent[0] = extent[0]; opt_extent[0] = extent[0];
opt_extent[1] = extent[1]; opt_extent[1] = extent[1];
opt_extent[2] = extent[2]; opt_extent[2] = extent[2];
@@ -886,7 +885,7 @@ ol.extent.applyTransform = function(extent, transformFn, opt_extent) {
* @return {ol.Extent} The transformed extent. * @return {ol.Extent} The transformed extent.
*/ */
ol.extent.transform2D = function(extent, transform, opt_extent) { ol.extent.transform2D = function(extent, transform, opt_extent) {
var dest = goog.isDef(opt_extent) ? opt_extent : []; var dest = opt_extent ? opt_extent : [];
var m00 = goog.vec.Mat4.getElement(transform, 0, 0); var m00 = goog.vec.Mat4.getElement(transform, 0, 0);
var m10 = goog.vec.Mat4.getElement(transform, 1, 0); var m10 = goog.vec.Mat4.getElement(transform, 1, 0);
var m01 = goog.vec.Mat4.getElement(transform, 0, 1); var m01 = goog.vec.Mat4.getElement(transform, 0, 1);

View File

@@ -4,7 +4,7 @@ goog.provide('ol.FeatureStyleFunction');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.functions'); goog.require('ol');
goog.require('ol.Object'); goog.require('ol.Object');
goog.require('ol.geom.Geometry'); goog.require('ol.geom.Geometry');
goog.require('ol.style.Style'); goog.require('ol.style.Style');
@@ -96,9 +96,9 @@ ol.Feature = function(opt_geometryOrProperties) {
this, ol.Object.getChangeEventType(this.geometryName_), this, ol.Object.getChangeEventType(this.geometryName_),
this.handleGeometryChanged_, false, this); this.handleGeometryChanged_, false, this);
if (goog.isDef(opt_geometryOrProperties)) { if (opt_geometryOrProperties !== undefined) {
if (opt_geometryOrProperties instanceof ol.geom.Geometry || if (opt_geometryOrProperties instanceof ol.geom.Geometry ||
goog.isNull(opt_geometryOrProperties)) { !opt_geometryOrProperties) {
var geometry = /** @type {ol.geom.Geometry} */ (opt_geometryOrProperties); var geometry = /** @type {ol.geom.Geometry} */ (opt_geometryOrProperties);
this.setGeometry(geometry); this.setGeometry(geometry);
} else { } else {
@@ -123,11 +123,11 @@ ol.Feature.prototype.clone = function() {
var clone = new ol.Feature(this.getProperties()); var clone = new ol.Feature(this.getProperties());
clone.setGeometryName(this.getGeometryName()); clone.setGeometryName(this.getGeometryName());
var geometry = this.getGeometry(); var geometry = this.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
clone.setGeometry(geometry.clone()); clone.setGeometry(geometry.clone());
} }
var style = this.getStyle(); var style = this.getStyle();
if (!goog.isNull(style)) { if (style) {
clone.setStyle(style); clone.setStyle(style);
} }
return clone; return clone;
@@ -209,12 +209,12 @@ ol.Feature.prototype.handleGeometryChange_ = function() {
* @private * @private
*/ */
ol.Feature.prototype.handleGeometryChanged_ = function() { ol.Feature.prototype.handleGeometryChanged_ = function() {
if (!goog.isNull(this.geometryChangeKey_)) { if (this.geometryChangeKey_) {
goog.events.unlistenByKey(this.geometryChangeKey_); goog.events.unlistenByKey(this.geometryChangeKey_);
this.geometryChangeKey_ = null; this.geometryChangeKey_ = null;
} }
var geometry = this.getGeometry(); var geometry = this.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
this.geometryChangeKey_ = goog.events.listen(geometry, this.geometryChangeKey_ = goog.events.listen(geometry,
goog.events.EventType.CHANGE, this.handleGeometryChange_, false, this); goog.events.EventType.CHANGE, this.handleGeometryChange_, false, this);
} }
@@ -245,7 +245,7 @@ ol.Feature.prototype.setGeometry = function(geometry) {
*/ */
ol.Feature.prototype.setStyle = function(style) { ol.Feature.prototype.setStyle = function(style) {
this.style_ = style; this.style_ = style;
this.styleFunction_ = goog.isNull(style) ? this.styleFunction_ = !style ?
undefined : ol.Feature.createStyleFunction(style); undefined : ol.Feature.createStyleFunction(style);
this.changed(); this.changed();
}; };
@@ -321,7 +321,9 @@ ol.Feature.createStyleFunction = function(obj) {
'obj should be an ol.style.Style'); 'obj should be an ol.style.Style');
styles = [obj]; styles = [obj];
} }
styleFunction = goog.functions.constant(styles); styleFunction = function() {
return styles;
};
} }
return styleFunction; return styleFunction;
}; };

View File

@@ -84,13 +84,13 @@ ol.featureloader.loadFeaturesXhr = function(url, format, success) {
if (!goog.userAgent.IE) { if (!goog.userAgent.IE) {
source = xhrIo.getResponseXml(); source = xhrIo.getResponseXml();
} }
if (!goog.isDefAndNotNull(source)) { if (!source) {
source = ol.xml.parse(xhrIo.getResponseText()); source = ol.xml.parse(xhrIo.getResponseText());
} }
} else { } else {
goog.asserts.fail('unexpected format type'); goog.asserts.fail('unexpected format type');
} }
if (goog.isDefAndNotNull(source)) { if (source) {
var features = format.readFeatures(source, var features = format.readFeatures(source,
{featureProjection: projection}); {featureProjection: projection});
success.call(this, features); success.call(this, features);

View File

@@ -32,7 +32,7 @@ goog.require('ol.proj');
*/ */
ol.format.EsriJSON = function(opt_options) { ol.format.EsriJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -54,21 +54,21 @@ goog.inherits(ol.format.EsriJSON, ol.format.JSONFeature);
* @return {ol.geom.Geometry} Geometry. * @return {ol.geom.Geometry} Geometry.
*/ */
ol.format.EsriJSON.readGeometry_ = function(object, opt_options) { ol.format.EsriJSON.readGeometry_ = function(object, opt_options) {
if (goog.isNull(object)) { if (!object) {
return null; return null;
} }
var type; var type;
if (goog.isNumber(object.x) && goog.isNumber(object.y)) { if (goog.isNumber(object.x) && goog.isNumber(object.y)) {
type = ol.geom.GeometryType.POINT; type = ol.geom.GeometryType.POINT;
} else if (goog.isDefAndNotNull(object.points)) { } else if (object.points) {
type = ol.geom.GeometryType.MULTI_POINT; type = ol.geom.GeometryType.MULTI_POINT;
} else if (goog.isDefAndNotNull(object.paths)) { } else if (object.paths) {
if (object.paths.length === 1) { if (object.paths.length === 1) {
type = ol.geom.GeometryType.LINE_STRING; type = ol.geom.GeometryType.LINE_STRING;
} else { } else {
type = ol.geom.GeometryType.MULTI_LINE_STRING; type = ol.geom.GeometryType.MULTI_LINE_STRING;
} }
} else if (goog.isDefAndNotNull(object.rings)) { } else if (object.rings) {
var layout = ol.format.EsriJSON.getGeometryLayout_(object); var layout = ol.format.EsriJSON.getGeometryLayout_(object);
var rings = ol.format.EsriJSON.convertRings_(object.rings, layout); var rings = ol.format.EsriJSON.convertRings_(object.rings, layout);
object = /** @type {EsriJSONGeometry} */(goog.object.clone(object)); object = /** @type {EsriJSONGeometry} */(goog.object.clone(object));
@@ -80,9 +80,9 @@ ol.format.EsriJSON.readGeometry_ = function(object, opt_options) {
object.rings = rings; object.rings = rings;
} }
} }
goog.asserts.assert(goog.isDef(type), 'geometry type should be defined'); goog.asserts.assert(type, 'geometry type should be defined');
var geometryReader = ol.format.EsriJSON.GEOMETRY_READERS_[type]; var geometryReader = ol.format.EsriJSON.GEOMETRY_READERS_[type];
goog.asserts.assert(goog.isDef(geometryReader), goog.asserts.assert(geometryReader,
'geometryReader should be defined'); 'geometryReader should be defined');
return /** @type {ol.geom.Geometry} */ ( return /** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions( ol.format.Feature.transformWithOptions(
@@ -149,13 +149,13 @@ ol.format.EsriJSON.readPointGeometry_ = function(object) {
goog.asserts.assert(goog.isNumber(object.x), 'object.x should be number'); goog.asserts.assert(goog.isNumber(object.x), 'object.x should be number');
goog.asserts.assert(goog.isNumber(object.y), 'object.y should be number'); goog.asserts.assert(goog.isNumber(object.y), 'object.y should be number');
var point; var point;
if (goog.isDefAndNotNull(object.m) && goog.isDefAndNotNull(object.z)) { if (object.m !== undefined && object.z !== undefined) {
point = new ol.geom.Point([object.x, object.y, object.z, object.m], point = new ol.geom.Point([object.x, object.y, object.z, object.m],
ol.geom.GeometryLayout.XYZM); ol.geom.GeometryLayout.XYZM);
} else if (goog.isDefAndNotNull(object.z)) { } else if (object.z !== undefined) {
point = new ol.geom.Point([object.x, object.y, object.z], point = new ol.geom.Point([object.x, object.y, object.z],
ol.geom.GeometryLayout.XYZ); ol.geom.GeometryLayout.XYZ);
} else if (goog.isDefAndNotNull(object.m)) { } else if (object.m !== undefined) {
point = new ol.geom.Point([object.x, object.y, object.m], point = new ol.geom.Point([object.x, object.y, object.m],
ol.geom.GeometryLayout.XYM); ol.geom.GeometryLayout.XYM);
} else { } else {
@@ -219,8 +219,7 @@ ol.format.EsriJSON.getGeometryLayout_ = function(object) {
* @return {ol.geom.Geometry} MultiPoint. * @return {ol.geom.Geometry} MultiPoint.
*/ */
ol.format.EsriJSON.readMultiPointGeometry_ = function(object) { ol.format.EsriJSON.readMultiPointGeometry_ = function(object) {
goog.asserts.assert(goog.isDefAndNotNull(object.points), goog.asserts.assert(object.points, 'object.points should be defined');
'object.points should be defined');
var layout = ol.format.EsriJSON.getGeometryLayout_(object); var layout = ol.format.EsriJSON.getGeometryLayout_(object);
return new ol.geom.MultiPoint(object.points, layout); return new ol.geom.MultiPoint(object.points, layout);
}; };
@@ -232,7 +231,7 @@ ol.format.EsriJSON.readMultiPointGeometry_ = function(object) {
* @return {ol.geom.Geometry} MultiPolygon. * @return {ol.geom.Geometry} MultiPolygon.
*/ */
ol.format.EsriJSON.readMultiPolygonGeometry_ = function(object) { ol.format.EsriJSON.readMultiPolygonGeometry_ = function(object) {
goog.asserts.assert(goog.isDefAndNotNull(object.rings)); goog.asserts.assert(object.rings);
goog.asserts.assert(object.rings.length > 1, goog.asserts.assert(object.rings.length > 1,
'object.rings should have length larger than 1'); 'object.rings should have length larger than 1');
var layout = ol.format.EsriJSON.getGeometryLayout_(object); var layout = ol.format.EsriJSON.getGeometryLayout_(object);
@@ -248,7 +247,7 @@ ol.format.EsriJSON.readMultiPolygonGeometry_ = function(object) {
* @return {ol.geom.Geometry} Polygon. * @return {ol.geom.Geometry} Polygon.
*/ */
ol.format.EsriJSON.readPolygonGeometry_ = function(object) { ol.format.EsriJSON.readPolygonGeometry_ = function(object) {
goog.asserts.assert(goog.isDefAndNotNull(object.rings)); goog.asserts.assert(object.rings);
var layout = ol.format.EsriJSON.getGeometryLayout_(object); var layout = ol.format.EsriJSON.getGeometryLayout_(object);
return new ol.geom.Polygon(object.rings, layout); return new ol.geom.Polygon(object.rings, layout);
}; };
@@ -483,26 +482,25 @@ ol.format.EsriJSON.prototype.readFeatures;
ol.format.EsriJSON.prototype.readFeatureFromObject = function( ol.format.EsriJSON.prototype.readFeatureFromObject = function(
object, opt_options) { object, opt_options) {
var esriJSONFeature = /** @type {EsriJSONFeature} */ (object); var esriJSONFeature = /** @type {EsriJSONFeature} */ (object);
goog.asserts.assert(goog.isDefAndNotNull(esriJSONFeature.geometry) || goog.asserts.assert(esriJSONFeature.geometry ||
goog.isDefAndNotNull(esriJSONFeature.compressedGeometry) || esriJSONFeature.attributes,
goog.isDefAndNotNull(esriJSONFeature.attributes), 'geometry or attributes should be defined');
'geometry, compressedGeometry or attributes should be defined');
var geometry = ol.format.EsriJSON.readGeometry_(esriJSONFeature.geometry, var geometry = ol.format.EsriJSON.readGeometry_(esriJSONFeature.geometry,
opt_options); opt_options);
var feature = new ol.Feature(); var feature = new ol.Feature();
if (goog.isDef(this.geometryName_)) { if (this.geometryName_) {
feature.setGeometryName(this.geometryName_); feature.setGeometryName(this.geometryName_);
} }
feature.setGeometry(geometry); feature.setGeometry(geometry);
if (goog.isDef(opt_options) && goog.isDef(opt_options.idField) && if (opt_options && opt_options.idField &&
goog.isDef(esriJSONFeature.attributes[opt_options.idField])) { esriJSONFeature.attributes[opt_options.idField]) {
goog.asserts.assert( goog.asserts.assert(
goog.isNumber(esriJSONFeature.attributes[opt_options.idField]), goog.isNumber(esriJSONFeature.attributes[opt_options.idField]),
'objectIdFieldName value should be a number'); 'objectIdFieldName value should be a number');
feature.setId(/** @type {number} */( feature.setId(/** @type {number} */(
esriJSONFeature.attributes[opt_options.idField])); esriJSONFeature.attributes[opt_options.idField]));
} }
if (goog.isDef(esriJSONFeature.attributes)) { if (esriJSONFeature.attributes) {
feature.setProperties(esriJSONFeature.attributes); feature.setProperties(esriJSONFeature.attributes);
} }
return feature; return feature;
@@ -515,8 +513,8 @@ ol.format.EsriJSON.prototype.readFeatureFromObject = function(
ol.format.EsriJSON.prototype.readFeaturesFromObject = function( ol.format.EsriJSON.prototype.readFeaturesFromObject = function(
object, opt_options) { object, opt_options) {
var esriJSONObject = /** @type {EsriJSONObject} */ (object); var esriJSONObject = /** @type {EsriJSONObject} */ (object);
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
if (goog.isDefAndNotNull(esriJSONObject.features)) { if (esriJSONObject.features) {
var esriJSONFeatureCollection = /** @type {EsriJSONFeatureCollection} */ var esriJSONFeatureCollection = /** @type {EsriJSONFeatureCollection} */
(object); (object);
/** @type {Array.<ol.Feature>} */ /** @type {Array.<ol.Feature>} */
@@ -573,8 +571,7 @@ ol.format.EsriJSON.prototype.readProjection;
*/ */
ol.format.EsriJSON.prototype.readProjectionFromObject = function(object) { ol.format.EsriJSON.prototype.readProjectionFromObject = function(object) {
var esriJSONObject = /** @type {EsriJSONObject} */ (object); var esriJSONObject = /** @type {EsriJSONObject} */ (object);
if (goog.isDefAndNotNull(esriJSONObject.spatialReference) && if (esriJSONObject.spatialReference && esriJSONObject.spatialReference.wkid) {
goog.isDefAndNotNull(esriJSONObject.spatialReference.wkid)) {
var crs = esriJSONObject.spatialReference.wkid; var crs = esriJSONObject.spatialReference.wkid;
return ol.proj.get('EPSG:' + crs); return ol.proj.get('EPSG:' + crs);
} else { } else {
@@ -591,8 +588,7 @@ ol.format.EsriJSON.prototype.readProjectionFromObject = function(object) {
*/ */
ol.format.EsriJSON.writeGeometry_ = function(geometry, opt_options) { ol.format.EsriJSON.writeGeometry_ = function(geometry, opt_options) {
var geometryWriter = ol.format.EsriJSON.GEOMETRY_WRITERS_[geometry.getType()]; var geometryWriter = ol.format.EsriJSON.GEOMETRY_WRITERS_[geometry.getType()];
goog.asserts.assert(goog.isDef(geometryWriter), goog.asserts.assert(geometryWriter, 'geometryWriter should be defined');
'geometryWriter should be defined');
return geometryWriter(/** @type {ol.geom.Geometry} */ ( return geometryWriter(/** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions(geometry, true, opt_options)), ol.format.Feature.transformWithOptions(geometry, true, opt_options)),
opt_options); opt_options);
@@ -651,18 +647,18 @@ ol.format.EsriJSON.prototype.writeFeatureObject = function(
opt_options = this.adaptOptions(opt_options); opt_options = this.adaptOptions(opt_options);
var object = {}; var object = {};
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
object['geometry'] = object['geometry'] =
ol.format.EsriJSON.writeGeometry_(geometry, opt_options); ol.format.EsriJSON.writeGeometry_(geometry, opt_options);
} }
var properties = feature.getProperties(); var properties = feature.getProperties();
goog.object.remove(properties, feature.getGeometryName()); delete properties[feature.getGeometryName()];
if (!goog.object.isEmpty(properties)) { if (!goog.object.isEmpty(properties)) {
object['attributes'] = properties; object['attributes'] = properties;
} else { } else {
object['attributes'] = {}; object['attributes'] = {};
} }
if (goog.isDef(opt_options) && goog.isDef(opt_options.featureProjection)) { if (opt_options && opt_options.featureProjection) {
object['spatialReference'] = /** @type {EsriJSONCRS} */({ object['spatialReference'] = /** @type {EsriJSONCRS} */({
wkid: ol.proj.get( wkid: ol.proj.get(
opt_options.featureProjection).getCode().split(':').pop() opt_options.featureProjection).getCode().split(':').pop()

View File

@@ -42,9 +42,9 @@ ol.format.Feature.prototype.getExtensions = goog.abstractMethod;
*/ */
ol.format.Feature.prototype.getReadOptions = function(source, opt_options) { ol.format.Feature.prototype.getReadOptions = function(source, opt_options) {
var options; var options;
if (goog.isDef(opt_options)) { if (opt_options) {
options = { options = {
dataProjection: goog.isDef(opt_options.dataProjection) ? dataProjection: opt_options.dataProjection ?
opt_options.dataProjection : this.readProjection(source), opt_options.dataProjection : this.readProjection(source),
featureProjection: opt_options.featureProjection featureProjection: opt_options.featureProjection
}; };
@@ -64,10 +64,10 @@ ol.format.Feature.prototype.getReadOptions = function(source, opt_options) {
*/ */
ol.format.Feature.prototype.adaptOptions = function(options) { ol.format.Feature.prototype.adaptOptions = function(options) {
var updatedOptions; var updatedOptions;
if (goog.isDef(options)) { if (options) {
updatedOptions = { updatedOptions = {
featureProjection: options.featureProjection, featureProjection: options.featureProjection,
dataProjection: goog.isDefAndNotNull(options.dataProjection) ? dataProjection: options.dataProjection ?
options.dataProjection : this.defaultDataProjection, options.dataProjection : this.defaultDataProjection,
rightHanded: options.rightHanded rightHanded: options.rightHanded
}; };
@@ -161,11 +161,11 @@ ol.format.Feature.prototype.writeGeometry = goog.abstractMethod;
*/ */
ol.format.Feature.transformWithOptions = function( ol.format.Feature.transformWithOptions = function(
geometry, write, opt_options) { geometry, write, opt_options) {
var featureProjection = goog.isDef(opt_options) ? var featureProjection = opt_options ?
ol.proj.get(opt_options.featureProjection) : null; ol.proj.get(opt_options.featureProjection) : null;
var dataProjection = goog.isDef(opt_options) ? var dataProjection = opt_options ?
ol.proj.get(opt_options.dataProjection) : null; ol.proj.get(opt_options.dataProjection) : null;
if (!goog.isNull(featureProjection) && !goog.isNull(dataProjection) && if (featureProjection && dataProjection &&
!ol.proj.equivalent(featureProjection, dataProjection)) { !ol.proj.equivalent(featureProjection, dataProjection)) {
if (geometry instanceof ol.geom.Geometry) { if (geometry instanceof ol.geom.Geometry) {
return (write ? geometry.clone() : geometry).transform( return (write ? geometry.clone() : geometry).transform(

View File

@@ -3,7 +3,6 @@
goog.provide('ol.format.GeoJSON'); goog.provide('ol.format.GeoJSON');
goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol.Feature'); goog.require('ol.Feature');
@@ -31,7 +30,7 @@ goog.require('ol.proj');
*/ */
ol.format.GeoJSON = function(opt_options) { ol.format.GeoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -39,7 +38,7 @@ ol.format.GeoJSON = function(opt_options) {
* @inheritDoc * @inheritDoc
*/ */
this.defaultDataProjection = ol.proj.get( this.defaultDataProjection = ol.proj.get(
goog.isDefAndNotNull(options.defaultDataProjection) ? options.defaultDataProjection ?
options.defaultDataProjection : 'EPSG:4326'); options.defaultDataProjection : 'EPSG:4326');
@@ -69,12 +68,11 @@ ol.format.GeoJSON.EXTENSIONS_ = ['.geojson'];
* @return {ol.geom.Geometry} Geometry. * @return {ol.geom.Geometry} Geometry.
*/ */
ol.format.GeoJSON.readGeometry_ = function(object, opt_options) { ol.format.GeoJSON.readGeometry_ = function(object, opt_options) {
if (goog.isNull(object)) { if (!object) {
return null; return null;
} }
var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type]; var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];
goog.asserts.assert(goog.isDef(geometryReader), goog.asserts.assert(geometryReader, 'geometryReader should be defined');
'geometryReader should be defined');
return /** @type {ol.geom.Geometry} */ ( return /** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions( ol.format.Feature.transformWithOptions(
geometryReader(object), false, opt_options)); geometryReader(object), false, opt_options));
@@ -91,7 +89,7 @@ ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(
object, opt_options) { object, opt_options) {
goog.asserts.assert(object.type == 'GeometryCollection', goog.asserts.assert(object.type == 'GeometryCollection',
'object.type should be GeometryCollection'); 'object.type should be GeometryCollection');
var geometries = goog.array.map(object.geometries, var geometries = object.geometries.map(
/** /**
* @param {GeoJSONGeometry} geometry Geometry. * @param {GeoJSONGeometry} geometry Geometry.
* @return {ol.geom.Geometry} geometry Geometry. * @return {ol.geom.Geometry} geometry Geometry.
@@ -183,8 +181,7 @@ ol.format.GeoJSON.readPolygonGeometry_ = function(object) {
*/ */
ol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) { ol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) {
var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()]; var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];
goog.asserts.assert(goog.isDef(geometryWriter), goog.asserts.assert(geometryWriter, 'geometryWriter should be defined');
'geometryWriter should be defined');
return geometryWriter(/** @type {ol.geom.Geometry} */ ( return geometryWriter(/** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions(geometry, true, opt_options)), ol.format.Feature.transformWithOptions(geometry, true, opt_options)),
opt_options); opt_options);
@@ -214,10 +211,9 @@ ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(
geometry, opt_options) { geometry, opt_options) {
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection, goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection,
'geometry should be an ol.geom.GeometryCollection'); 'geometry should be an ol.geom.GeometryCollection');
var geometries = goog.array.map( var geometries = geometry.getGeometriesArray().map(function(geometry) {
geometry.getGeometriesArray(), function(geometry) { return ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
return ol.format.GeoJSON.writeGeometry_(geometry, opt_options); });
});
return /** @type {GeoJSONGeometryCollection} */ ({ return /** @type {GeoJSONGeometryCollection} */ ({
type: 'GeometryCollection', type: 'GeometryCollection',
geometries: geometries geometries: geometries
@@ -284,7 +280,7 @@ ol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry, opt_options) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon, goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon,
'geometry should be an ol.geom.MultiPolygon'); 'geometry should be an ol.geom.MultiPolygon');
var right; var right;
if (goog.isDef(opt_options)) { if (opt_options) {
right = opt_options.rightHanded; right = opt_options.rightHanded;
} }
return /** @type {GeoJSONGeometry} */ ({ return /** @type {GeoJSONGeometry} */ ({
@@ -320,7 +316,7 @@ ol.format.GeoJSON.writePolygonGeometry_ = function(geometry, opt_options) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon, goog.asserts.assertInstanceof(geometry, ol.geom.Polygon,
'geometry should be an ol.geom.Polygon'); 'geometry should be an ol.geom.Polygon');
var right; var right;
if (goog.isDef(opt_options)) { if (opt_options) {
right = opt_options.rightHanded; right = opt_options.rightHanded;
} }
return /** @type {GeoJSONGeometry} */ ({ return /** @type {GeoJSONGeometry} */ ({
@@ -408,14 +404,14 @@ ol.format.GeoJSON.prototype.readFeatureFromObject = function(
var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry, var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry,
opt_options); opt_options);
var feature = new ol.Feature(); var feature = new ol.Feature();
if (goog.isDef(this.geometryName_)) { if (this.geometryName_) {
feature.setGeometryName(this.geometryName_); feature.setGeometryName(this.geometryName_);
} }
feature.setGeometry(geometry); feature.setGeometry(geometry);
if (goog.isDef(geoJSONFeature.id)) { if (geoJSONFeature.id) {
feature.setId(geoJSONFeature.id); feature.setId(geoJSONFeature.id);
} }
if (goog.isDef(geoJSONFeature.properties)) { if (geoJSONFeature.properties) {
feature.setProperties(geoJSONFeature.properties); feature.setProperties(geoJSONFeature.properties);
} }
return feature; return feature;
@@ -488,7 +484,7 @@ ol.format.GeoJSON.prototype.readProjection;
ol.format.GeoJSON.prototype.readProjectionFromObject = function(object) { ol.format.GeoJSON.prototype.readProjectionFromObject = function(object) {
var geoJSONObject = /** @type {GeoJSONObject} */ (object); var geoJSONObject = /** @type {GeoJSONObject} */ (object);
var crs = geoJSONObject.crs; var crs = geoJSONObject.crs;
if (goog.isDefAndNotNull(crs)) { if (crs) {
if (crs.type == 'name') { if (crs.type == 'name') {
return ol.proj.get(crs.properties.name); return ol.proj.get(crs.properties.name);
} else if (crs.type == 'EPSG') { } else if (crs.type == 'EPSG') {
@@ -534,18 +530,18 @@ ol.format.GeoJSON.prototype.writeFeatureObject = function(
'type': 'Feature' 'type': 'Feature'
}; };
var id = feature.getId(); var id = feature.getId();
if (goog.isDefAndNotNull(id)) { if (id) {
object['id'] = id; object['id'] = id;
} }
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
object['geometry'] = object['geometry'] =
ol.format.GeoJSON.writeGeometry_(geometry, opt_options); ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
} else { } else {
object['geometry'] = null; object['geometry'] = null;
} }
var properties = feature.getProperties(); var properties = feature.getProperties();
goog.object.remove(properties, feature.getGeometryName()); delete properties[feature.getGeometryName()];
if (!goog.object.isEmpty(properties)) { if (!goog.object.isEmpty(properties)) {
object['properties'] = properties; object['properties'] = properties;
} else { } else {

View File

@@ -22,7 +22,7 @@ goog.require('ol.xml');
*/ */
ol.format.GML2 = function(opt_options) { ol.format.GML2 = function(opt_options) {
var options = /** @type {olx.format.GMLOptions} */ var options = /** @type {olx.format.GMLOptions} */
(goog.isDef(opt_options) ? opt_options : {}); (opt_options ? opt_options : {});
goog.base(this, options); goog.base(this, options);
@@ -33,7 +33,7 @@ ol.format.GML2 = function(opt_options) {
/** /**
* @inheritDoc * @inheritDoc
*/ */
this.schemaLocation = goog.isDef(options.schemaLocation) ? this.schemaLocation = options.schemaLocation ?
options.schemaLocation : ol.format.GML2.schemaLocation_; options.schemaLocation : ol.format.GML2.schemaLocation_;
}; };
@@ -62,20 +62,20 @@ ol.format.GML2.prototype.readFlatCoordinates_ = function(node, objectStack) {
var containerSrs = context['srsName']; var containerSrs = context['srsName'];
var containerDimension = node.parentNode.getAttribute('srsDimension'); var containerDimension = node.parentNode.getAttribute('srsDimension');
var axisOrientation = 'enu'; var axisOrientation = 'enu';
if (!goog.isNull(containerSrs)) { if (containerSrs) {
var proj = ol.proj.get(containerSrs); var proj = ol.proj.get(containerSrs);
axisOrientation = proj.getAxisOrientation(); axisOrientation = proj.getAxisOrientation();
} }
var coords = s.split(/[\s,]+/); var coords = s.split(/[\s,]+/);
// The "dimension" attribute is from the GML 3.0.1 spec. // The "dimension" attribute is from the GML 3.0.1 spec.
var dim = 2; var dim = 2;
if (!goog.isNull(node.getAttribute('srsDimension'))) { if (node.getAttribute('srsDimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString( dim = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('srsDimension')); node.getAttribute('srsDimension'));
} else if (!goog.isNull(node.getAttribute('dimension'))) { } else if (node.getAttribute('dimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString( dim = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('dimension')); node.getAttribute('dimension'));
} else if (!goog.isNull(containerDimension)) { } else if (containerDimension) {
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension); dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
} }
var x, y, z; var x, y, z;
@@ -127,7 +127,7 @@ ol.format.GML2.prototype.innerBoundaryIsParser_ =
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
this.RING_PARSERS, node, objectStack, this); this.RING_PARSERS, node, objectStack, this);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),
@@ -153,7 +153,7 @@ ol.format.GML2.prototype.outerBoundaryIsParser_ =
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
this.RING_PARSERS, node, objectStack, this); this.RING_PARSERS, node, objectStack, this);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),

View File

@@ -5,6 +5,7 @@ goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.format.Feature'); goog.require('ol.format.Feature');
@@ -37,7 +38,7 @@ goog.require('ol.xml');
*/ */
ol.format.GML3 = function(opt_options) { ol.format.GML3 = function(opt_options) {
var options = /** @type {olx.format.GMLOptions} */ var options = /** @type {olx.format.GMLOptions} */
(goog.isDef(opt_options) ? opt_options : {}); (opt_options ? opt_options : {});
goog.base(this, options); goog.base(this, options);
@@ -45,34 +46,32 @@ ol.format.GML3 = function(opt_options) {
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.surface_ = goog.isDef(options.surface) ? this.surface_ = options.surface !== undefined ? options.surface : false;
options.surface : false;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.curve_ = goog.isDef(options.curve) ? this.curve_ = options.curve !== undefined ? options.curve : false;
options.curve : false;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.multiCurve_ = goog.isDef(options.multiCurve) ? this.multiCurve_ = options.multiCurve !== undefined ?
options.multiCurve : true; options.multiCurve : true;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.multiSurface_ = goog.isDef(options.multiSurface) ? this.multiSurface_ = options.multiSurface !== undefined ?
options.multiSurface : true; options.multiSurface : true;
/** /**
* @inheritDoc * @inheritDoc
*/ */
this.schemaLocation = goog.isDef(options.schemaLocation) ? this.schemaLocation = options.schemaLocation ?
options.schemaLocation : ol.format.GML3.schemaLocation_; options.schemaLocation : ol.format.GML3.schemaLocation_;
}; };
@@ -103,7 +102,7 @@ ol.format.GML3.prototype.readMultiCurve_ = function(node, objectStack) {
var lineStrings = ol.xml.pushParseAndPop( var lineStrings = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.LineString>} */ ([]), /** @type {Array.<ol.geom.LineString>} */ ([]),
this.MULTICURVE_PARSERS_, node, objectStack, this); this.MULTICURVE_PARSERS_, node, objectStack, this);
if (goog.isDef(lineStrings)) { if (lineStrings) {
var multiLineString = new ol.geom.MultiLineString(null); var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(lineStrings); multiLineString.setLineStrings(lineStrings);
return multiLineString; return multiLineString;
@@ -127,7 +126,7 @@ ol.format.GML3.prototype.readMultiSurface_ = function(node, objectStack) {
var polygons = ol.xml.pushParseAndPop( var polygons = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.Polygon>} */ ([]), /** @type {Array.<ol.geom.Polygon>} */ ([]),
this.MULTISURFACE_PARSERS_, node, objectStack, this); this.MULTISURFACE_PARSERS_, node, objectStack, this);
if (goog.isDef(polygons)) { if (polygons) {
var multiPolygon = new ol.geom.MultiPolygon(null); var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setPolygons(polygons); multiPolygon.setPolygons(polygons);
return multiPolygon; return multiPolygon;
@@ -251,7 +250,7 @@ ol.format.GML3.prototype.interiorParser_ = function(node, objectStack) {
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
this.RING_PARSERS, node, objectStack, this); this.RING_PARSERS, node, objectStack, this);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),
@@ -276,7 +275,7 @@ ol.format.GML3.prototype.exteriorParser_ = function(node, objectStack) {
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
this.RING_PARSERS, node, objectStack, this); this.RING_PARSERS, node, objectStack, this);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),
@@ -302,8 +301,7 @@ ol.format.GML3.prototype.readSurface_ = function(node, objectStack) {
var flatLinearRings = ol.xml.pushParseAndPop( var flatLinearRings = ol.xml.pushParseAndPop(
/** @type {Array.<Array.<number>>} */ ([null]), /** @type {Array.<Array.<number>>} */ ([null]),
this.SURFACE_PARSERS_, node, objectStack, this); this.SURFACE_PARSERS_, node, objectStack, this);
if (goog.isDef(flatLinearRings) && if (flatLinearRings && flatLinearRings[0]) {
!goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null); var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0]; var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length]; var ends = [flatCoordinates.length];
@@ -334,7 +332,7 @@ ol.format.GML3.prototype.readCurve_ = function(node, objectStack) {
var flatCoordinates = ol.xml.pushParseAndPop( var flatCoordinates = ol.xml.pushParseAndPop(
/** @type {Array.<number>} */ ([null]), /** @type {Array.<number>} */ ([null]),
this.CURVE_PARSERS_, node, objectStack, this); this.CURVE_PARSERS_, node, objectStack, this);
if (goog.isDef(flatCoordinates)) { if (flatCoordinates) {
var lineString = new ol.geom.LineString(null); var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return lineString; return lineString;
@@ -387,7 +385,7 @@ ol.format.GML3.prototype.readFlatPos_ = function(node, objectStack) {
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var containerSrs = context['srsName']; var containerSrs = context['srsName'];
var axisOrientation = 'enu'; var axisOrientation = 'enu';
if (!goog.isNull(containerSrs)) { if (containerSrs) {
var proj = ol.proj.get(containerSrs); var proj = ol.proj.get(containerSrs);
axisOrientation = proj.getAxisOrientation(); axisOrientation = proj.getAxisOrientation();
} }
@@ -424,20 +422,20 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
var containerSrs = context['srsName']; var containerSrs = context['srsName'];
var containerDimension = node.parentNode.getAttribute('srsDimension'); var containerDimension = node.parentNode.getAttribute('srsDimension');
var axisOrientation = 'enu'; var axisOrientation = 'enu';
if (!goog.isNull(containerSrs)) { if (containerSrs) {
var proj = ol.proj.get(containerSrs); var proj = ol.proj.get(containerSrs);
axisOrientation = proj.getAxisOrientation(); axisOrientation = proj.getAxisOrientation();
} }
var coords = s.split(/\s+/); var coords = s.split(/\s+/);
// The "dimension" attribute is from the GML 3.0.1 spec. // The "dimension" attribute is from the GML 3.0.1 spec.
var dim = 2; var dim = 2;
if (!goog.isNull(node.getAttribute('srsDimension'))) { if (node.getAttribute('srsDimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString( dim = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('srsDimension')); node.getAttribute('srsDimension'));
} else if (!goog.isNull(node.getAttribute('dimension'))) { } else if (node.getAttribute('dimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString( dim = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('dimension')); node.getAttribute('dimension'));
} else if (!goog.isNull(containerDimension)) { } else if (containerDimension) {
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension); dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
} }
var x, y, z; var x, y, z;
@@ -645,7 +643,7 @@ ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
var axisOrientation = 'enu'; var axisOrientation = 'enu';
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
axisOrientation = ol.proj.get(srsName).getAxisOrientation(); axisOrientation = ol.proj.get(srsName).getAxisOrientation();
} }
var point = value.getCoordinates(); var point = value.getCoordinates();
@@ -668,7 +666,7 @@ ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
*/ */
ol.format.GML3.prototype.getCoords_ = function(point, opt_srsName) { ol.format.GML3.prototype.getCoords_ = function(point, opt_srsName) {
var axisOrientation = 'enu'; var axisOrientation = 'enu';
if (goog.isDefAndNotNull(opt_srsName)) { if (opt_srsName) {
axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation(); axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation();
} }
return ((axisOrientation.substr(0, 2) === 'en') ? return ((axisOrientation.substr(0, 2) === 'en') ?
@@ -710,7 +708,7 @@ ol.format.GML3.prototype.writePoint_ = function(node, geometry, objectStack) {
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var pos = ol.xml.createElementNS(node.namespaceURI, 'pos'); var pos = ol.xml.createElementNS(node.namespaceURI, 'pos');
@@ -741,7 +739,7 @@ ol.format.GML3.prototype.writeEnvelope = function(node, extent, objectStack) {
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (goog.isDef(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var keys = ['lowerCorner', 'upperCorner']; var keys = ['lowerCorner', 'upperCorner'];
@@ -765,7 +763,7 @@ ol.format.GML3.prototype.writeLinearRing_ =
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var posList = ol.xml.createElementNS(node.namespaceURI, 'posList'); var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');
@@ -787,11 +785,11 @@ ol.format.GML3.prototype.RING_NODE_FACTORY_ =
var parentNode = context.node; var parentNode = context.node;
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var exteriorWritten = context['exteriorWritten']; var exteriorWritten = context['exteriorWritten'];
if (!goog.isDef(exteriorWritten)) { if (exteriorWritten === undefined) {
context['exteriorWritten'] = true; context['exteriorWritten'] = true;
} }
return ol.xml.createElementNS(parentNode.namespaceURI, return ol.xml.createElementNS(parentNode.namespaceURI,
goog.isDef(exteriorWritten) ? 'interior' : 'exterior'); exteriorWritten !== undefined ? 'interior' : 'exterior');
}; };
@@ -806,7 +804,7 @@ ol.format.GML3.prototype.writeSurfaceOrPolygon_ =
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (node.nodeName !== 'PolygonPatch' && goog.isDefAndNotNull(srsName)) { if (node.nodeName !== 'PolygonPatch' && srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') { if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {
@@ -836,8 +834,7 @@ ol.format.GML3.prototype.writeCurveOrLineString_ =
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (node.nodeName !== 'LineStringSegment' && if (node.nodeName !== 'LineStringSegment' && srsName) {
goog.isDefAndNotNull(srsName)) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
if (node.nodeName === 'LineString' || if (node.nodeName === 'LineString' ||
@@ -866,7 +863,7 @@ ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_ =
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
var surface = context['surface']; var surface = context['surface'];
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var polygons = geometry.getPolygons(); var polygons = geometry.getPolygons();
@@ -888,7 +885,7 @@ ol.format.GML3.prototype.writeMultiPoint_ = function(node, geometry,
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var points = geometry.getPoints(); var points = geometry.getPoints();
@@ -911,7 +908,7 @@ ol.format.GML3.prototype.writeMultiCurveOrLineString_ =
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var srsName = context['srsName']; var srsName = context['srsName'];
var curve = context['curve']; var curve = context['curve'];
if (goog.isDefAndNotNull(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
var lines = geometry.getLineStrings(); var lines = geometry.getLineStrings();
@@ -947,7 +944,7 @@ ol.format.GML3.prototype.writeSurfaceOrPolygonMember_ =
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var child = this.GEOMETRY_NODE_FACTORY_( var child = this.GEOMETRY_NODE_FACTORY_(
polygon, objectStack); polygon, objectStack);
if (goog.isDef(child)) { if (child) {
node.appendChild(child); node.appendChild(child);
this.writeSurfaceOrPolygon_(child, polygon, objectStack); this.writeSurfaceOrPolygon_(child, polygon, objectStack);
} }
@@ -979,7 +976,7 @@ ol.format.GML3.prototype.writeLineStringOrCurveMember_ =
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack); var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);
if (goog.isDef(child)) { if (child) {
node.appendChild(child); node.appendChild(child);
this.writeCurveOrLineString_(child, line, objectStack); this.writeCurveOrLineString_(child, line, objectStack);
} }
@@ -1028,7 +1025,7 @@ ol.format.GML3.prototype.writeGeometryElement =
item.node = node; item.node = node;
var value; var value;
if (goog.isArray(geometry)) { if (goog.isArray(geometry)) {
if (goog.isDef(context.dataProjection)) { if (context.dataProjection) {
value = ol.proj.transformExtent( value = ol.proj.transformExtent(
geometry, context.featureProjection, context.dataProjection); geometry, context.featureProjection, context.dataProjection);
} else { } else {
@@ -1055,14 +1052,14 @@ ol.format.GML3.prototype.writeGeometryElement =
ol.format.GML3.prototype.writeFeatureElement = ol.format.GML3.prototype.writeFeatureElement =
function(node, feature, objectStack) { function(node, feature, objectStack) {
var fid = feature.getId(); var fid = feature.getId();
if (goog.isDef(fid)) { if (fid) {
node.setAttribute('fid', fid); node.setAttribute('fid', fid);
} }
var context = objectStack[objectStack.length - 1]; var context = objectStack[objectStack.length - 1];
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var featureNS = context['featureNS']; var featureNS = context['featureNS'];
var geometryName = feature.getGeometryName(); var geometryName = feature.getGeometryName();
if (!goog.isDef(context.serializers)) { if (!context.serializers) {
context.serializers = {}; context.serializers = {};
context.serializers[featureNS] = {}; context.serializers[featureNS] = {};
} }
@@ -1070,10 +1067,10 @@ ol.format.GML3.prototype.writeFeatureElement =
var keys = [], values = []; var keys = [], values = [];
for (var key in properties) { for (var key in properties) {
var value = properties[key]; var value = properties[key];
if (!goog.isNull(value)) { if (value !== null) {
keys.push(key); keys.push(key);
values.push(value); values.push(value);
if (key == geometryName) { if (key == geometryName || value instanceof ol.geom.Geometry) {
if (!(key in context.serializers[featureNS])) { if (!(key in context.serializers[featureNS])) {
context.serializers[featureNS][key] = ol.xml.makeChildAppender( context.serializers[featureNS][key] = ol.xml.makeChildAppender(
this.writeGeometryElement, this); this.writeGeometryElement, this);
@@ -1293,7 +1290,7 @@ ol.format.GML3.prototype.writeGeometryNode = function(geometry, opt_options) {
var context = {node: geom, srsName: this.srsName, var context = {node: geom, srsName: this.srsName,
curve: this.curve_, surface: this.surface_, curve: this.curve_, surface: this.surface_,
multiSurface: this.multiSurface_, multiCurve: this.multiCurve_}; multiSurface: this.multiSurface_, multiCurve: this.multiCurve_};
if (goog.isDef(opt_options)) { if (opt_options) {
goog.object.extend(context, opt_options); goog.object.extend(context, opt_options);
} }
this.writeGeometryElement(geom, geometry, [context]); this.writeGeometryElement(geom, geometry, [context]);
@@ -1336,7 +1333,7 @@ ol.format.GML3.prototype.writeFeaturesNode = function(features, opt_options) {
featureNS: this.featureNS, featureNS: this.featureNS,
featureType: this.featureType featureType: this.featureType
}; };
if (goog.isDef(opt_options)) { if (opt_options) {
goog.object.extend(context, opt_options); goog.object.extend(context, opt_options);
} }
this.writeFeatureMembers_(node, features, [context]); this.writeFeatureMembers_(node, features, [context]);

View File

@@ -41,7 +41,7 @@ goog.require('ol.xml');
*/ */
ol.format.GMLBase = function(opt_options) { ol.format.GMLBase = function(opt_options) {
var options = /** @type {olx.format.GMLOptions} */ var options = /** @type {olx.format.GMLOptions} */
(goog.isDef(opt_options) ? opt_options : {}); (opt_options ? opt_options : {});
/** /**
* @protected * @protected
@@ -116,13 +116,13 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
var featureType = context['featureType']; var featureType = context['featureType'];
var featureNS = context['featureNS']; var featureNS = context['featureNS'];
var i, ii, prefix = 'p', defaultPrefix = 'p0'; var i, ii, prefix = 'p', defaultPrefix = 'p0';
if (!goog.isDef(featureType) && goog.isDefAndNotNull(node.childNodes)) { if (!featureType && node.childNodes) {
featureType = [], featureNS = {}; featureType = [], featureNS = {};
for (i = 0, ii = node.childNodes.length; i < ii; ++i) { for (i = 0, ii = node.childNodes.length; i < ii; ++i) {
var child = node.childNodes[i]; var child = node.childNodes[i];
if (child.nodeType === 1) { if (child.nodeType === 1) {
var ft = child.nodeName.split(':').pop(); var ft = child.nodeName.split(':').pop();
if (goog.array.indexOf(featureType, ft) === -1) { if (featureType.indexOf(ft) === -1) {
var key; var key;
if (!goog.object.contains(featureNS, child.namespaceURI)) { if (!goog.object.contains(featureNS, child.namespaceURI)) {
key = prefix + goog.object.getCount(featureNS); key = prefix + goog.object.getCount(featureNS);
@@ -162,7 +162,7 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
} }
features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack); features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);
} }
if (!goog.isDef(features)) { if (!features) {
features = []; features = [];
} }
return features; return features;
@@ -180,7 +180,7 @@ ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
context['srsName'] = node.firstElementChild.getAttribute('srsName'); context['srsName'] = node.firstElementChild.getAttribute('srsName');
var geometry = ol.xml.pushParseAndPop(/** @type {ol.geom.Geometry} */(null), var geometry = ol.xml.pushParseAndPop(/** @type {ol.geom.Geometry} */(null),
this.GEOMETRY_PARSERS_, node, objectStack, this); this.GEOMETRY_PARSERS_, node, objectStack, this);
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
return /** @type {ol.geom.Geometry} */ ( return /** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions(geometry, false, context)); ol.format.Feature.transformWithOptions(geometry, false, context));
} else { } else {
@@ -199,8 +199,7 @@ ol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {
var fid = node.getAttribute('fid') || var fid = node.getAttribute('fid') ||
ol.xml.getAttributeNS(node, ol.format.GMLBase.GMLNS, 'id'); ol.xml.getAttributeNS(node, ol.format.GMLBase.GMLNS, 'id');
var values = {}, geometryName; var values = {}, geometryName;
for (n = node.firstElementChild; !goog.isNull(n); for (n = node.firstElementChild; n; n = n.nextElementSibling) {
n = n.nextElementSibling) {
var localName = ol.xml.getLocalName(n); var localName = ol.xml.getLocalName(n);
// Assume attribute elements have one child node and that the child // Assume attribute elements have one child node and that the child
// is a text or CDATA node (to be treated as text). // is a text or CDATA node (to be treated as text).
@@ -222,7 +221,7 @@ ol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {
} }
} }
var feature = new ol.Feature(values); var feature = new ol.Feature(values);
if (goog.isDef(geometryName)) { if (geometryName) {
feature.setGeometryName(geometryName); feature.setGeometryName(geometryName);
} }
if (fid) { if (fid) {
@@ -243,7 +242,7 @@ ol.format.GMLBase.prototype.readPoint = function(node, objectStack) {
goog.asserts.assert(node.localName == 'Point', 'localName should be Point'); goog.asserts.assert(node.localName == 'Point', 'localName should be Point');
var flatCoordinates = var flatCoordinates =
this.readFlatCoordinatesFromNode_(node, objectStack); this.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDefAndNotNull(flatCoordinates)) { if (flatCoordinates) {
var point = new ol.geom.Point(null); var point = new ol.geom.Point(null);
goog.asserts.assert(flatCoordinates.length == 3, goog.asserts.assert(flatCoordinates.length == 3,
'flatCoordinates should have a length of 3'); 'flatCoordinates should have a length of 3');
@@ -266,7 +265,7 @@ ol.format.GMLBase.prototype.readMultiPoint = function(node, objectStack) {
var coordinates = ol.xml.pushParseAndPop( var coordinates = ol.xml.pushParseAndPop(
/** @type {Array.<Array.<number>>} */ ([]), /** @type {Array.<Array.<number>>} */ ([]),
this.MULTIPOINT_PARSERS_, node, objectStack, this); this.MULTIPOINT_PARSERS_, node, objectStack, this);
if (goog.isDef(coordinates)) { if (coordinates) {
return new ol.geom.MultiPoint(coordinates); return new ol.geom.MultiPoint(coordinates);
} else { } else {
return undefined; return undefined;
@@ -287,7 +286,7 @@ ol.format.GMLBase.prototype.readMultiLineString = function(node, objectStack) {
var lineStrings = ol.xml.pushParseAndPop( var lineStrings = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.LineString>} */ ([]), /** @type {Array.<ol.geom.LineString>} */ ([]),
this.MULTILINESTRING_PARSERS_, node, objectStack, this); this.MULTILINESTRING_PARSERS_, node, objectStack, this);
if (goog.isDef(lineStrings)) { if (lineStrings) {
var multiLineString = new ol.geom.MultiLineString(null); var multiLineString = new ol.geom.MultiLineString(null);
multiLineString.setLineStrings(lineStrings); multiLineString.setLineStrings(lineStrings);
return multiLineString; return multiLineString;
@@ -310,7 +309,7 @@ ol.format.GMLBase.prototype.readMultiPolygon = function(node, objectStack) {
var polygons = ol.xml.pushParseAndPop( var polygons = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.Polygon>} */ ([]), /** @type {Array.<ol.geom.Polygon>} */ ([]),
this.MULTIPOLYGON_PARSERS_, node, objectStack, this); this.MULTIPOLYGON_PARSERS_, node, objectStack, this);
if (goog.isDef(polygons)) { if (polygons) {
var multiPolygon = new ol.geom.MultiPolygon(null); var multiPolygon = new ol.geom.MultiPolygon(null);
multiPolygon.setPolygons(polygons); multiPolygon.setPolygons(polygons);
return multiPolygon; return multiPolygon;
@@ -382,7 +381,7 @@ ol.format.GMLBase.prototype.readLineString = function(node, objectStack) {
'localName should be LineString'); 'localName should be LineString');
var flatCoordinates = var flatCoordinates =
this.readFlatCoordinatesFromNode_(node, objectStack); this.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDefAndNotNull(flatCoordinates)) { if (flatCoordinates) {
var lineString = new ol.geom.LineString(null); var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return lineString; return lineString;
@@ -406,7 +405,7 @@ ol.format.GMLBase.prototype.readFlatLinearRing_ = function(node, objectStack) {
var ring = ol.xml.pushParseAndPop(/** @type {Array.<number>} */(null), var ring = ol.xml.pushParseAndPop(/** @type {Array.<number>} */(null),
this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,
objectStack, this); objectStack, this);
if (goog.isDefAndNotNull(ring)) { if (ring) {
return ring; return ring;
} else { } else {
return undefined; return undefined;
@@ -426,7 +425,7 @@ ol.format.GMLBase.prototype.readLinearRing = function(node, objectStack) {
'localName should be LinearRing'); 'localName should be LinearRing');
var flatCoordinates = var flatCoordinates =
this.readFlatCoordinatesFromNode_(node, objectStack); this.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDef(flatCoordinates)) { if (flatCoordinates) {
var ring = new ol.geom.LinearRing(null); var ring = new ol.geom.LinearRing(null);
ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
return ring; return ring;
@@ -449,8 +448,7 @@ ol.format.GMLBase.prototype.readPolygon = function(node, objectStack) {
var flatLinearRings = ol.xml.pushParseAndPop( var flatLinearRings = ol.xml.pushParseAndPop(
/** @type {Array.<Array.<number>>} */ ([null]), /** @type {Array.<Array.<number>>} */ ([null]),
this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this); this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);
if (goog.isDef(flatLinearRings) && if (flatLinearRings && flatLinearRings[0]) {
!goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null); var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0]; var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length]; var ends = [flatCoordinates.length];
@@ -588,8 +586,8 @@ ol.format.GMLBase.prototype.RING_PARSERS = Object({
ol.format.GMLBase.prototype.readGeometryFromNode = ol.format.GMLBase.prototype.readGeometryFromNode =
function(node, opt_options) { function(node, opt_options) {
var geometry = this.readGeometryElement(node, var geometry = this.readGeometryElement(node,
[this.getReadOptions(node, goog.isDef(opt_options) ? opt_options : {})]); [this.getReadOptions(node, opt_options ? opt_options : {})]);
return goog.isDef(geometry) ? geometry : null; return geometry ? geometry : null;
}; };
@@ -614,7 +612,7 @@ ol.format.GMLBase.prototype.readFeaturesFromNode =
featureType: this.featureType, featureType: this.featureType,
featureNS: this.featureNS featureNS: this.featureNS
}; };
if (goog.isDef(opt_options)) { if (opt_options) {
goog.object.extend(options, this.getReadOptions(node, opt_options)); goog.object.extend(options, this.getReadOptions(node, opt_options));
} }
return this.readFeaturesInternal(node, [options]); return this.readFeaturesInternal(node, [options]);
@@ -625,6 +623,6 @@ ol.format.GMLBase.prototype.readFeaturesFromNode =
* @inheritDoc * @inheritDoc
*/ */
ol.format.GMLBase.prototype.readProjectionFromNode = function(node) { ol.format.GMLBase.prototype.readProjectionFromNode = function(node) {
return ol.proj.get(goog.isDef(this.srsName_) ? this.srsName_ : return ol.proj.get(this.srsName_ ? this.srsName_ :
node.firstElementChild.getAttribute('srsName')); node.firstElementChild.getAttribute('srsName'));
}; };

View File

@@ -1,10 +1,9 @@
goog.provide('ol.format.GPX'); goog.provide('ol.format.GPX');
goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.object');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.array');
goog.require('ol.format.Feature'); goog.require('ol.format.Feature');
goog.require('ol.format.XMLFeature'); goog.require('ol.format.XMLFeature');
goog.require('ol.format.XSD'); goog.require('ol.format.XSD');
@@ -28,7 +27,7 @@ goog.require('ol.xml');
*/ */
ol.format.GPX = function(opt_options) { ol.format.GPX = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -71,17 +70,15 @@ ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) {
flatCoordinates.push( flatCoordinates.push(
parseFloat(node.getAttribute('lon')), parseFloat(node.getAttribute('lon')),
parseFloat(node.getAttribute('lat'))); parseFloat(node.getAttribute('lat')));
if (goog.object.containsKey(values, 'ele')) { if ('ele' in values) {
flatCoordinates.push( flatCoordinates.push(/** @type {number} */ (values['ele']));
/** @type {number} */ (values['ele'])); delete values['ele'];
goog.object.remove(values, 'ele');
} else { } else {
flatCoordinates.push(0); flatCoordinates.push(0);
} }
if (goog.object.containsKey(values, 'time')) { if ('time' in values) {
flatCoordinates.push( flatCoordinates.push(/** @type {number} */ (values['time']));
/** @type {number} */ (values['time'])); delete values['time'];
goog.object.remove(values, 'time');
} else { } else {
flatCoordinates.push(0); flatCoordinates.push(0);
} }
@@ -100,7 +97,7 @@ ol.format.GPX.parseLink_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'link', 'localName should be link'); goog.asserts.assert(node.localName == 'link', 'localName should be link');
var values = /** @type {Object} */ (objectStack[objectStack.length - 1]); var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
var href = node.getAttribute('href'); var href = node.getAttribute('href');
if (!goog.isNull(href)) { if (href !== null) {
values['link'] = href; values['link'] = href;
} }
ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack); ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack);
@@ -133,7 +130,7 @@ ol.format.GPX.parseRtePt_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'rtept', 'localName should be rtept'); goog.asserts.assert(node.localName == 'rtept', 'localName should be rtept');
var values = ol.xml.pushParseAndPop( var values = ol.xml.pushParseAndPop(
{}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack); {}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack);
if (goog.isDef(values)) { if (values) {
var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]); var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
var flatCoordinates = /** @type {Array.<number>} */ var flatCoordinates = /** @type {Array.<number>} */
(rteValues['flatCoordinates']); (rteValues['flatCoordinates']);
@@ -153,7 +150,7 @@ ol.format.GPX.parseTrkPt_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'trkpt', 'localName should be trkpt'); goog.asserts.assert(node.localName == 'trkpt', 'localName should be trkpt');
var values = ol.xml.pushParseAndPop( var values = ol.xml.pushParseAndPop(
{}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack); {}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack);
if (goog.isDef(values)) { if (values) {
var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]); var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
var flatCoordinates = /** @type {Array.<number>} */ var flatCoordinates = /** @type {Array.<number>} */
(trkValues['flatCoordinates']); (trkValues['flatCoordinates']);
@@ -195,12 +192,12 @@ ol.format.GPX.readRte_ = function(node, objectStack) {
var values = ol.xml.pushParseAndPop({ var values = ol.xml.pushParseAndPop({
'flatCoordinates': [] 'flatCoordinates': []
}, ol.format.GPX.RTE_PARSERS_, node, objectStack); }, ol.format.GPX.RTE_PARSERS_, node, objectStack);
if (!goog.isDef(values)) { if (!values) {
return undefined; return undefined;
} }
var flatCoordinates = /** @type {Array.<number>} */ var flatCoordinates = /** @type {Array.<number>} */
(values['flatCoordinates']); (values['flatCoordinates']);
goog.object.remove(values, 'flatCoordinates'); delete values['flatCoordinates'];
var geometry = new ol.geom.LineString(null); var geometry = new ol.geom.LineString(null);
geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates); geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
ol.format.Feature.transformWithOptions(geometry, false, options); ol.format.Feature.transformWithOptions(geometry, false, options);
@@ -225,14 +222,14 @@ ol.format.GPX.readTrk_ = function(node, objectStack) {
'flatCoordinates': [], 'flatCoordinates': [],
'ends': [] 'ends': []
}, ol.format.GPX.TRK_PARSERS_, node, objectStack); }, ol.format.GPX.TRK_PARSERS_, node, objectStack);
if (!goog.isDef(values)) { if (!values) {
return undefined; return undefined;
} }
var flatCoordinates = /** @type {Array.<number>} */ var flatCoordinates = /** @type {Array.<number>} */
(values['flatCoordinates']); (values['flatCoordinates']);
goog.object.remove(values, 'flatCoordinates'); delete values['flatCoordinates'];
var ends = /** @type {Array.<number>} */ (values['ends']); var ends = /** @type {Array.<number>} */ (values['ends']);
goog.object.remove(values, 'ends'); delete values['ends'];
var geometry = new ol.geom.MultiLineString(null); var geometry = new ol.geom.MultiLineString(null);
geometry.setFlatCoordinates( geometry.setFlatCoordinates(
ol.geom.GeometryLayout.XYZM, flatCoordinates, ends); ol.geom.GeometryLayout.XYZM, flatCoordinates, ends);
@@ -256,7 +253,7 @@ ol.format.GPX.readWpt_ = function(node, objectStack) {
var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]); var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
var values = ol.xml.pushParseAndPop( var values = ol.xml.pushParseAndPop(
{}, ol.format.GPX.WPT_PARSERS_, node, objectStack); {}, ol.format.GPX.WPT_PARSERS_, node, objectStack);
if (!goog.isDef(values)) { if (!values) {
return undefined; return undefined;
} }
var coordinates = ol.format.GPX.appendCoordinate_([], node, values); var coordinates = ol.format.GPX.appendCoordinate_([], node, values);
@@ -420,12 +417,12 @@ ol.format.GPX.WPT_PARSERS_ = ol.xml.makeStructureNS(
* @private * @private
*/ */
ol.format.GPX.prototype.handleReadExtensions_ = function(features) { ol.format.GPX.prototype.handleReadExtensions_ = function(features) {
if (goog.isNull(features)) { if (!features) {
features = []; features = [];
} }
for (var i = 0, ii = features.length; i < ii; ++i) { for (var i = 0, ii = features.length; i < ii; ++i) {
var feature = features[i]; var feature = features[i];
if (goog.isDef(this.readExtensions_)) { if (this.readExtensions_) {
var extensionsNode = feature.get('extensionsNode_') || null; var extensionsNode = feature.get('extensionsNode_') || null;
this.readExtensions_(feature, extensionsNode); this.readExtensions_(feature, extensionsNode);
} }
@@ -452,15 +449,15 @@ ol.format.GPX.prototype.readFeature;
ol.format.GPX.prototype.readFeatureFromNode = function(node, opt_options) { ol.format.GPX.prototype.readFeatureFromNode = function(node, opt_options) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
if (!goog.array.contains(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) { if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
return null; return null;
} }
var featureReader = ol.format.GPX.FEATURE_READER_[node.localName]; var featureReader = ol.format.GPX.FEATURE_READER_[node.localName];
if (!goog.isDef(featureReader)) { if (!featureReader) {
return null; return null;
} }
var feature = featureReader(node, [this.getReadOptions(node, opt_options)]); var feature = featureReader(node, [this.getReadOptions(node, opt_options)]);
if (!goog.isDef(feature)) { if (!feature) {
return null; return null;
} }
this.handleReadExtensions_([feature]); this.handleReadExtensions_([feature]);
@@ -486,14 +483,14 @@ ol.format.GPX.prototype.readFeatures;
ol.format.GPX.prototype.readFeaturesFromNode = function(node, opt_options) { ol.format.GPX.prototype.readFeaturesFromNode = function(node, opt_options) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
if (!goog.array.contains(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) { if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
return []; return [];
} }
if (node.localName == 'gpx') { if (node.localName == 'gpx') {
var features = ol.xml.pushParseAndPop( var features = ol.xml.pushParseAndPop(
/** @type {Array.<ol.Feature>} */ ([]), ol.format.GPX.GPX_PARSERS_, /** @type {Array.<ol.Feature>} */ ([]), ol.format.GPX.GPX_PARSERS_,
node, [this.getReadOptions(node, opt_options)]); node, [this.getReadOptions(node, opt_options)]);
if (goog.isDef(features)) { if (features) {
this.handleReadExtensions_(features); this.handleReadExtensions_(features);
return features; return features;
} else { } else {
@@ -591,7 +588,7 @@ ol.format.GPX.writeRte_ = function(node, feature, objectStack) {
var properties = feature.getProperties(); var properties = feature.getProperties();
var context = {node: node, 'properties': properties}; var context = {node: node, 'properties': properties};
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDef(geometry)) { if (geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString, goog.asserts.assertInstanceof(geometry, ol.geom.LineString,
'geometry should be an ol.geom.LineString'); 'geometry should be an ol.geom.LineString');
geometry = /** @type {ol.geom.LineString} */ geometry = /** @type {ol.geom.LineString} */
@@ -619,7 +616,7 @@ ol.format.GPX.writeTrk_ = function(node, feature, objectStack) {
var properties = feature.getProperties(); var properties = feature.getProperties();
var context = {node: node, 'properties': properties}; var context = {node: node, 'properties': properties};
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDef(geometry)) { if (geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString, goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString,
'geometry should be an ol.geom.MultiLineString'); 'geometry should be an ol.geom.MultiLineString');
geometry = /** @type {ol.geom.MultiLineString} */ geometry = /** @type {ol.geom.MultiLineString} */
@@ -662,7 +659,7 @@ ol.format.GPX.writeWpt_ = function(node, feature, objectStack) {
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
context['properties'] = feature.getProperties(); context['properties'] = feature.getProperties();
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDef(geometry)) { if (geometry) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point, goog.asserts.assertInstanceof(geometry, ol.geom.Point,
'geometry should be an ol.geom.Point'); 'geometry should be an ol.geom.Point');
geometry = /** @type {ol.geom.Point} */ geometry = /** @type {ol.geom.Point} */
@@ -841,7 +838,7 @@ ol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
goog.asserts.assertInstanceof(value, ol.Feature, goog.asserts.assertInstanceof(value, ol.Feature,
'value should be an ol.Feature'); 'value should be an ol.Feature');
var geometry = value.getGeometry(); var geometry = value.getGeometry();
if (goog.isDef(geometry)) { if (geometry) {
var parentNode = objectStack[objectStack.length - 1].node; var parentNode = objectStack[objectStack.length - 1].node;
goog.asserts.assert(ol.xml.isNode(parentNode), goog.asserts.assert(ol.xml.isNode(parentNode),
'parentNode should be an XML node'); 'parentNode should be an XML node');

View File

@@ -36,7 +36,7 @@ ol.format.IGCZ = {
*/ */
ol.format.IGC = function(opt_options) { ol.format.IGC = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -49,7 +49,7 @@ ol.format.IGC = function(opt_options) {
* @private * @private
* @type {ol.format.IGCZ} * @type {ol.format.IGCZ}
*/ */
this.altitudeMode_ = goog.isDef(options.altitudeMode) ? this.altitudeMode_ = options.altitudeMode ?
options.altitudeMode : ol.format.IGCZ.NONE; options.altitudeMode : ol.format.IGCZ.NONE;
}; };
@@ -164,7 +164,7 @@ ol.format.IGC.prototype.readFeatureFromText = function(text, opt_options) {
} else { } else {
m = ol.format.IGC.H_RECORD_RE_.exec(line); m = ol.format.IGC.H_RECORD_RE_.exec(line);
if (m) { if (m) {
properties[m[1]] = goog.string.trim(m[2]); properties[m[1]] = m[2].trim();
m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line); m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line);
} }
} }
@@ -202,7 +202,7 @@ ol.format.IGC.prototype.readFeatures;
*/ */
ol.format.IGC.prototype.readFeaturesFromText = function(text, opt_options) { ol.format.IGC.prototype.readFeaturesFromText = function(text, opt_options) {
var feature = this.readFeatureFromText(text, opt_options); var feature = this.readFeatureFromText(text, opt_options);
if (!goog.isNull(feature)) { if (feature) {
return [feature]; return [feature];
} else { } else {
return []; return [];

View File

@@ -32,7 +32,7 @@ ol.format.JSONFeature.prototype.getObject_ = function(source) {
return source; return source;
} else if (goog.isString(source)) { } else if (goog.isString(source)) {
var object = goog.json.parse(source); var object = goog.json.parse(source);
return goog.isDef(object) ? object : null; return object ? object : null;
} else { } else {
goog.asserts.fail(); goog.asserts.fail();
return null; return null;

View File

@@ -11,10 +11,10 @@ goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.math'); goog.require('goog.math');
goog.require('goog.object'); goog.require('ol');
goog.require('goog.string');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.FeatureStyleFunction'); goog.require('ol.FeatureStyleFunction');
goog.require('ol.array');
goog.require('ol.color'); goog.require('ol.color');
goog.require('ol.format.Feature'); goog.require('ol.format.Feature');
goog.require('ol.format.XMLFeature'); goog.require('ol.format.XMLFeature');
@@ -68,7 +68,7 @@ ol.format.KMLGxTrackObject_;
*/ */
ol.format.KML = function(opt_options) { ol.format.KML = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -81,14 +81,14 @@ ol.format.KML = function(opt_options) {
* @private * @private
* @type {Array.<ol.style.Style>} * @type {Array.<ol.style.Style>}
*/ */
this.defaultStyle_ = goog.isDef(options.defaultStyle) ? this.defaultStyle_ = options.defaultStyle ?
options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_; options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_;
/** /**
* @private * @private
* @type {boolean} * @type {boolean}
*/ */
this.extractStyles_ = goog.isDef(options.extractStyles) ? this.extractStyles_ = options.extractStyles !== undefined ?
options.extractStyles : true; options.extractStyles : true;
/** /**
@@ -296,10 +296,10 @@ ol.format.KML.createFeatureStyleFunction_ = function(
* @this {ol.Feature} * @this {ol.Feature}
*/ */
function(resolution) { function(resolution) {
if (goog.isDef(style)) { if (style) {
return style; return style;
} }
if (goog.isDef(styleUrl)) { if (styleUrl) {
return ol.format.KML.findStyle_(styleUrl, defaultStyle, sharedStyles); return ol.format.KML.findStyle_(styleUrl, defaultStyle, sharedStyles);
} }
return defaultStyle; return defaultStyle;
@@ -391,8 +391,8 @@ ol.format.KML.readFlatCoordinates_ = function(node) {
* @return {string|undefined} Style URL. * @return {string|undefined} Style URL.
*/ */
ol.format.KML.readStyleUrl_ = function(node) { ol.format.KML.readStyleUrl_ = function(node) {
var s = goog.string.trim(ol.xml.getAllTextContent(node, false)); var s = ol.xml.getAllTextContent(node, false).trim();
if (goog.isDefAndNotNull(node.baseURI)) { if (node.baseURI) {
return goog.Uri.resolve(node.baseURI, s).toString(); return goog.Uri.resolve(node.baseURI, s).toString();
} else { } else {
return s; return s;
@@ -408,10 +408,10 @@ ol.format.KML.readStyleUrl_ = function(node) {
*/ */
ol.format.KML.readURI_ = function(node) { ol.format.KML.readURI_ = function(node) {
var s = ol.xml.getAllTextContent(node, false); var s = ol.xml.getAllTextContent(node, false);
if (goog.isDefAndNotNull(node.baseURI)) { if (node.baseURI) {
return goog.Uri.resolve(node.baseURI, goog.string.trim(s)).toString(); return goog.Uri.resolve(node.baseURI, s.trim()).toString();
} else { } else {
return goog.string.trim(s); return s.trim();
} }
}; };
@@ -440,7 +440,7 @@ ol.format.KML.readVec2_ = function(node) {
*/ */
ol.format.KML.readScale_ = function(node) { ol.format.KML.readScale_ = function(node) {
var number = ol.format.XSD.readDecimal(node); var number = ol.format.XSD.readDecimal(node);
if (goog.isDef(number)) { if (number !== undefined) {
return Math.sqrt(number); return Math.sqrt(number);
} else { } else {
return undefined; return undefined;
@@ -479,17 +479,17 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
// FIXME httpQuery // FIXME httpQuery
var object = ol.xml.pushParseAndPop( var object = ol.xml.pushParseAndPop(
{}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack); {}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(object)) { if (!object) {
return; return;
} }
var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]); var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(styleObject), goog.asserts.assert(goog.isObject(styleObject),
'styleObject should be an Object'); 'styleObject should be an Object');
var IconObject = /** @type {Object} */ (goog.object.get(object, 'Icon', {})); var IconObject = 'Icon' in object ? object['Icon'] : {};
var src; var src;
var href = /** @type {string|undefined} */ var href = /** @type {string|undefined} */
(IconObject['href']); (IconObject['href']);
if (goog.isDef(href)) { if (href) {
src = href; src = href;
} else { } else {
src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_; src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_;
@@ -497,7 +497,7 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
var anchor, anchorXUnits, anchorYUnits; var anchor, anchorXUnits, anchorYUnits;
var hotSpot = /** @type {ol.format.KMLVec2_|undefined} */ var hotSpot = /** @type {ol.format.KMLVec2_|undefined} */
(object['hotSpot']); (object['hotSpot']);
if (goog.isDef(hotSpot)) { if (hotSpot) {
anchor = [hotSpot.x, hotSpot.y]; anchor = [hotSpot.x, hotSpot.y];
anchorXUnits = hotSpot.xunits; anchorXUnits = hotSpot.xunits;
anchorYUnits = hotSpot.yunits; anchorYUnits = hotSpot.yunits;
@@ -516,7 +516,7 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
(IconObject['x']); (IconObject['x']);
var y = /** @type {number|undefined} */ var y = /** @type {number|undefined} */
(IconObject['y']); (IconObject['y']);
if (goog.isDef(x) && goog.isDef(y)) { if (x !== undefined && y !== undefined) {
offset = [x, y]; offset = [x, y];
} }
@@ -525,14 +525,14 @@ ol.format.KML.IconStyleParser_ = function(node, objectStack) {
(IconObject['w']); (IconObject['w']);
var h = /** @type {number|undefined} */ var h = /** @type {number|undefined} */
(IconObject['h']); (IconObject['h']);
if (goog.isDef(w) && goog.isDef(h)) { if (w !== undefined && h !== undefined) {
size = [w, h]; size = [w, h];
} }
var rotation; var rotation;
var heading = /** @type {number|undefined} */ var heading = /** @type {number} */
(object['heading']); (object['heading']);
if (goog.isDef(heading)) { if (heading !== undefined) {
rotation = goog.math.toRadians(heading); rotation = goog.math.toRadians(heading);
} }
@@ -572,7 +572,7 @@ ol.format.KML.LabelStyleParser_ = function(node, objectStack) {
// FIXME colorMode // FIXME colorMode
var object = ol.xml.pushParseAndPop( var object = ol.xml.pushParseAndPop(
{}, ol.format.KML.LABEL_STYLE_PARSERS_, node, objectStack); {}, ol.format.KML.LABEL_STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(object)) { if (!object) {
return; return;
} }
var styleObject = objectStack[objectStack.length - 1]; var styleObject = objectStack[objectStack.length - 1];
@@ -581,7 +581,7 @@ ol.format.KML.LabelStyleParser_ = function(node, objectStack) {
var textStyle = new ol.style.Text({ var textStyle = new ol.style.Text({
fill: new ol.style.Fill({ fill: new ol.style.Fill({
color: /** @type {ol.Color} */ color: /** @type {ol.Color} */
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)) ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)
}), }),
scale: /** @type {number|undefined} */ scale: /** @type {number|undefined} */
(object['scale']) (object['scale'])
@@ -607,7 +607,7 @@ ol.format.KML.LineStyleParser_ = function(node, objectStack) {
// FIXME gx:labelVisibility // FIXME gx:labelVisibility
var object = ol.xml.pushParseAndPop( var object = ol.xml.pushParseAndPop(
{}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack); {}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(object)) { if (!object) {
return; return;
} }
var styleObject = objectStack[objectStack.length - 1]; var styleObject = objectStack[objectStack.length - 1];
@@ -615,8 +615,8 @@ ol.format.KML.LineStyleParser_ = function(node, objectStack) {
'styleObject should be an Object'); 'styleObject should be an Object');
var strokeStyle = new ol.style.Stroke({ var strokeStyle = new ol.style.Stroke({
color: /** @type {ol.Color} */ color: /** @type {ol.Color} */
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)), ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_),
width: /** @type {number} */ (goog.object.get(object, 'width', 1)) width: /** @type {number} */ ('width' in object ? object['width'] : 1)
}); });
styleObject['strokeStyle'] = strokeStyle; styleObject['strokeStyle'] = strokeStyle;
}; };
@@ -635,7 +635,7 @@ ol.format.KML.PolyStyleParser_ = function(node, objectStack) {
// FIXME colorMode // FIXME colorMode
var object = ol.xml.pushParseAndPop( var object = ol.xml.pushParseAndPop(
{}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack); {}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(object)) { if (!object) {
return; return;
} }
var styleObject = objectStack[objectStack.length - 1]; var styleObject = objectStack[objectStack.length - 1];
@@ -643,16 +643,16 @@ ol.format.KML.PolyStyleParser_ = function(node, objectStack) {
'styleObject should be an Object'); 'styleObject should be an Object');
var fillStyle = new ol.style.Fill({ var fillStyle = new ol.style.Fill({
color: /** @type {ol.Color} */ color: /** @type {ol.Color} */
(goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)) ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)
}); });
styleObject['fillStyle'] = fillStyle; styleObject['fillStyle'] = fillStyle;
var fill = /** @type {boolean|undefined} */ (object['fill']); var fill = /** @type {boolean|undefined} */ (object['fill']);
if (goog.isDef(fill)) { if (fill !== undefined) {
styleObject['fill'] = fill; styleObject['fill'] = fill;
} }
var outline = var outline =
/** @type {boolean|undefined} */ (object['outline']); /** @type {boolean|undefined} */ (object['outline']);
if (goog.isDef(outline)) { if (outline !== undefined) {
styleObject['outline'] = outline; styleObject['outline'] = outline;
} }
}; };
@@ -682,7 +682,7 @@ ol.format.KML.readFlatLinearRing_ = function(node, objectStack) {
ol.format.KML.gxCoordParser_ = function(node, objectStack) { ol.format.KML.gxCoordParser_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(goog.array.contains( goog.asserts.assert(ol.array.includes(
ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI), ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
'namespaceURI of the node should be known to the KML parser'); 'namespaceURI of the node should be known to the KML parser');
goog.asserts.assert(node.localName == 'coord', 'localName should be coord'); goog.asserts.assert(node.localName == 'coord', 'localName should be coord');
@@ -715,7 +715,7 @@ ol.format.KML.gxCoordParser_ = function(node, objectStack) {
ol.format.KML.readGxMultiTrack_ = function(node, objectStack) { ol.format.KML.readGxMultiTrack_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(goog.array.contains( goog.asserts.assert(ol.array.includes(
ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI), ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
'namespaceURI of the node should be known to the KML parser'); 'namespaceURI of the node should be known to the KML parser');
goog.asserts.assert(node.localName == 'MultiTrack', goog.asserts.assert(node.localName == 'MultiTrack',
@@ -723,7 +723,7 @@ ol.format.KML.readGxMultiTrack_ = function(node, objectStack) {
var lineStrings = ol.xml.pushParseAndPop( var lineStrings = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.LineString>} */ ([]), /** @type {Array.<ol.geom.LineString>} */ ([]),
ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack); ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack);
if (!goog.isDef(lineStrings)) { if (!lineStrings) {
return undefined; return undefined;
} }
var multiLineString = new ol.geom.MultiLineString(null); var multiLineString = new ol.geom.MultiLineString(null);
@@ -741,7 +741,7 @@ ol.format.KML.readGxMultiTrack_ = function(node, objectStack) {
ol.format.KML.readGxTrack_ = function(node, objectStack) { ol.format.KML.readGxTrack_ = function(node, objectStack) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(goog.array.contains( goog.asserts.assert(ol.array.includes(
ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI), ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
'namespaceURI of the node should be known to the KML parser'); 'namespaceURI of the node should be known to the KML parser');
goog.asserts.assert(node.localName == 'Track', 'localName should be Track'); goog.asserts.assert(node.localName == 'Track', 'localName should be Track');
@@ -750,7 +750,7 @@ ol.format.KML.readGxTrack_ = function(node, objectStack) {
flatCoordinates: [], flatCoordinates: [],
whens: [] whens: []
}), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack); }), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack);
if (!goog.isDef(gxTrackObject)) { if (!gxTrackObject) {
return undefined; return undefined;
} }
var flatCoordinates = gxTrackObject.flatCoordinates; var flatCoordinates = gxTrackObject.flatCoordinates;
@@ -781,7 +781,7 @@ ol.format.KML.readIcon_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'Icon', 'localName should be Icon'); goog.asserts.assert(node.localName == 'Icon', 'localName should be Icon');
var iconObject = ol.xml.pushParseAndPop( var iconObject = ol.xml.pushParseAndPop(
{}, ol.format.KML.ICON_PARSERS_, node, objectStack); {}, ol.format.KML.ICON_PARSERS_, node, objectStack);
if (goog.isDef(iconObject)) { if (iconObject) {
return iconObject; return iconObject;
} else { } else {
return null; return null;
@@ -819,7 +819,7 @@ ol.format.KML.readLineString_ = function(node, objectStack) {
objectStack); objectStack);
var flatCoordinates = var flatCoordinates =
ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDef(flatCoordinates)) { if (flatCoordinates) {
var lineString = new ol.geom.LineString(null); var lineString = new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
lineString.setProperties(properties); lineString.setProperties(properties);
@@ -846,7 +846,7 @@ ol.format.KML.readLinearRing_ = function(node, objectStack) {
objectStack); objectStack);
var flatCoordinates = var flatCoordinates =
ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDef(flatCoordinates)) { if (flatCoordinates) {
var polygon = new ol.geom.Polygon(null); var polygon = new ol.geom.Polygon(null);
polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates,
[flatCoordinates.length]); [flatCoordinates.length]);
@@ -872,7 +872,7 @@ ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
var geometries = ol.xml.pushParseAndPop( var geometries = ol.xml.pushParseAndPop(
/** @type {Array.<ol.geom.Geometry>} */ ([]), /** @type {Array.<ol.geom.Geometry>} */ ([]),
ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack); ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack);
if (!goog.isDef(geometries)) { if (!geometries) {
return null; return null;
} }
if (geometries.length === 0) { if (geometries.length === 0) {
@@ -948,7 +948,7 @@ ol.format.KML.readPoint_ = function(node, objectStack) {
objectStack); objectStack);
var flatCoordinates = var flatCoordinates =
ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
if (goog.isDefAndNotNull(flatCoordinates)) { if (flatCoordinates) {
var point = new ol.geom.Point(null); var point = new ol.geom.Point(null);
goog.asserts.assert(flatCoordinates.length == 3, goog.asserts.assert(flatCoordinates.length == 3,
'flatCoordinates should have a length of 3'); 'flatCoordinates should have a length of 3');
@@ -978,8 +978,7 @@ ol.format.KML.readPolygon_ = function(node, objectStack) {
var flatLinearRings = ol.xml.pushParseAndPop( var flatLinearRings = ol.xml.pushParseAndPop(
/** @type {Array.<Array.<number>>} */ ([null]), /** @type {Array.<Array.<number>>} */ ([null]),
ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack);
if (goog.isDefAndNotNull(flatLinearRings) && if (flatLinearRings && flatLinearRings[0]) {
!goog.isNull(flatLinearRings[0])) {
var polygon = new ol.geom.Polygon(null); var polygon = new ol.geom.Polygon(null);
var flatCoordinates = flatLinearRings[0]; var flatCoordinates = flatLinearRings[0];
var ends = [flatCoordinates.length]; var ends = [flatCoordinates.length];
@@ -1010,25 +1009,28 @@ ol.format.KML.readStyle_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'Style', 'localName should be Style'); goog.asserts.assert(node.localName == 'Style', 'localName should be Style');
var styleObject = ol.xml.pushParseAndPop( var styleObject = ol.xml.pushParseAndPop(
{}, ol.format.KML.STYLE_PARSERS_, node, objectStack); {}, ol.format.KML.STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(styleObject)) { if (!styleObject) {
return null; return null;
} }
var fillStyle = /** @type {ol.style.Fill} */ (goog.object.get( var fillStyle = /** @type {ol.style.Fill} */
styleObject, 'fillStyle', ol.format.KML.DEFAULT_FILL_STYLE_)); ('fillStyle' in styleObject ?
var fill = /** @type {boolean|undefined} */ styleObject['fillStyle'] : ol.format.KML.DEFAULT_FILL_STYLE_);
(styleObject['fill']); var fill = /** @type {boolean|undefined} */ (styleObject['fill']);
if (goog.isDef(fill) && !fill) { if (fill !== undefined && !fill) {
fillStyle = null; fillStyle = null;
} }
var imageStyle = /** @type {ol.style.Image} */ (goog.object.get( var imageStyle = /** @type {ol.style.Image} */
styleObject, 'imageStyle', ol.format.KML.DEFAULT_IMAGE_STYLE_)); ('imageStyle' in styleObject ?
var textStyle = /** @type {ol.style.Text} */ (goog.object.get( styleObject['imageStyle'] : ol.format.KML.DEFAULT_IMAGE_STYLE_);
styleObject, 'textStyle', ol.format.KML.DEFAULT_TEXT_STYLE_)); var textStyle = /** @type {ol.style.Text} */
var strokeStyle = /** @type {ol.style.Stroke} */ (goog.object.get( ('textStyle' in styleObject ?
styleObject, 'strokeStyle', ol.format.KML.DEFAULT_STROKE_STYLE_)); styleObject['textStyle'] : ol.format.KML.DEFAULT_TEXT_STYLE_);
var strokeStyle = /** @type {ol.style.Stroke} */
('strokeStyle' in styleObject ?
styleObject['strokeStyle'] : ol.format.KML.DEFAULT_STROKE_STYLE_);
var outline = /** @type {boolean|undefined} */ var outline = /** @type {boolean|undefined} */
(styleObject['outline']); (styleObject['outline']);
if (goog.isDef(outline) && !outline) { if (outline !== undefined && !outline) {
strokeStyle = null; strokeStyle = null;
} }
return [new ol.style.Style({ return [new ol.style.Style({
@@ -1060,8 +1062,8 @@ ol.format.KML.setCommonGeometryProperties_ = function(multiGeometry,
geometry = geometries[i]; geometry = geometries[i];
extrudes[i] = geometry.get('extrude'); extrudes[i] = geometry.get('extrude');
altitudeModes[i] = geometry.get('altitudeMode'); altitudeModes[i] = geometry.get('altitudeMode');
hasExtrude = hasExtrude || goog.isDef(extrudes[i]); hasExtrude = hasExtrude || extrudes[i] !== undefined;
hasAltitudeMode = hasAltitudeMode || goog.isDef(altitudeModes[i]); hasAltitudeMode = hasAltitudeMode || altitudeModes[i];
} }
if (hasExtrude) { if (hasExtrude) {
multiGeometry.set('extrude', extrudes); multiGeometry.set('extrude', extrudes);
@@ -1082,10 +1084,10 @@ ol.format.KML.DataParser_ = function(node, objectStack) {
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(node.localName == 'Data', 'localName should be Data'); goog.asserts.assert(node.localName == 'Data', 'localName should be Data');
var name = node.getAttribute('name'); var name = node.getAttribute('name');
if (!goog.isNull(name)) { if (name !== null) {
var data = ol.xml.pushParseAndPop( var data = ol.xml.pushParseAndPop(
undefined, ol.format.KML.DATA_PARSERS_, node, objectStack); undefined, ol.format.KML.DATA_PARSERS_, node, objectStack);
if (goog.isDef(data)) { if (data) {
var featureObject = var featureObject =
/** @type {Object} */ (objectStack[objectStack.length - 1]); /** @type {Object} */ (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isObject(featureObject), goog.asserts.assert(goog.isObject(featureObject),
@@ -1121,20 +1123,20 @@ ol.format.KML.PairDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'Pair', 'localName should be Pair'); goog.asserts.assert(node.localName == 'Pair', 'localName should be Pair');
var pairObject = ol.xml.pushParseAndPop( var pairObject = ol.xml.pushParseAndPop(
{}, ol.format.KML.PAIR_PARSERS_, node, objectStack); {}, ol.format.KML.PAIR_PARSERS_, node, objectStack);
if (!goog.isDef(pairObject)) { if (!pairObject) {
return; return;
} }
var key = /** @type {string|undefined} */ var key = /** @type {string|undefined} */
(pairObject['key']); (pairObject['key']);
if (goog.isDef(key) && key == 'normal') { if (key && key == 'normal') {
var styleUrl = /** @type {string|undefined} */ var styleUrl = /** @type {string|undefined} */
(pairObject['styleUrl']); (pairObject['styleUrl']);
if (goog.isDef(styleUrl)) { if (styleUrl) {
objectStack[objectStack.length - 1] = styleUrl; objectStack[objectStack.length - 1] = styleUrl;
} }
var Style = /** @type {ol.style.Style} */ var Style = /** @type {ol.style.Style} */
(pairObject['Style']); (pairObject['Style']);
if (goog.isDef(Style)) { if (Style) {
objectStack[objectStack.length - 1] = Style; objectStack[objectStack.length - 1] = Style;
} }
} }
@@ -1152,7 +1154,7 @@ ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'StyleMap', goog.asserts.assert(node.localName == 'StyleMap',
'localName should be StyleMap'); 'localName should be StyleMap');
var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
if (!goog.isDef(styleMapValue)) { if (!styleMapValue) {
return; return;
} }
var placemarkObject = objectStack[objectStack.length - 1]; var placemarkObject = objectStack[objectStack.length - 1];
@@ -1193,7 +1195,7 @@ ol.format.KML.SimpleDataParser_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'SimpleData', goog.asserts.assert(node.localName == 'SimpleData',
'localName should be SimpleData'); 'localName should be SimpleData');
var name = node.getAttribute('name'); var name = node.getAttribute('name');
if (!goog.isNull(name)) { if (name !== null) {
var data = ol.format.XSD.readString(node); var data = ol.format.XSD.readString(node);
var featureObject = var featureObject =
/** @type {Object} */ (objectStack[objectStack.length - 1]); /** @type {Object} */ (objectStack[objectStack.length - 1]);
@@ -1215,7 +1217,7 @@ ol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) {
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack); ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),
@@ -1240,7 +1242,7 @@ ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) {
var flatLinearRing = ol.xml.pushParseAndPop( var flatLinearRing = ol.xml.pushParseAndPop(
/** @type {Array.<number>|undefined} */ (undefined), /** @type {Array.<number>|undefined} */ (undefined),
ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack); ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack);
if (goog.isDef(flatLinearRing)) { if (flatLinearRing) {
var flatLinearRings = /** @type {Array.<Array.<number>>} */ var flatLinearRings = /** @type {Array.<Array.<number>>} */
(objectStack[objectStack.length - 1]); (objectStack[objectStack.length - 1]);
goog.asserts.assert(goog.isArray(flatLinearRings), goog.asserts.assert(goog.isArray(flatLinearRings),
@@ -1285,16 +1287,16 @@ ol.format.KML.whenParser_ = function(node, objectStack) {
var m = re.exec(s); var m = re.exec(s);
if (m) { if (m) {
var year = parseInt(m[1], 10); var year = parseInt(m[1], 10);
var month = goog.isDef(m[3]) ? parseInt(m[3], 10) - 1 : 0; var month = m[3] ? parseInt(m[3], 10) - 1 : 0;
var day = goog.isDef(m[5]) ? parseInt(m[5], 10) : 1; var day = m[5] ? parseInt(m[5], 10) : 1;
var hour = goog.isDef(m[7]) ? parseInt(m[7], 10) : 0; var hour = m[7] ? parseInt(m[7], 10) : 0;
var minute = goog.isDef(m[8]) ? parseInt(m[8], 10) : 0; var minute = m[8] ? parseInt(m[8], 10) : 0;
var second = goog.isDef(m[9]) ? parseInt(m[9], 10) : 0; var second = m[9] ? parseInt(m[9], 10) : 0;
var when = Date.UTC(year, month, day, hour, minute, second); var when = Date.UTC(year, month, day, hour, minute, second);
if (goog.isDef(m[10]) && m[10] != 'Z') { if (m[10] && m[10] != 'Z') {
var sign = m[11] == '-' ? -1 : 1; var sign = m[11] == '-' ? -1 : 1;
when += sign * 60 * parseInt(m[12], 10); when += sign * 60 * parseInt(m[12], 10);
if (goog.isDef(m[13])) { if (m[13]) {
when += sign * 60 * 60 * parseInt(m[13], 10); when += sign * 60 * 60 * parseInt(m[13], 10);
} }
} }
@@ -1650,7 +1652,7 @@ ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) {
}); });
var features = ol.xml.pushParseAndPop(/** @type {Array.<ol.Feature>} */ ([]), var features = ol.xml.pushParseAndPop(/** @type {Array.<ol.Feature>} */ ([]),
parsersNS, node, objectStack, this); parsersNS, node, objectStack, this);
if (goog.isDef(features)) { if (features) {
return features; return features;
} else { } else {
return undefined; return undefined;
@@ -1671,22 +1673,22 @@ ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {
'localName should be Placemark'); 'localName should be Placemark');
var object = ol.xml.pushParseAndPop({'geometry': null}, var object = ol.xml.pushParseAndPop({'geometry': null},
ol.format.KML.PLACEMARK_PARSERS_, node, objectStack); ol.format.KML.PLACEMARK_PARSERS_, node, objectStack);
if (!goog.isDef(object)) { if (!object) {
return undefined; return undefined;
} }
var feature = new ol.Feature(); var feature = new ol.Feature();
var id = node.getAttribute('id'); var id = node.getAttribute('id');
if (!goog.isNull(id)) { if (id !== null) {
feature.setId(id); feature.setId(id);
} }
var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]); var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
var geometry = object['geometry']; var geometry = object['geometry'];
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
ol.format.Feature.transformWithOptions(geometry, false, options); ol.format.Feature.transformWithOptions(geometry, false, options);
} }
feature.setGeometry(geometry); feature.setGeometry(geometry);
goog.object.remove(object, 'geometry'); delete object['geometry'];
if (this.extractStyles_) { if (this.extractStyles_) {
var style = object['Style']; var style = object['Style'];
@@ -1695,7 +1697,7 @@ ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {
style, styleUrl, this.defaultStyle_, this.sharedStyles_); style, styleUrl, this.defaultStyle_, this.sharedStyles_);
feature.setStyle(styleFunction); feature.setStyle(styleFunction);
} }
goog.object.remove(object, 'Style'); delete object['Style'];
// we do not remove the styleUrl property from the object, so it // we do not remove the styleUrl property from the object, so it
// gets stored on feature when setProperties is called // gets stored on feature when setProperties is called
@@ -1715,11 +1717,11 @@ ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) {
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(node.localName == 'Style', 'localName should be Style'); goog.asserts.assert(node.localName == 'Style', 'localName should be Style');
var id = node.getAttribute('id'); var id = node.getAttribute('id');
if (!goog.isNull(id)) { if (id !== null) {
var style = ol.format.KML.readStyle_(node, objectStack); var style = ol.format.KML.readStyle_(node, objectStack);
if (goog.isDef(style)) { if (style) {
var styleUri; var styleUri;
if (goog.isDefAndNotNull(node.baseURI)) { if (node.baseURI) {
styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString(); styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString();
} else { } else {
styleUri = '#' + id; styleUri = '#' + id;
@@ -1741,15 +1743,15 @@ ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'StyleMap', goog.asserts.assert(node.localName == 'StyleMap',
'localName should be StyleMap'); 'localName should be StyleMap');
var id = node.getAttribute('id'); var id = node.getAttribute('id');
if (goog.isNull(id)) { if (id === null) {
return; return;
} }
var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
if (!goog.isDef(styleMapValue)) { if (!styleMapValue) {
return; return;
} }
var styleUri; var styleUri;
if (goog.isDefAndNotNull(node.baseURI)) { if (node.baseURI) {
styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString(); styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString();
} else { } else {
styleUri = '#' + id; styleUri = '#' + id;
@@ -1776,14 +1778,14 @@ ol.format.KML.prototype.readFeature;
ol.format.KML.prototype.readFeatureFromNode = function(node, opt_options) { ol.format.KML.prototype.readFeatureFromNode = function(node, opt_options) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
if (!goog.array.contains(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) { if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
return null; return null;
} }
goog.asserts.assert(node.localName == 'Placemark', goog.asserts.assert(node.localName == 'Placemark',
'localName should be Placemark'); 'localName should be Placemark');
var feature = this.readPlacemark_( var feature = this.readPlacemark_(
node, [this.getReadOptions(node, opt_options)]); node, [this.getReadOptions(node, opt_options)]);
if (goog.isDef(feature)) { if (feature) {
return feature; return feature;
} else { } else {
return null; return null;
@@ -1809,7 +1811,7 @@ ol.format.KML.prototype.readFeatures;
ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) { ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT, goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT,
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
if (!goog.array.contains(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) { if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
return []; return [];
} }
var features; var features;
@@ -1817,7 +1819,7 @@ ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
if (localName == 'Document' || localName == 'Folder') { if (localName == 'Document' || localName == 'Folder') {
features = this.readDocumentOrFolder_( features = this.readDocumentOrFolder_(
node, [this.getReadOptions(node, opt_options)]); node, [this.getReadOptions(node, opt_options)]);
if (goog.isDef(features)) { if (features) {
return features; return features;
} else { } else {
return []; return [];
@@ -1825,7 +1827,7 @@ ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
} else if (localName == 'Placemark') { } else if (localName == 'Placemark') {
var feature = this.readPlacemark_( var feature = this.readPlacemark_(
node, [this.getReadOptions(node, opt_options)]); node, [this.getReadOptions(node, opt_options)]);
if (goog.isDef(feature)) { if (feature) {
return [feature]; return [feature];
} else { } else {
return []; return [];
@@ -1833,10 +1835,9 @@ ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
} else if (localName == 'kml') { } else if (localName == 'kml') {
features = []; features = [];
var n; var n;
for (n = node.firstElementChild; !goog.isNull(n); for (n = node.firstElementChild; n; n = n.nextElementSibling) {
n = n.nextElementSibling) {
var fs = this.readFeaturesFromNode(n, opt_options); var fs = this.readFeaturesFromNode(n, opt_options);
if (goog.isDef(fs)) { if (fs) {
goog.array.extend(features, fs); goog.array.extend(features, fs);
} }
} }
@@ -1875,10 +1876,10 @@ ol.format.KML.prototype.readName = function(source) {
*/ */
ol.format.KML.prototype.readNameFromDocument = function(doc) { ol.format.KML.prototype.readNameFromDocument = function(doc) {
var n; var n;
for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
var name = this.readNameFromNode(n); var name = this.readNameFromNode(n);
if (goog.isDef(name)) { if (name) {
return name; return name;
} }
} }
@@ -1893,21 +1894,21 @@ ol.format.KML.prototype.readNameFromDocument = function(doc) {
*/ */
ol.format.KML.prototype.readNameFromNode = function(node) { ol.format.KML.prototype.readNameFromNode = function(node) {
var n; var n;
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { for (n = node.firstElementChild; n; n = n.nextElementSibling) {
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
n.localName == 'name') { n.localName == 'name') {
return ol.format.XSD.readString(n); return ol.format.XSD.readString(n);
} }
} }
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { for (n = node.firstElementChild; n; n = n.nextElementSibling) {
var localName = ol.xml.getLocalName(n); var localName = ol.xml.getLocalName(n);
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
(localName == 'Document' || (localName == 'Document' ||
localName == 'Folder' || localName == 'Folder' ||
localName == 'Placemark' || localName == 'Placemark' ||
localName == 'kml')) { localName == 'kml')) {
var name = this.readNameFromNode(n); var name = this.readNameFromNode(n);
if (goog.isDef(name)) { if (name) {
return name; return name;
} }
} }
@@ -1947,7 +1948,7 @@ ol.format.KML.prototype.readNetworkLinks = function(source) {
*/ */
ol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) { ol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) {
var n, networkLinks = []; var n, networkLinks = [];
for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
goog.array.extend(networkLinks, this.readNetworkLinksFromNode(n)); goog.array.extend(networkLinks, this.readNetworkLinksFromNode(n));
} }
@@ -1962,17 +1963,17 @@ ol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) {
*/ */
ol.format.KML.prototype.readNetworkLinksFromNode = function(node) { ol.format.KML.prototype.readNetworkLinksFromNode = function(node) {
var n, networkLinks = []; var n, networkLinks = [];
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { for (n = node.firstElementChild; n; n = n.nextElementSibling) {
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
n.localName == 'NetworkLink') { n.localName == 'NetworkLink') {
var obj = ol.xml.pushParseAndPop({}, ol.format.KML.NETWORK_LINK_PARSERS_, var obj = ol.xml.pushParseAndPop({}, ol.format.KML.NETWORK_LINK_PARSERS_,
n, []); n, []);
networkLinks.push(obj); networkLinks.push(obj);
} }
} }
for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { for (n = node.firstElementChild; n; n = n.nextElementSibling) {
var localName = ol.xml.getLocalName(n); var localName = ol.xml.getLocalName(n);
if (goog.array.contains(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) && if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
(localName == 'Document' || (localName == 'Document' ||
localName == 'Folder' || localName == 'Folder' ||
localName == 'kml')) { localName == 'kml')) {
@@ -2107,20 +2108,18 @@ ol.format.KML.writeIconStyle_ = function(node, style, objectStack) {
'href': src 'href': src
}; };
if (!goog.isNull(size)) { if (size) {
iconProperties['w'] = size[0]; iconProperties['w'] = size[0];
iconProperties['h'] = size[1]; iconProperties['h'] = size[1];
var anchor = style.getAnchor(); // top-left var anchor = style.getAnchor(); // top-left
var origin = style.getOrigin(); // top-left var origin = style.getOrigin(); // top-left
if (!goog.isNull(origin) && !goog.isNull(iconImageSize) && if (origin && iconImageSize && origin[0] !== 0 && origin[1] !== size[1]) {
origin[0] !== 0 && origin[1] !== size[1]) {
iconProperties['x'] = origin[0]; iconProperties['x'] = origin[0];
iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]); iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]);
} }
if (!goog.isNull(anchor) && if (anchor && anchor[0] !== 0 && anchor[1] !== size[1]) {
anchor[0] !== 0 && anchor[1] !== size[1]) {
var /** @type {ol.format.KMLVec2_} */ hotSpot = { var /** @type {ol.format.KMLVec2_} */ hotSpot = {
x: anchor[0], x: anchor[0],
xunits: ol.style.IconAnchorUnits.PIXELS, xunits: ol.style.IconAnchorUnits.PIXELS,
@@ -2161,11 +2160,11 @@ ol.format.KML.writeLabelStyle_ = function(node, style, objectStack) {
var /** @type {ol.xml.NodeStackItem} */ context = {node: node}; var /** @type {ol.xml.NodeStackItem} */ context = {node: node};
var properties = {}; var properties = {};
var fill = style.getFill(); var fill = style.getFill();
if (!goog.isNull(fill)) { if (fill) {
properties['color'] = fill.getColor(); properties['color'] = fill.getColor();
} }
var scale = style.getScale(); var scale = style.getScale();
if (goog.isDef(scale) && scale !== 1) { if (scale && scale !== 1) {
properties['scale'] = scale; properties['scale'] = scale;
} }
var parentNode = objectStack[objectStack.length - 1].node; var parentNode = objectStack[objectStack.length - 1].node;
@@ -2265,21 +2264,21 @@ ol.format.KML.writePlacemark_ = function(node, feature, objectStack) {
var /** @type {ol.xml.NodeStackItem} */ context = {node: node}; var /** @type {ol.xml.NodeStackItem} */ context = {node: node};
// set id // set id
if (goog.isDefAndNotNull(feature.getId())) { if (feature.getId()) {
node.setAttribute('id', feature.getId()); node.setAttribute('id', feature.getId());
} }
// serialize properties (properties unknown to KML are not serialized) // serialize properties (properties unknown to KML are not serialized)
var properties = feature.getProperties(); var properties = feature.getProperties();
var styleFunction = feature.getStyleFunction(); var styleFunction = feature.getStyleFunction();
if (goog.isDef(styleFunction)) { if (styleFunction) {
// FIXME the styles returned by the style function are supposed to be // FIXME the styles returned by the style function are supposed to be
// resolution-independent here // resolution-independent here
var styles = styleFunction.call(feature, 0); var styles = styleFunction.call(feature, 0);
if (!goog.isNull(styles) && styles.length > 0) { if (styles && styles.length > 0) {
properties['Style'] = styles[0]; properties['Style'] = styles[0];
var textStyle = styles[0].getText(); var textStyle = styles[0].getText();
if (!goog.isNull(textStyle)) { if (textStyle) {
properties['name'] = textStyle.getText(); properties['name'] = textStyle.getText();
} }
} }
@@ -2293,7 +2292,7 @@ ol.format.KML.writePlacemark_ = function(node, feature, objectStack) {
// serialize geometry // serialize geometry
var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]); var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
geometry = geometry =
ol.format.Feature.transformWithOptions(geometry, true, options); ol.format.Feature.transformWithOptions(geometry, true, options);
} }
@@ -2389,16 +2388,16 @@ ol.format.KML.writeStyle_ = function(node, style, objectStack) {
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
var imageStyle = style.getImage(); var imageStyle = style.getImage();
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(imageStyle)) { if (imageStyle) {
properties['IconStyle'] = imageStyle; properties['IconStyle'] = imageStyle;
} }
if (!goog.isNull(textStyle)) { if (textStyle) {
properties['LabelStyle'] = textStyle; properties['LabelStyle'] = textStyle;
} }
if (!goog.isNull(strokeStyle)) { if (strokeStyle) {
properties['LineStyle'] = strokeStyle; properties['LineStyle'] = strokeStyle;
} }
if (!goog.isNull(fillStyle)) { if (fillStyle) {
properties['PolyStyle'] = fillStyle; properties['PolyStyle'] = fillStyle;
} }
var parentNode = objectStack[objectStack.length - 1].node; var parentNode = objectStack[objectStack.length - 1].node;
@@ -2749,7 +2748,7 @@ ol.format.KML.DOCUMENT_NODE_FACTORY_ = function(value, objectStack,
*/ */
ol.format.KML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, ol.format.KML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack,
opt_nodeName) { opt_nodeName) {
if (goog.isDefAndNotNull(value)) { if (value) {
goog.asserts.assertInstanceof(value, ol.geom.Geometry, goog.asserts.assertInstanceof(value, ol.geom.Geometry,
'value should be an ol.geom.Geometry'); 'value should be an ol.geom.Geometry');
var parentNode = objectStack[objectStack.length - 1].node; var parentNode = objectStack[objectStack.length - 1].node;

View File

@@ -223,7 +223,7 @@ ol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {
nodes: {}, nodes: {},
features: [] features: []
}, ol.format.OSMXML.PARSERS_, node, [options]); }, ol.format.OSMXML.PARSERS_, node, [options]);
if (goog.isDef(state.features)) { if (state.features) {
return state.features; return state.features;
} }
} }

View File

@@ -26,7 +26,7 @@ goog.inherits(ol.format.OWS, ol.format.XML);
ol.format.OWS.prototype.readFromDocument = function(doc) { ol.format.OWS.prototype.readFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be DOCUMENT'); 'doc.nodeType should be DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFromNode(n); return this.readFromNode(n);
} }
@@ -44,7 +44,7 @@ ol.format.OWS.prototype.readFromNode = function(node) {
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
var owsObject = ol.xml.pushParseAndPop({}, var owsObject = ol.xml.pushParseAndPop({},
ol.format.OWS.PARSERS_, node, []); ol.format.OWS.PARSERS_, node, []);
return goog.isDef(owsObject) ? owsObject : null; return owsObject ? owsObject : null;
}; };
@@ -92,7 +92,7 @@ ol.format.OWS.readConstraint_ = function(node, objectStack) {
goog.asserts.assert(node.localName == 'Constraint', goog.asserts.assert(node.localName == 'Constraint',
'localName should be Constraint'); 'localName should be Constraint');
var name = node.getAttribute('name'); var name = node.getAttribute('name');
if (!goog.isDef(name)) { if (!name) {
return undefined; return undefined;
} }
return ol.xml.pushParseAndPop({'name': name}, return ol.xml.pushParseAndPop({'name': name},
@@ -143,7 +143,7 @@ ol.format.OWS.readGet_ = function(node, objectStack) {
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(node.localName == 'Get', 'localName should be Get'); goog.asserts.assert(node.localName == 'Get', 'localName should be Get');
var href = ol.format.XLink.readHref(node); var href = ol.format.XLink.readHref(node);
if (!goog.isDef(href)) { if (!href) {
return undefined; return undefined;
} }
return ol.xml.pushParseAndPop({'href': href}, return ol.xml.pushParseAndPop({'href': href},
@@ -180,7 +180,7 @@ ol.format.OWS.readOperation_ = function(node, objectStack) {
var name = node.getAttribute('name'); var name = node.getAttribute('name');
var value = ol.xml.pushParseAndPop({}, var value = ol.xml.pushParseAndPop({},
ol.format.OWS.OPERATION_PARSERS_, node, objectStack); ol.format.OWS.OPERATION_PARSERS_, node, objectStack);
if (!goog.isDef(value)) { if (!value) {
return undefined; return undefined;
} }
var object = /** @type {Object} */ var object = /** @type {Object} */

View File

@@ -26,7 +26,7 @@ goog.require('ol.proj');
*/ */
ol.format.Polyline = function(opt_options) { ol.format.Polyline = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -39,13 +39,13 @@ ol.format.Polyline = function(opt_options) {
* @private * @private
* @type {number} * @type {number}
*/ */
this.factor_ = goog.isDef(options.factor) ? options.factor : 1e5; this.factor_ = options.factor ? options.factor : 1e5;
/** /**
* @private * @private
* @type {ol.geom.GeometryLayout} * @type {ol.geom.GeometryLayout}
*/ */
this.geometryLayout_ = goog.isDef(options.geometryLayout) ? this.geometryLayout_ = options.geometryLayout ?
options.geometryLayout : ol.geom.GeometryLayout.XY; options.geometryLayout : ol.geom.GeometryLayout.XY;
}; };
goog.inherits(ol.format.Polyline, ol.format.TextFeature); goog.inherits(ol.format.Polyline, ol.format.TextFeature);
@@ -65,7 +65,7 @@ goog.inherits(ol.format.Polyline, ol.format.TextFeature);
* @api * @api
*/ */
ol.format.Polyline.encodeDeltas = function(numbers, stride, opt_factor) { ol.format.Polyline.encodeDeltas = function(numbers, stride, opt_factor) {
var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; var factor = opt_factor ? opt_factor : 1e5;
var d; var d;
var lastNumbers = new Array(stride); var lastNumbers = new Array(stride);
@@ -100,7 +100,7 @@ ol.format.Polyline.encodeDeltas = function(numbers, stride, opt_factor) {
* @api * @api
*/ */
ol.format.Polyline.decodeDeltas = function(encoded, stride, opt_factor) { ol.format.Polyline.decodeDeltas = function(encoded, stride, opt_factor) {
var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; var factor = opt_factor ? opt_factor : 1e5;
var d; var d;
/** @type {Array.<number>} */ /** @type {Array.<number>} */
@@ -137,7 +137,7 @@ ol.format.Polyline.decodeDeltas = function(encoded, stride, opt_factor) {
* @api * @api
*/ */
ol.format.Polyline.encodeFloats = function(numbers, opt_factor) { ol.format.Polyline.encodeFloats = function(numbers, opt_factor) {
var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; var factor = opt_factor ? opt_factor : 1e5;
var i, ii; var i, ii;
for (i = 0, ii = numbers.length; i < ii; ++i) { for (i = 0, ii = numbers.length; i < ii; ++i) {
numbers[i] = Math.round(numbers[i] * factor); numbers[i] = Math.round(numbers[i] * factor);
@@ -157,7 +157,7 @@ ol.format.Polyline.encodeFloats = function(numbers, opt_factor) {
* @api * @api
*/ */
ol.format.Polyline.decodeFloats = function(encoded, opt_factor) { ol.format.Polyline.decodeFloats = function(encoded, opt_factor) {
var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; var factor = opt_factor ? opt_factor : 1e5;
var numbers = ol.format.Polyline.decodeSignedIntegers(encoded); var numbers = ol.format.Polyline.decodeSignedIntegers(encoded);
var i, ii; var i, ii;
for (i = 0, ii = numbers.length; i < ii; ++i) { for (i = 0, ii = numbers.length; i < ii; ++i) {
@@ -356,7 +356,7 @@ ol.format.Polyline.prototype.readProjection;
*/ */
ol.format.Polyline.prototype.writeFeatureText = function(feature, opt_options) { ol.format.Polyline.prototype.writeFeatureText = function(feature, opt_options) {
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDefAndNotNull(geometry)) { if (geometry) {
return this.writeGeometryText(geometry, opt_options); return this.writeGeometryText(geometry, opt_options);
} else { } else {
goog.asserts.fail('geometry needs to be defined'); goog.asserts.fail('geometry needs to be defined');

View File

@@ -26,7 +26,7 @@ goog.require('ol.proj');
*/ */
ol.format.TopoJSON = function(opt_options) { ol.format.TopoJSON = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -34,7 +34,7 @@ ol.format.TopoJSON = function(opt_options) {
* @inheritDoc * @inheritDoc
*/ */
this.defaultDataProjection = ol.proj.get( this.defaultDataProjection = ol.proj.get(
goog.isDefAndNotNull(options.defaultDataProjection) ? options.defaultDataProjection ?
options.defaultDataProjection : 'EPSG:4326'); options.defaultDataProjection : 'EPSG:4326');
}; };
@@ -97,7 +97,7 @@ ol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) {
*/ */
ol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) { ol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) {
var coordinates = object.coordinates; var coordinates = object.coordinates;
if (!goog.isNull(scale) && !goog.isNull(translate)) { if (scale && translate) {
ol.format.TopoJSON.transformVertex_(coordinates, scale, translate); ol.format.TopoJSON.transformVertex_(coordinates, scale, translate);
} }
return new ol.geom.Point(coordinates); return new ol.geom.Point(coordinates);
@@ -117,7 +117,7 @@ ol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale,
translate) { translate) {
var coordinates = object.coordinates; var coordinates = object.coordinates;
var i, ii; var i, ii;
if (!goog.isNull(scale) && !goog.isNull(translate)) { if (scale && translate) {
for (i = 0, ii = coordinates.length; i < ii; ++i) { for (i = 0, ii = coordinates.length; i < ii; ++i) {
ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate); ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate);
} }
@@ -251,8 +251,7 @@ ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs,
var geometry; var geometry;
var type = object.type; var type = object.type;
var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type]; var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type];
goog.asserts.assert(goog.isDef(geometryReader), goog.asserts.assert(geometryReader, 'geometryReader should be defined');
'geometryReader should be defined');
if ((type === 'Point') || (type === 'MultiPoint')) { if ((type === 'Point') || (type === 'MultiPoint')) {
geometry = geometryReader(object, scale, translate); geometry = geometryReader(object, scale, translate);
} else { } else {
@@ -261,10 +260,10 @@ ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs,
var feature = new ol.Feature(); var feature = new ol.Feature();
feature.setGeometry(/** @type {ol.geom.Geometry} */ ( feature.setGeometry(/** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions(geometry, false, opt_options))); ol.format.Feature.transformWithOptions(geometry, false, opt_options)));
if (goog.isDef(object.id)) { if (object.id) {
feature.setId(object.id); feature.setId(object.id);
} }
if (goog.isDef(object.properties)) { if (object.properties) {
feature.setProperties(object.properties); feature.setProperties(object.properties);
} }
return feature; return feature;
@@ -290,13 +289,13 @@ ol.format.TopoJSON.prototype.readFeaturesFromObject = function(
if (object.type == 'Topology') { if (object.type == 'Topology') {
var topoJSONTopology = /** @type {TopoJSONTopology} */ (object); var topoJSONTopology = /** @type {TopoJSONTopology} */ (object);
var transform, scale = null, translate = null; var transform, scale = null, translate = null;
if (goog.isDef(topoJSONTopology.transform)) { if (topoJSONTopology.transform) {
transform = topoJSONTopology.transform; transform = topoJSONTopology.transform;
scale = transform.scale; scale = transform.scale;
translate = transform.translate; translate = transform.translate;
} }
var arcs = topoJSONTopology.arcs; var arcs = topoJSONTopology.arcs;
if (goog.isDef(transform)) { if (transform) {
ol.format.TopoJSON.transformArcs_(arcs, scale, translate); ol.format.TopoJSON.transformArcs_(arcs, scale, translate);
} }
/** @type {Array.<ol.Feature>} */ /** @type {Array.<ol.Feature>} */

View File

@@ -3,6 +3,7 @@ goog.provide('ol.format.WFS');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol');
goog.require('ol.format.GML3'); goog.require('ol.format.GML3');
goog.require('ol.format.GMLBase'); goog.require('ol.format.GMLBase');
goog.require('ol.format.XMLFeature'); goog.require('ol.format.XMLFeature');
@@ -27,7 +28,7 @@ goog.require('ol.xml');
* @api stable * @api stable
*/ */
ol.format.WFS = function(opt_options) { ol.format.WFS = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
/** /**
* @private * @private
@@ -45,14 +46,14 @@ ol.format.WFS = function(opt_options) {
* @private * @private
* @type {ol.format.GMLBase} * @type {ol.format.GMLBase}
*/ */
this.gmlFormat_ = goog.isDef(options.gmlFormat) ? this.gmlFormat_ = options.gmlFormat ?
options.gmlFormat : new ol.format.GML3(); options.gmlFormat : new ol.format.GML3();
/** /**
* @private * @private
* @type {string} * @type {string}
*/ */
this.schemaLocation_ = goog.isDef(options.schemaLocation) ? this.schemaLocation_ = options.schemaLocation ?
options.schemaLocation : ol.format.WFS.SCHEMA_LOCATION; options.schemaLocation : ol.format.WFS.SCHEMA_LOCATION;
goog.base(this); goog.base(this);
@@ -123,7 +124,7 @@ ol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {
'featureNS': this.featureNS_ 'featureNS': this.featureNS_
}; };
goog.object.extend(context, this.getReadOptions(node, goog.object.extend(context, this.getReadOptions(node,
goog.isDef(opt_options) ? opt_options : {})); opt_options ? opt_options : {}));
var objectStack = [context]; var objectStack = [context];
this.gmlFormat_.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][ this.gmlFormat_.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][
'featureMember'] = 'featureMember'] =
@@ -131,7 +132,7 @@ ol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {
var features = ol.xml.pushParseAndPop([], var features = ol.xml.pushParseAndPop([],
this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node, this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
objectStack, this.gmlFormat_); objectStack, this.gmlFormat_);
if (!goog.isDef(features)) { if (!features) {
features = []; features = [];
} }
return features; return features;
@@ -195,7 +196,7 @@ ol.format.WFS.prototype.readFeatureCollectionMetadataFromDocument =
function(doc) { function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be DOCUMENT'); 'doc.nodeType should be DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFeatureCollectionMetadataFromNode(n); return this.readFeatureCollectionMetadataFromNode(n);
} }
@@ -336,7 +337,7 @@ ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_ = {
ol.format.WFS.prototype.readTransactionResponseFromDocument = function(doc) { ol.format.WFS.prototype.readTransactionResponseFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be DOCUMENT'); 'doc.nodeType should be DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readTransactionResponseFromNode(n); return this.readTransactionResponseFromNode(n);
} }
@@ -414,14 +415,14 @@ ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var featureType = context['featureType']; var featureType = context['featureType'];
var featurePrefix = context['featurePrefix']; var featurePrefix = context['featurePrefix'];
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix : featurePrefix = featurePrefix ? featurePrefix :
ol.format.WFS.FEATURE_PREFIX; ol.format.WFS.FEATURE_PREFIX;
var featureNS = context['featureNS']; var featureNS = context['featureNS'];
node.setAttribute('typeName', featurePrefix + ':' + featureType); node.setAttribute('typeName', featurePrefix + ':' + featureType);
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix, ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
featureNS); featureNS);
var fid = feature.getId(); var fid = feature.getId();
if (goog.isDef(fid)) { if (fid) {
ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack); ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack);
} }
}; };
@@ -438,19 +439,19 @@ ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
goog.asserts.assert(goog.isObject(context), 'context should be an Object'); goog.asserts.assert(goog.isObject(context), 'context should be an Object');
var featureType = context['featureType']; var featureType = context['featureType'];
var featurePrefix = context['featurePrefix']; var featurePrefix = context['featurePrefix'];
featurePrefix = goog.isDef(featurePrefix) ? featurePrefix : featurePrefix = featurePrefix ? featurePrefix :
ol.format.WFS.FEATURE_PREFIX; ol.format.WFS.FEATURE_PREFIX;
var featureNS = context['featureNS']; var featureNS = context['featureNS'];
node.setAttribute('typeName', featurePrefix + ':' + featureType); node.setAttribute('typeName', featurePrefix + ':' + featureType);
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix, ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
featureNS); featureNS);
var fid = feature.getId(); var fid = feature.getId();
if (goog.isDef(fid)) { if (fid) {
var keys = feature.getKeys(); var keys = feature.getKeys();
var values = []; var values = [];
for (var i = 0, ii = keys.length; i < ii; i++) { for (var i = 0, ii = keys.length; i < ii; i++) {
var value = feature.get(keys[i]); var value = feature.get(keys[i]);
if (goog.isDef(value)) { if (value !== undefined) {
values.push({name: keys[i], value: value}); values.push({name: keys[i], value: value});
} }
} }
@@ -474,7 +475,7 @@ ol.format.WFS.writeProperty_ = function(node, pair, objectStack) {
var name = ol.xml.createElementNS('http://www.opengis.net/wfs', 'Name'); var name = ol.xml.createElementNS('http://www.opengis.net/wfs', 'Name');
node.appendChild(name); node.appendChild(name);
ol.format.XSD.writeStringTextNode(name, pair.name); ol.format.XSD.writeStringTextNode(name, pair.name);
if (goog.isDefAndNotNull(pair.value)) { if (pair.value !== undefined && pair.value !== null) {
var value = ol.xml.createElementNS('http://www.opengis.net/wfs', 'Value'); var value = ol.xml.createElementNS('http://www.opengis.net/wfs', 'Value');
node.appendChild(value); node.appendChild(value);
if (pair.value instanceof ol.geom.Geometry) { if (pair.value instanceof ol.geom.Geometry) {
@@ -495,13 +496,13 @@ ol.format.WFS.writeProperty_ = function(node, pair, objectStack) {
* @private * @private
*/ */
ol.format.WFS.writeNative_ = function(node, nativeElement, objectStack) { ol.format.WFS.writeNative_ = function(node, nativeElement, objectStack) {
if (goog.isDef(nativeElement.vendorId)) { if (nativeElement.vendorId) {
node.setAttribute('vendorId', nativeElement.vendorId); node.setAttribute('vendorId', nativeElement.vendorId);
} }
if (goog.isDef(nativeElement.safeToIgnore)) { if (nativeElement.safeToIgnore !== undefined) {
node.setAttribute('safeToIgnore', nativeElement.safeToIgnore); node.setAttribute('safeToIgnore', nativeElement.safeToIgnore);
} }
if (goog.isDef(nativeElement.value)) { if (nativeElement.value !== undefined) {
ol.format.XSD.writeStringTextNode(node, nativeElement.value); ol.format.XSD.writeStringTextNode(node, nativeElement.value);
} }
}; };
@@ -535,12 +536,12 @@ ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
var featureNS = context['featureNS']; var featureNS = context['featureNS'];
var propertyNames = context['propertyNames']; var propertyNames = context['propertyNames'];
var srsName = context['srsName']; var srsName = context['srsName'];
var prefix = goog.isDef(featurePrefix) ? featurePrefix + ':' : ''; var prefix = featurePrefix ? featurePrefix + ':' : '';
node.setAttribute('typeName', prefix + featureType); node.setAttribute('typeName', prefix + featureType);
if (goog.isDef(srsName)) { if (srsName) {
node.setAttribute('srsName', srsName); node.setAttribute('srsName', srsName);
} }
if (goog.isDef(featureNS)) { if (featureNS) {
ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix, ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
featureNS); featureNS);
} }
@@ -551,7 +552,7 @@ ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
ol.xml.makeSimpleNodeFactory('PropertyName'), propertyNames, ol.xml.makeSimpleNodeFactory('PropertyName'), propertyNames,
objectStack); objectStack);
var bbox = context['bbox']; var bbox = context['bbox'];
if (goog.isDef(bbox)) { if (bbox) {
var child = ol.xml.createElementNS('http://www.opengis.net/ogc', 'Filter'); var child = ol.xml.createElementNS('http://www.opengis.net/ogc', 'Filter');
ol.format.WFS.writeOgcBBOX_(child, bbox, objectStack); ol.format.WFS.writeOgcBBOX_(child, bbox, objectStack);
node.appendChild(child); node.appendChild(child);
@@ -632,23 +633,23 @@ ol.format.WFS.prototype.writeGetFeature = function(options) {
'GetFeature'); 'GetFeature');
node.setAttribute('service', 'WFS'); node.setAttribute('service', 'WFS');
node.setAttribute('version', '1.1.0'); node.setAttribute('version', '1.1.0');
if (goog.isDef(options)) { if (options) {
if (goog.isDef(options.handle)) { if (options.handle) {
node.setAttribute('handle', options.handle); node.setAttribute('handle', options.handle);
} }
if (goog.isDef(options.outputFormat)) { if (options.outputFormat) {
node.setAttribute('outputFormat', options.outputFormat); node.setAttribute('outputFormat', options.outputFormat);
} }
if (goog.isDef(options.maxFeatures)) { if (options.maxFeatures !== undefined) {
node.setAttribute('maxFeatures', options.maxFeatures); node.setAttribute('maxFeatures', options.maxFeatures);
} }
if (goog.isDef(options.resultType)) { if (options.resultType) {
node.setAttribute('resultType', options.resultType); node.setAttribute('resultType', options.resultType);
} }
if (goog.isDef(options.startIndex)) { if (options.startIndex !== undefined) {
node.setAttribute('startIndex', options.startIndex); node.setAttribute('startIndex', options.startIndex);
} }
if (goog.isDef(options.count)) { if (options.count !== undefined) {
node.setAttribute('count', options.count); node.setAttribute('count', options.count);
} }
} }
@@ -657,13 +658,11 @@ ol.format.WFS.prototype.writeGetFeature = function(options) {
var context = { var context = {
node: node, node: node,
srsName: options.srsName, srsName: options.srsName,
featureNS: goog.isDef(options.featureNS) ? featureNS: options.featureNS ? options.featureNS : this.featureNS_,
options.featureNS : this.featureNS_,
featurePrefix: options.featurePrefix, featurePrefix: options.featurePrefix,
geometryName: options.geometryName, geometryName: options.geometryName,
bbox: options.bbox, bbox: options.bbox,
propertyNames: goog.isDef(options.propertyNames) ? propertyNames: options.propertyNames ? options.propertyNames : []
options.propertyNames : []
}; };
goog.asserts.assert(goog.isArray(options.featureTypes), goog.asserts.assert(goog.isArray(options.featureTypes),
'options.featureTypes should be an array'); 'options.featureTypes should be an array');
@@ -690,15 +689,15 @@ ol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes,
node.setAttribute('service', 'WFS'); node.setAttribute('service', 'WFS');
node.setAttribute('version', '1.1.0'); node.setAttribute('version', '1.1.0');
var baseObj, obj; var baseObj, obj;
if (goog.isDef(options)) { if (options) {
baseObj = goog.isDef(options.gmlOptions) ? options.gmlOptions : {}; baseObj = options.gmlOptions ? options.gmlOptions : {};
if (goog.isDef(options.handle)) { if (options.handle) {
node.setAttribute('handle', options.handle); node.setAttribute('handle', options.handle);
} }
} }
ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance', ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',
'xsi:schemaLocation', this.schemaLocation_); 'xsi:schemaLocation', this.schemaLocation_);
if (goog.isDefAndNotNull(inserts)) { if (inserts) {
obj = {node: node, featureNS: options.featureNS, obj = {node: node, featureNS: options.featureNS,
featureType: options.featureType, featurePrefix: options.featurePrefix}; featureType: options.featureType, featurePrefix: options.featurePrefix};
goog.object.extend(obj, baseObj); goog.object.extend(obj, baseObj);
@@ -707,7 +706,7 @@ ol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes,
ol.xml.makeSimpleNodeFactory('Insert'), inserts, ol.xml.makeSimpleNodeFactory('Insert'), inserts,
objectStack); objectStack);
} }
if (goog.isDefAndNotNull(updates)) { if (updates) {
obj = {node: node, featureNS: options.featureNS, obj = {node: node, featureNS: options.featureNS,
featureType: options.featureType, featurePrefix: options.featurePrefix}; featureType: options.featureType, featurePrefix: options.featurePrefix};
goog.object.extend(obj, baseObj); goog.object.extend(obj, baseObj);
@@ -716,14 +715,14 @@ ol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes,
ol.xml.makeSimpleNodeFactory('Update'), updates, ol.xml.makeSimpleNodeFactory('Update'), updates,
objectStack); objectStack);
} }
if (goog.isDefAndNotNull(deletes)) { if (deletes) {
ol.xml.pushSerializeAndPop({node: node, featureNS: options.featureNS, ol.xml.pushSerializeAndPop({node: node, featureNS: options.featureNS,
featureType: options.featureType, featurePrefix: options.featurePrefix}, featureType: options.featureType, featurePrefix: options.featurePrefix},
ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.format.WFS.TRANSACTION_SERIALIZERS_,
ol.xml.makeSimpleNodeFactory('Delete'), deletes, ol.xml.makeSimpleNodeFactory('Delete'), deletes,
objectStack); objectStack);
} }
if (goog.isDef(options.nativeElements)) { if (options.nativeElements) {
ol.xml.pushSerializeAndPop({node: node, featureNS: options.featureNS, ol.xml.pushSerializeAndPop({node: node, featureNS: options.featureNS,
featureType: options.featureType, featurePrefix: options.featurePrefix}, featureType: options.featureType, featurePrefix: options.featurePrefix},
ol.format.WFS.TRANSACTION_SERIALIZERS_, ol.format.WFS.TRANSACTION_SERIALIZERS_,
@@ -751,7 +750,7 @@ ol.format.WFS.prototype.readProjection;
ol.format.WFS.prototype.readProjectionFromDocument = function(doc) { ol.format.WFS.prototype.readProjectionFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be a DOCUMENT'); 'doc.nodeType should be a DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readProjectionFromNode(n); return this.readProjectionFromNode(n);
} }
@@ -769,11 +768,10 @@ ol.format.WFS.prototype.readProjectionFromNode = function(node) {
goog.asserts.assert(node.localName == 'FeatureCollection', goog.asserts.assert(node.localName == 'FeatureCollection',
'localName should be FeatureCollection'); 'localName should be FeatureCollection');
if (goog.isDefAndNotNull(node.firstElementChild) && if (node.firstElementChild &&
goog.isDefAndNotNull(node.firstElementChild.firstElementChild)) { node.firstElementChild.firstElementChild) {
node = node.firstElementChild.firstElementChild; node = node.firstElementChild.firstElementChild;
for (var n = node.firstElementChild; !goog.isNull(n); for (var n = node.firstElementChild; n; n = n.nextElementSibling) {
n = n.nextElementSibling) {
if (!(n.childNodes.length === 0 || if (!(n.childNodes.length === 0 ||
(n.childNodes.length === 1 && (n.childNodes.length === 1 &&
n.firstChild.nodeType === 3))) { n.firstChild.nodeType === 3))) {

View File

@@ -1,7 +1,7 @@
goog.provide('ol.format.WKT'); goog.provide('ol.format.WKT');
goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('ol');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.format.Feature'); goog.require('ol.format.Feature');
goog.require('ol.format.TextFeature'); goog.require('ol.format.TextFeature');
@@ -29,7 +29,7 @@ goog.require('ol.geom.Polygon');
*/ */
ol.format.WKT = function(opt_options) { ol.format.WKT = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options ? opt_options : {};
goog.base(this); goog.base(this);
@@ -38,7 +38,7 @@ ol.format.WKT = function(opt_options) {
* @type {boolean} * @type {boolean}
* @private * @private
*/ */
this.splitCollection_ = goog.isDef(options.splitCollection) ? this.splitCollection_ = options.splitCollection !== undefined ?
options.splitCollection : false; options.splitCollection : false;
}; };
@@ -59,7 +59,7 @@ ol.format.WKT.EMPTY = 'EMPTY';
*/ */
ol.format.WKT.encodePointGeometry_ = function(geom) { ol.format.WKT.encodePointGeometry_ = function(geom) {
var coordinates = geom.getCoordinates(); var coordinates = geom.getCoordinates();
if (goog.array.isEmpty(coordinates)) { if (coordinates.length === 0) {
return ''; return '';
} }
return coordinates[0] + ' ' + coordinates[1]; return coordinates[0] + ' ' + coordinates[1];
@@ -168,8 +168,7 @@ ol.format.WKT.encodeMultiPolygonGeometry_ = function(geom) {
ol.format.WKT.encode_ = function(geom) { ol.format.WKT.encode_ = function(geom) {
var type = geom.getType(); var type = geom.getType();
var geometryEncoder = ol.format.WKT.GeometryEncoder_[type]; var geometryEncoder = ol.format.WKT.GeometryEncoder_[type];
goog.asserts.assert(goog.isDef(geometryEncoder), goog.asserts.assert(geometryEncoder, 'geometryEncoder should be defined');
'geometryEncoder should be defined');
var enc = geometryEncoder(geom); var enc = geometryEncoder(geom);
type = type.toUpperCase(); type = type.toUpperCase();
if (enc.length === 0) { if (enc.length === 0) {
@@ -226,7 +225,7 @@ ol.format.WKT.prototype.readFeature;
*/ */
ol.format.WKT.prototype.readFeatureFromText = function(text, opt_options) { ol.format.WKT.prototype.readFeatureFromText = function(text, opt_options) {
var geom = this.readGeometryFromText(text, opt_options); var geom = this.readGeometryFromText(text, opt_options);
if (goog.isDef(geom)) { if (geom) {
var feature = new ol.Feature(); var feature = new ol.Feature();
feature.setGeometry(geom); feature.setGeometry(geom);
return feature; return feature;
@@ -287,7 +286,7 @@ ol.format.WKT.prototype.readGeometry;
*/ */
ol.format.WKT.prototype.readGeometryFromText = function(text, opt_options) { ol.format.WKT.prototype.readGeometryFromText = function(text, opt_options) {
var geometry = this.parse_(text); var geometry = this.parse_(text);
if (goog.isDef(geometry)) { if (geometry) {
return /** @type {ol.geom.Geometry} */ ( return /** @type {ol.geom.Geometry} */ (
ol.format.Feature.transformWithOptions(geometry, false, opt_options)); ol.format.Feature.transformWithOptions(geometry, false, opt_options));
} else { } else {
@@ -313,7 +312,7 @@ ol.format.WKT.prototype.writeFeature;
*/ */
ol.format.WKT.prototype.writeFeatureText = function(feature, opt_options) { ol.format.WKT.prototype.writeFeatureText = function(feature, opt_options) {
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (goog.isDef(geometry)) { if (geometry) {
return this.writeGeometryText(geometry, opt_options); return this.writeGeometryText(geometry, opt_options);
} }
return ''; return '';
@@ -428,7 +427,7 @@ ol.format.WKT.Lexer.prototype.isAlpha_ = function(c) {
* @private * @private
*/ */
ol.format.WKT.Lexer.prototype.isNumeric_ = function(c, opt_decimal) { ol.format.WKT.Lexer.prototype.isNumeric_ = function(c, opt_decimal) {
var decimal = goog.isDef(opt_decimal) ? opt_decimal : false; var decimal = opt_decimal !== undefined ? opt_decimal : false;
return c >= '0' && c <= '9' || c == '.' && !decimal; return c >= '0' && c <= '9' || c == '.' && !decimal;
}; };
@@ -604,7 +603,7 @@ ol.format.WKT.Parser.prototype.parseGeometry_ = function() {
} else { } else {
var parser = ol.format.WKT.Parser.GeometryParser_[geomType]; var parser = ol.format.WKT.Parser.GeometryParser_[geomType];
var ctor = ol.format.WKT.Parser.GeometryConstructor_[geomType]; var ctor = ol.format.WKT.Parser.GeometryConstructor_[geomType];
if (!goog.isDef(parser) || !goog.isDef(ctor)) { if (!parser || !ctor) {
throw new Error('Invalid geometry type: ' + geomType); throw new Error('Invalid geometry type: ' + geomType);
} }
var coordinates = parser.call(this); var coordinates = parser.call(this);

View File

@@ -1,10 +1,9 @@
goog.provide('ol.format.WMSCapabilities'); goog.provide('ol.format.WMSCapabilities');
goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('goog.string'); goog.require('ol');
goog.require('ol.format.XLink'); goog.require('ol.format.XLink');
goog.require('ol.format.XML'); goog.require('ol.format.XML');
goog.require('ol.format.XSD'); goog.require('ol.format.XSD');
@@ -50,7 +49,7 @@ ol.format.WMSCapabilities.prototype.read;
ol.format.WMSCapabilities.prototype.readFromDocument = function(doc) { ol.format.WMSCapabilities.prototype.readFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be DOCUMENT'); 'doc.nodeType should be DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFromNode(n); return this.readFromNode(n);
} }
@@ -69,12 +68,12 @@ ol.format.WMSCapabilities.prototype.readFromNode = function(node) {
goog.asserts.assert(node.localName == 'WMS_Capabilities' || goog.asserts.assert(node.localName == 'WMS_Capabilities' ||
node.localName == 'WMT_MS_Capabilities', node.localName == 'WMT_MS_Capabilities',
'localName should be WMS_Capabilities or WMT_MS_Capabilities'); 'localName should be WMS_Capabilities or WMT_MS_Capabilities');
this.version = goog.string.trim(node.getAttribute('version')); this.version = node.getAttribute('version').trim();
goog.asserts.assertString(this.version, 'this.version should be a string'); goog.asserts.assertString(this.version, 'this.version should be a string');
var wmsCapabilityObject = ol.xml.pushParseAndPop({ var wmsCapabilityObject = ol.xml.pushParseAndPop({
'version': this.version 'version': this.version
}, ol.format.WMSCapabilities.PARSERS_, node, []); }, ol.format.WMSCapabilities.PARSERS_, node, []);
return goog.isDef(wmsCapabilityObject) ? wmsCapabilityObject : null; return wmsCapabilityObject ? wmsCapabilityObject : null;
}; };
@@ -142,7 +141,7 @@ ol.format.WMSCapabilities.readEXGeographicBoundingBox_ =
{}, {},
ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_, ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_,
node, objectStack); node, objectStack);
if (!goog.isDef(geographicBoundingBox)) { if (!geographicBoundingBox) {
return undefined; return undefined;
} }
var westBoundLongitude = /** @type {number|undefined} */ var westBoundLongitude = /** @type {number|undefined} */
@@ -153,8 +152,8 @@ ol.format.WMSCapabilities.readEXGeographicBoundingBox_ =
(geographicBoundingBox['eastBoundLongitude']); (geographicBoundingBox['eastBoundLongitude']);
var northBoundLatitude = /** @type {number|undefined} */ var northBoundLatitude = /** @type {number|undefined} */
(geographicBoundingBox['northBoundLatitude']); (geographicBoundingBox['northBoundLatitude']);
if (!goog.isDef(westBoundLongitude) || !goog.isDef(southBoundLatitude) || if (westBoundLongitude === undefined || southBoundLatitude === undefined ||
!goog.isDef(eastBoundLongitude) || !goog.isDef(northBoundLatitude)) { eastBoundLongitude === undefined || northBoundLatitude === undefined) {
return undefined; return undefined;
} }
return /** @type {ol.Extent} */ ([ return /** @type {ol.Extent} */ ([
@@ -297,66 +296,64 @@ ol.format.WMSCapabilities.readLayer_ = function(node, objectStack) {
var layerObject = /** @type {Object.<string,*>} */ (ol.xml.pushParseAndPop( var layerObject = /** @type {Object.<string,*>} */ (ol.xml.pushParseAndPop(
{}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack)); {}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack));
if (!goog.isDef(layerObject)) { if (!layerObject) {
return undefined; return undefined;
} }
var queryable = var queryable =
ol.format.XSD.readBooleanString(node.getAttribute('queryable')); ol.format.XSD.readBooleanString(node.getAttribute('queryable'));
if (!goog.isDef(queryable)) { if (queryable === undefined) {
queryable = parentLayerObject['queryable']; queryable = parentLayerObject['queryable'];
} }
layerObject['queryable'] = goog.isDef(queryable) ? queryable : false; layerObject['queryable'] = queryable !== undefined ? queryable : false;
var cascaded = ol.format.XSD.readNonNegativeIntegerString( var cascaded = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('cascaded')); node.getAttribute('cascaded'));
if (!goog.isDef(cascaded)) { if (cascaded === undefined) {
cascaded = parentLayerObject['cascaded']; cascaded = parentLayerObject['cascaded'];
} }
layerObject['cascaded'] = cascaded; layerObject['cascaded'] = cascaded;
var opaque = ol.format.XSD.readBooleanString(node.getAttribute('opaque')); var opaque = ol.format.XSD.readBooleanString(node.getAttribute('opaque'));
if (!goog.isDef(opaque)) { if (opaque === undefined) {
opaque = parentLayerObject['opaque']; opaque = parentLayerObject['opaque'];
} }
layerObject['opaque'] = goog.isDef(opaque) ? opaque : false; layerObject['opaque'] = opaque !== undefined ? opaque : false;
var noSubsets = var noSubsets =
ol.format.XSD.readBooleanString(node.getAttribute('noSubsets')); ol.format.XSD.readBooleanString(node.getAttribute('noSubsets'));
if (!goog.isDef(noSubsets)) { if (noSubsets === undefined) {
noSubsets = parentLayerObject['noSubsets']; noSubsets = parentLayerObject['noSubsets'];
} }
layerObject['noSubsets'] = goog.isDef(noSubsets) ? noSubsets : false; layerObject['noSubsets'] = noSubsets !== undefined ? noSubsets : false;
var fixedWidth = var fixedWidth =
ol.format.XSD.readDecimalString(node.getAttribute('fixedWidth')); ol.format.XSD.readDecimalString(node.getAttribute('fixedWidth'));
if (!goog.isDef(fixedWidth)) { if (!fixedWidth) {
fixedWidth = parentLayerObject['fixedWidth']; fixedWidth = parentLayerObject['fixedWidth'];
} }
layerObject['fixedWidth'] = fixedWidth; layerObject['fixedWidth'] = fixedWidth;
var fixedHeight = var fixedHeight =
ol.format.XSD.readDecimalString(node.getAttribute('fixedHeight')); ol.format.XSD.readDecimalString(node.getAttribute('fixedHeight'));
if (!goog.isDef(fixedHeight)) { if (!fixedHeight) {
fixedHeight = parentLayerObject['fixedHeight']; fixedHeight = parentLayerObject['fixedHeight'];
} }
layerObject['fixedHeight'] = fixedHeight; layerObject['fixedHeight'] = fixedHeight;
// See 7.2.4.8 // See 7.2.4.8
var addKeys = ['Style', 'CRS', 'AuthorityURL']; var addKeys = ['Style', 'CRS', 'AuthorityURL'];
goog.array.forEach(addKeys, function(key) { addKeys.forEach(function(key) {
var parentValue = parentLayerObject[key]; if (key in parentLayerObject) {
if (goog.isDef(parentValue)) {
var childValue = goog.object.setIfUndefined(layerObject, key, []); var childValue = goog.object.setIfUndefined(layerObject, key, []);
childValue = childValue.concat(parentValue); childValue = childValue.concat(parentLayerObject[key]);
layerObject[key] = childValue; layerObject[key] = childValue;
} }
}); });
var replaceKeys = ['EX_GeographicBoundingBox', 'BoundingBox', 'Dimension', var replaceKeys = ['EX_GeographicBoundingBox', 'BoundingBox', 'Dimension',
'Attribution', 'MinScaleDenominator', 'MaxScaleDenominator']; 'Attribution', 'MinScaleDenominator', 'MaxScaleDenominator'];
goog.array.forEach(replaceKeys, function(key) { replaceKeys.forEach(function(key) {
var childValue = layerObject[key]; if (!(key in layerObject)) {
if (!goog.isDef(childValue)) {
var parentValue = parentLayerObject[key]; var parentValue = parentLayerObject[key];
layerObject[key] = parentValue; layerObject[key] = parentValue;
} }
@@ -482,7 +479,7 @@ ol.format.WMSCapabilities.readSizedFormatOnlineresource_ =
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
var formatOnlineresource = var formatOnlineresource =
ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack); ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if (goog.isDef(formatOnlineresource)) { if (formatOnlineresource) {
var size = [ var size = [
ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('width')), ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('width')),
ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('height')) ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('height'))
@@ -507,7 +504,7 @@ ol.format.WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {
'localName should be AuthorityURL'); 'localName should be AuthorityURL');
var authorityObject = var authorityObject =
ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack); ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if (goog.isDef(authorityObject)) { if (authorityObject) {
authorityObject['name'] = node.getAttribute('name'); authorityObject['name'] = node.getAttribute('name');
return authorityObject; return authorityObject;
} }
@@ -528,7 +525,7 @@ ol.format.WMSCapabilities.readMetadataURL_ = function(node, objectStack) {
'localName should be MetadataURL'); 'localName should be MetadataURL');
var metadataObject = var metadataObject =
ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack); ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
if (goog.isDef(metadataObject)) { if (metadataObject) {
metadataObject['type'] = node.getAttribute('type'); metadataObject['type'] = node.getAttribute('type');
return metadataObject; return metadataObject;
} }

View File

@@ -4,7 +4,6 @@ goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.object'); goog.require('goog.object');
goog.require('goog.string');
goog.require('ol.format.GML2'); goog.require('ol.format.GML2');
goog.require('ol.format.XMLFeature'); goog.require('ol.format.XMLFeature');
goog.require('ol.xml'); goog.require('ol.xml');
@@ -75,9 +74,10 @@ ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
return features; return features;
} }
if (localName == 'msGMLOutput') { if (localName == 'msGMLOutput') {
goog.array.forEach(node.childNodes, function(layer) { for (var i = 0, ii = node.childNodes.length; i < ii; i++) {
var layer = node.childNodes[i];
if (layer.nodeType !== goog.dom.NodeType.ELEMENT) { if (layer.nodeType !== goog.dom.NodeType.ELEMENT) {
return; continue;
} }
var context = objectStack[0]; var context = objectStack[0];
goog.asserts.assert(goog.isObject(context), goog.asserts.assert(goog.isObject(context),
@@ -87,8 +87,8 @@ ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
ol.format.WMSGetFeatureInfo.layerIdentifier_) >= 0, ol.format.WMSGetFeatureInfo.layerIdentifier_) >= 0,
'localName of layer node should match layerIdentifier'); 'localName of layer node should match layerIdentifier');
var featureType = goog.string.remove(layer.localName, var toRemove = ol.format.WMSGetFeatureInfo.layerIdentifier_;
ol.format.WMSGetFeatureInfo.layerIdentifier_) + var featureType = layer.localName.replace(toRemove, '') +
ol.format.WMSGetFeatureInfo.featureIdentifier_; ol.format.WMSGetFeatureInfo.featureIdentifier_;
context['featureType'] = featureType; context['featureType'] = featureType;
@@ -102,16 +102,16 @@ ol.format.WMSGetFeatureInfo.prototype.readFeatures_ =
layer.namespaceURI = this.featureNS_; layer.namespaceURI = this.featureNS_;
var layerFeatures = ol.xml.pushParseAndPop( var layerFeatures = ol.xml.pushParseAndPop(
[], parsersNS, layer, objectStack, this.gmlFormat_); [], parsersNS, layer, objectStack, this.gmlFormat_);
if (goog.isDef(layerFeatures)) { if (layerFeatures) {
goog.array.extend(features, layerFeatures); goog.array.extend(features, layerFeatures);
} }
}, this); }
} }
if (localName == 'FeatureCollection') { if (localName == 'FeatureCollection') {
var gmlFeatures = ol.xml.pushParseAndPop([], var gmlFeatures = ol.xml.pushParseAndPop([],
this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node, this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
[{}], this.gmlFormat_); [{}], this.gmlFormat_);
if (goog.isDef(gmlFeatures)) { if (gmlFeatures) {
features = gmlFeatures; features = gmlFeatures;
} }
} }
@@ -140,7 +140,7 @@ ol.format.WMSGetFeatureInfo.prototype.readFeaturesFromNode =
'featureType': this.featureType, 'featureType': this.featureType,
'featureNS': this.featureNS 'featureNS': this.featureNS
}; };
if (goog.isDef(opt_options)) { if (opt_options) {
goog.object.extend(options, this.getReadOptions(node, opt_options)); goog.object.extend(options, this.getReadOptions(node, opt_options));
} }
return this.readFeatures_(node, [options]); return this.readFeatures_(node, [options]);

View File

@@ -2,7 +2,6 @@ goog.provide('ol.format.WMTSCapabilities');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dom.NodeType'); goog.require('goog.dom.NodeType');
goog.require('goog.string');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.format.OWS'); goog.require('ol.format.OWS');
goog.require('ol.format.XLink'); goog.require('ol.format.XLink');
@@ -50,7 +49,7 @@ ol.format.WMTSCapabilities.prototype.read;
ol.format.WMTSCapabilities.prototype.readFromDocument = function(doc) { ol.format.WMTSCapabilities.prototype.readFromDocument = function(doc) {
goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT, goog.asserts.assert(doc.nodeType == goog.dom.NodeType.DOCUMENT,
'doc.nodeType should be DOCUMENT'); 'doc.nodeType should be DOCUMENT');
for (var n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (var n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
return this.readFromNode(n); return this.readFromNode(n);
} }
@@ -68,16 +67,16 @@ ol.format.WMTSCapabilities.prototype.readFromNode = function(node) {
'node.nodeType should be ELEMENT'); 'node.nodeType should be ELEMENT');
goog.asserts.assert(node.localName == 'Capabilities', goog.asserts.assert(node.localName == 'Capabilities',
'localName should be Capabilities'); 'localName should be Capabilities');
this.version = goog.string.trim(node.getAttribute('version')); this.version = node.getAttribute('version').trim();
goog.asserts.assertString(this.version, 'this.version should be a string'); goog.asserts.assertString(this.version, 'this.version should be a string');
var WMTSCapabilityObject = this.owsParser_.readFromNode(node); var WMTSCapabilityObject = this.owsParser_.readFromNode(node);
if (!goog.isDef(WMTSCapabilityObject)) { if (!WMTSCapabilityObject) {
return null; return null;
} }
WMTSCapabilityObject['version'] = this.version; WMTSCapabilityObject['version'] = this.version;
WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject, WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject,
ol.format.WMTSCapabilities.PARSERS_, node, []); ol.format.WMTSCapabilities.PARSERS_, node, []);
return goog.isDef(WMTSCapabilityObject) ? WMTSCapabilityObject : null; return WMTSCapabilityObject ? WMTSCapabilityObject : null;
}; };
@@ -134,7 +133,7 @@ ol.format.WMTSCapabilities.readTileMatrixSet_ = function(node, objectStack) {
ol.format.WMTSCapabilities.readStyle_ = function(node, objectStack) { ol.format.WMTSCapabilities.readStyle_ = function(node, objectStack) {
var style = ol.xml.pushParseAndPop({}, var style = ol.xml.pushParseAndPop({},
ol.format.WMTSCapabilities.STYLE_PARSERS_, node, objectStack); ol.format.WMTSCapabilities.STYLE_PARSERS_, node, objectStack);
if (!goog.isDef(style)) { if (!style) {
return undefined; return undefined;
} }
var isDefault = node.getAttribute('isDefault') === 'true'; var isDefault = node.getAttribute('isDefault') === 'true';
@@ -168,13 +167,13 @@ ol.format.WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {
var template = node.getAttribute('template'); var template = node.getAttribute('template');
var resourceType = node.getAttribute('resourceType'); var resourceType = node.getAttribute('resourceType');
var resource = {}; var resource = {};
if (goog.isDef(format)) { if (format) {
resource['format'] = format; resource['format'] = format;
} }
if (goog.isDef(template)) { if (template) {
resource['template'] = template; resource['template'] = template;
} }
if (goog.isDef(resourceType)) { if (resourceType) {
resource['resourceType'] = resourceType; resource['resourceType'] = resourceType;
} }
return resource; return resource;
@@ -219,7 +218,7 @@ ol.format.WMTSCapabilities.readLegendUrl_ = function(node, objectStack) {
*/ */
ol.format.WMTSCapabilities.readCoordinates_ = function(node, objectStack) { ol.format.WMTSCapabilities.readCoordinates_ = function(node, objectStack) {
var coordinates = ol.format.XSD.readString(node).split(' '); var coordinates = ol.format.XSD.readString(node).split(' ');
if (!goog.isDef(coordinates) || coordinates.length != 2) { if (!coordinates || coordinates.length != 2) {
return undefined; return undefined;
} }
var x = +coordinates[0]; var x = +coordinates[0];

View File

@@ -107,7 +107,7 @@ ol.format.XMLFeature.prototype.readFeaturesFromDocument = function(
/** @type {Array.<ol.Feature>} */ /** @type {Array.<ol.Feature>} */
var features = []; var features = [];
var n; var n;
for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { for (n = doc.firstChild; n; n = n.nextSibling) {
if (n.nodeType == goog.dom.NodeType.ELEMENT) { if (n.nodeType == goog.dom.NodeType.ELEMENT) {
goog.array.extend(features, this.readFeaturesFromNode(n, opt_options)); goog.array.extend(features, this.readFeaturesFromNode(n, opt_options));
} }

View File

@@ -2,6 +2,7 @@ goog.provide('ol.format.XSD');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.string'); goog.require('goog.string');
goog.require('ol');
goog.require('ol.xml'); goog.require('ol.xml');
@@ -29,7 +30,7 @@ ol.format.XSD.readBoolean = function(node) {
ol.format.XSD.readBooleanString = function(string) { ol.format.XSD.readBooleanString = function(string) {
var m = /^\s*(true|1)|(false|0)\s*$/.exec(string); var m = /^\s*(true|1)|(false|0)\s*$/.exec(string);
if (m) { if (m) {
return goog.isDef(m[1]) || false; return m[1] !== undefined || false;
} else { } else {
return undefined; return undefined;
} }
@@ -56,7 +57,7 @@ ol.format.XSD.readDateTime = function(node) {
if (m[7] != 'Z') { if (m[7] != 'Z') {
var sign = m[8] == '-' ? -1 : 1; var sign = m[8] == '-' ? -1 : 1;
dateTime += sign * 60 * parseInt(m[9], 10); dateTime += sign * 60 * parseInt(m[9], 10);
if (goog.isDef(m[10])) { if (m[10] !== undefined) {
dateTime += sign * 60 * 60 * parseInt(m[10], 10); dateTime += sign * 60 * 60 * parseInt(m[10], 10);
} }
} }
@@ -121,8 +122,7 @@ ol.format.XSD.readNonNegativeIntegerString = function(string) {
* @return {string|undefined} String. * @return {string|undefined} String.
*/ */
ol.format.XSD.readString = function(node) { ol.format.XSD.readString = function(node) {
var s = ol.xml.getAllTextContent(node, false); return ol.xml.getAllTextContent(node, false).trim();
return goog.string.trim(s);
}; };

View File

@@ -62,7 +62,7 @@ ol.Geolocation = function(opt_options) {
goog.base(this); goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options || {};
/** /**
* The unprojected (EPSG:4326) device position. * The unprojected (EPSG:4326) device position.
@@ -90,14 +90,14 @@ ol.Geolocation = function(opt_options) {
this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING), this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING),
this.handleTrackingChanged_, false, this); this.handleTrackingChanged_, false, this);
if (goog.isDef(options.projection)) { if (options.projection !== undefined) {
this.setProjection(ol.proj.get(options.projection)); this.setProjection(ol.proj.get(options.projection));
} }
if (goog.isDef(options.trackingOptions)) { if (options.trackingOptions !== undefined) {
this.setTrackingOptions(options.trackingOptions); this.setTrackingOptions(options.trackingOptions);
} }
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false); this.setTracking(options.tracking !== undefined ? options.tracking : false);
}; };
goog.inherits(ol.Geolocation, ol.Object); goog.inherits(ol.Geolocation, ol.Object);
@@ -117,10 +117,10 @@ ol.Geolocation.prototype.disposeInternal = function() {
*/ */
ol.Geolocation.prototype.handleProjectionChanged_ = function() { ol.Geolocation.prototype.handleProjectionChanged_ = function() {
var projection = this.getProjection(); var projection = this.getProjection();
if (goog.isDefAndNotNull(projection)) { if (projection) {
this.transform_ = ol.proj.getTransformFromProjections( this.transform_ = ol.proj.getTransformFromProjections(
ol.proj.get('EPSG:4326'), projection); ol.proj.get('EPSG:4326'), projection);
if (!goog.isNull(this.position_)) { if (this.position_) {
this.set( this.set(
ol.GeolocationProperty.POSITION, this.transform_(this.position_)); ol.GeolocationProperty.POSITION, this.transform_(this.position_));
} }
@@ -134,12 +134,12 @@ ol.Geolocation.prototype.handleProjectionChanged_ = function() {
ol.Geolocation.prototype.handleTrackingChanged_ = function() { ol.Geolocation.prototype.handleTrackingChanged_ = function() {
if (ol.has.GEOLOCATION) { if (ol.has.GEOLOCATION) {
var tracking = this.getTracking(); var tracking = this.getTracking();
if (tracking && !goog.isDef(this.watchId_)) { if (tracking && this.watchId_ === undefined) {
this.watchId_ = goog.global.navigator.geolocation.watchPosition( this.watchId_ = goog.global.navigator.geolocation.watchPosition(
goog.bind(this.positionChange_, this), goog.bind(this.positionChange_, this),
goog.bind(this.positionError_, this), goog.bind(this.positionError_, this),
this.getTrackingOptions()); this.getTrackingOptions());
} else if (!tracking && goog.isDef(this.watchId_)) { } else if (!tracking && this.watchId_ !== undefined) {
goog.global.navigator.geolocation.clearWatch(this.watchId_); goog.global.navigator.geolocation.clearWatch(this.watchId_);
this.watchId_ = undefined; this.watchId_ = undefined;
} }
@@ -155,13 +155,13 @@ ol.Geolocation.prototype.positionChange_ = function(position) {
var coords = position.coords; var coords = position.coords;
this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy); this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy);
this.set(ol.GeolocationProperty.ALTITUDE, this.set(ol.GeolocationProperty.ALTITUDE,
goog.isNull(coords.altitude) ? undefined : coords.altitude); coords.altitude === null ? undefined : coords.altitude);
this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY, this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY,
goog.isNull(coords.altitudeAccuracy) ? coords.altitudeAccuracy === null ?
undefined : coords.altitudeAccuracy); undefined : coords.altitudeAccuracy);
this.set(ol.GeolocationProperty.HEADING, goog.isNull(coords.heading) ? this.set(ol.GeolocationProperty.HEADING, coords.heading === null ?
undefined : goog.math.toRadians(coords.heading)); undefined : goog.math.toRadians(coords.heading));
if (goog.isNull(this.position_)) { if (!this.position_) {
this.position_ = [coords.longitude, coords.latitude]; this.position_ = [coords.longitude, coords.latitude];
} else { } else {
this.position_[0] = coords.longitude; this.position_[0] = coords.longitude;
@@ -170,7 +170,7 @@ ol.Geolocation.prototype.positionChange_ = function(position) {
var projectedPosition = this.transform_(this.position_); var projectedPosition = this.transform_(this.position_);
this.set(ol.GeolocationProperty.POSITION, projectedPosition); this.set(ol.GeolocationProperty.POSITION, projectedPosition);
this.set(ol.GeolocationProperty.SPEED, this.set(ol.GeolocationProperty.SPEED,
goog.isNull(coords.speed) ? undefined : coords.speed); coords.speed === null ? undefined : coords.speed);
var geometry = ol.geom.Polygon.circular( var geometry = ol.geom.Polygon.circular(
ol.sphere.WGS84, this.position_, coords.accuracy); ol.sphere.WGS84, this.position_, coords.accuracy);
geometry.applyTransform(this.transform_); geometry.applyTransform(this.transform_);

View File

@@ -23,7 +23,7 @@ goog.require('ol.proj');
*/ */
ol.geom.Circle = function(center, opt_radius, opt_layout) { ol.geom.Circle = function(center, opt_radius, opt_layout) {
goog.base(this); goog.base(this);
var radius = goog.isDef(opt_radius) ? opt_radius : 0; var radius = opt_radius ? opt_radius : 0;
this.setCenterAndRadius(center, radius, opt_layout); this.setCenterAndRadius(center, radius, opt_layout);
}; };
goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry); goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry);
@@ -189,11 +189,11 @@ ol.geom.Circle.prototype.setCenter = function(center) {
*/ */
ol.geom.Circle.prototype.setCenterAndRadius = ol.geom.Circle.prototype.setCenterAndRadius =
function(center, radius, opt_layout) { function(center, radius, opt_layout) {
if (goog.isNull(center)) { if (!center) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
} else { } else {
this.setLayout(opt_layout, center, 0); this.setLayout(opt_layout, center, 0);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
/** @type {Array.<number>} */ /** @type {Array.<number>} */
@@ -228,8 +228,8 @@ ol.geom.Circle.prototype.setFlatCoordinates =
* @api * @api
*/ */
ol.geom.Circle.prototype.setRadius = function(radius) { ol.geom.Circle.prototype.setRadius = function(radius) {
goog.asserts.assert(!goog.isNull(this.flatCoordinates), goog.asserts.assert(this.flatCoordinates,
'this.flatCoordinates cannot be null'); 'truthy this.flatCoordinates expected');
this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius; this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;
this.changed(); this.changed();
}; };

View File

@@ -154,7 +154,7 @@ ol.geom.flat.closest.getClosestPoint = function(flatCoordinates, offset, end,
} }
} }
goog.asserts.assert(maxDelta > 0, 'maxDelta should be larger than 0'); goog.asserts.assert(maxDelta > 0, 'maxDelta should be larger than 0');
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
var index = offset + stride; var index = offset + stride;
while (index < end) { while (index < end) {
ol.geom.flat.closest.point( ol.geom.flat.closest.point(
@@ -217,7 +217,7 @@ ol.geom.flat.closest.getClosestPoint = function(flatCoordinates, offset, end,
ol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends, ol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends,
stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,
opt_tmpPoint) { opt_tmpPoint) {
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
var i, ii; var i, ii;
for (i = 0, ii = ends.length; i < ii; ++i) { for (i = 0, ii = ends.length; i < ii; ++i) {
var end = ends[i]; var end = ends[i];
@@ -247,7 +247,7 @@ ol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends,
ol.geom.flat.closest.getssClosestPoint = function(flatCoordinates, offset, ol.geom.flat.closest.getssClosestPoint = function(flatCoordinates, offset,
endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,
opt_tmpPoint) { opt_tmpPoint) {
var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
var i, ii; var i, ii;
for (i = 0, ii = endss.length; i < ii; ++i) { for (i = 0, ii = endss.length; i < ii; ++i) {
var ends = endss[i]; var ends = endss[i];

View File

@@ -55,7 +55,7 @@ ol.geom.flat.deflate.coordinates =
*/ */
ol.geom.flat.deflate.coordinatess = ol.geom.flat.deflate.coordinatess =
function(flatCoordinates, offset, coordinatess, stride, opt_ends) { function(flatCoordinates, offset, coordinatess, stride, opt_ends) {
var ends = goog.isDef(opt_ends) ? opt_ends : []; var ends = opt_ends ? opt_ends : [];
var i = 0; var i = 0;
var j, jj; var j, jj;
for (j = 0, jj = coordinatess.length; j < jj; ++j) { for (j = 0, jj = coordinatess.length; j < jj; ++j) {
@@ -79,7 +79,7 @@ ol.geom.flat.deflate.coordinatess =
*/ */
ol.geom.flat.deflate.coordinatesss = ol.geom.flat.deflate.coordinatesss =
function(flatCoordinates, offset, coordinatesss, stride, opt_endss) { function(flatCoordinates, offset, coordinatesss, stride, opt_endss) {
var endss = goog.isDef(opt_endss) ? opt_endss : []; var endss = opt_endss ? opt_endss : [];
var i = 0; var i = 0;
var j, jj; var j, jj;
for (j = 0, jj = coordinatesss.length; j < jj; ++j) { for (j = 0, jj = coordinatesss.length; j < jj; ++j) {

View File

@@ -15,11 +15,11 @@ goog.require('goog.asserts');
ol.geom.flat.flip.flipXY = ol.geom.flat.flip.flipXY =
function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) { function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) {
var dest, destOffset; var dest, destOffset;
if (goog.isDef(opt_dest)) { if (opt_dest !== undefined) {
dest = opt_dest; dest = opt_dest;
destOffset = goog.isDef(opt_destOffset) ? opt_destOffset : 0; destOffset = opt_destOffset !== undefined ? opt_destOffset : 0;
} else { } else {
goog.asserts.assert(!goog.isDef(opt_destOffset), goog.asserts.assert(opt_destOffset === undefined,
'opt_destOffSet should be defined'); 'opt_destOffSet should be defined');
dest = []; dest = [];
destOffset = 0; destOffset = 0;

View File

@@ -11,7 +11,7 @@ goog.provide('ol.geom.flat.inflate');
*/ */
ol.geom.flat.inflate.coordinates = ol.geom.flat.inflate.coordinates =
function(flatCoordinates, offset, end, stride, opt_coordinates) { function(flatCoordinates, offset, end, stride, opt_coordinates) {
var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : []; var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];
var i = 0; var i = 0;
var j; var j;
for (j = offset; j < end; j += stride) { for (j = offset; j < end; j += stride) {
@@ -32,7 +32,7 @@ ol.geom.flat.inflate.coordinates =
*/ */
ol.geom.flat.inflate.coordinatess = ol.geom.flat.inflate.coordinatess =
function(flatCoordinates, offset, ends, stride, opt_coordinatess) { function(flatCoordinates, offset, ends, stride, opt_coordinatess) {
var coordinatess = goog.isDef(opt_coordinatess) ? opt_coordinatess : []; var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];
var i = 0; var i = 0;
var j, jj; var j, jj;
for (j = 0, jj = ends.length; j < jj; ++j) { for (j = 0, jj = ends.length; j < jj; ++j) {
@@ -57,7 +57,7 @@ ol.geom.flat.inflate.coordinatess =
*/ */
ol.geom.flat.inflate.coordinatesss = ol.geom.flat.inflate.coordinatesss =
function(flatCoordinates, offset, endss, stride, opt_coordinatesss) { function(flatCoordinates, offset, endss, stride, opt_coordinatesss) {
var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : []; var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];
var i = 0; var i = 0;
var j, jj; var j, jj;
for (j = 0, jj = endss.length; j < jj; ++j) { for (j = 0, jj = endss.length; j < jj; ++j) {

View File

@@ -60,7 +60,7 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
// ring. Use the center of the the linear ring's extent. // ring. Use the center of the the linear ring's extent.
pointX = flatCenters[flatCentersOffset]; pointX = flatCenters[flatCentersOffset];
} }
if (goog.isDef(opt_dest)) { if (opt_dest) {
opt_dest.push(pointX, y); opt_dest.push(pointX, y);
return opt_dest; return opt_dest;
} else { } else {

View File

@@ -61,7 +61,7 @@ ol.geom.flat.interpolate.lineString =
pointY = flatCoordinates[offset + index * stride + 1]; pointY = flatCoordinates[offset + index * stride + 1];
} }
} }
if (goog.isDefAndNotNull(opt_dest)) { if (opt_dest) {
opt_dest[0] = pointX; opt_dest[0] = pointX;
opt_dest[1] = pointY; opt_dest[1] = pointY;
return opt_dest; return opt_dest;

View File

@@ -1,5 +1,6 @@
goog.provide('ol.geom.flat.orient'); goog.provide('ol.geom.flat.orient');
goog.require('ol');
goog.require('ol.geom.flat.reverse'); goog.require('ol.geom.flat.reverse');
@@ -43,7 +44,7 @@ ol.geom.flat.orient.linearRingIsClockwise =
*/ */
ol.geom.flat.orient.linearRingsAreOriented = ol.geom.flat.orient.linearRingsAreOriented =
function(flatCoordinates, offset, ends, stride, opt_right) { function(flatCoordinates, offset, ends, stride, opt_right) {
var right = goog.isDef(opt_right) ? opt_right : false; var right = opt_right !== undefined ? opt_right : false;
var i, ii; var i, ii;
for (i = 0, ii = ends.length; i < ii; ++i) { for (i = 0, ii = ends.length; i < ii; ++i) {
var end = ends[i]; var end = ends[i];
@@ -105,7 +106,7 @@ ol.geom.flat.orient.linearRingssAreOriented =
*/ */
ol.geom.flat.orient.orientLinearRings = ol.geom.flat.orient.orientLinearRings =
function(flatCoordinates, offset, ends, stride, opt_right) { function(flatCoordinates, offset, ends, stride, opt_right) {
var right = goog.isDef(opt_right) ? opt_right : false; var right = opt_right !== undefined ? opt_right : false;
var i, ii; var i, ii;
for (i = 0, ii = ends.length; i < ii; ++i) { for (i = 0, ii = ends.length; i < ii; ++i) {
var end = ends[i]; var end = ends[i];

View File

@@ -42,7 +42,7 @@ goog.require('ol.math');
*/ */
ol.geom.flat.simplify.lineString = function(flatCoordinates, offset, end, ol.geom.flat.simplify.lineString = function(flatCoordinates, offset, end,
stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) { stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {
var simplifiedFlatCoordinates = goog.isDef(opt_simplifiedFlatCoordinates) ? var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ?
opt_simplifiedFlatCoordinates : []; opt_simplifiedFlatCoordinates : [];
if (!highQuality) { if (!highQuality) {
end = ol.geom.flat.simplify.radialDistance(flatCoordinates, offset, end, end = ol.geom.flat.simplify.radialDistance(flatCoordinates, offset, end,

View File

@@ -20,7 +20,7 @@ ol.geom.flat.transform.transform2D =
var m11 = goog.vec.Mat4.getElement(transform, 1, 1); var m11 = goog.vec.Mat4.getElement(transform, 1, 1);
var m03 = goog.vec.Mat4.getElement(transform, 0, 3); var m03 = goog.vec.Mat4.getElement(transform, 0, 3);
var m13 = goog.vec.Mat4.getElement(transform, 1, 3); var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
var dest = goog.isDef(opt_dest) ? opt_dest : []; var dest = opt_dest ? opt_dest : [];
var i = 0; var i = 0;
var j; var j;
for (j = offset; j < end; j += stride) { for (j = offset; j < end; j += stride) {
@@ -29,7 +29,7 @@ ol.geom.flat.transform.transform2D =
dest[i++] = m00 * x + m01 * y + m03; dest[i++] = m00 * x + m01 * y + m03;
dest[i++] = m10 * x + m11 * y + m13; dest[i++] = m10 * x + m11 * y + m13;
} }
if (goog.isDef(opt_dest) && dest.length != i) { if (opt_dest && dest.length != i) {
dest.length = i; dest.length = i;
} }
return dest; return dest;
@@ -48,7 +48,7 @@ ol.geom.flat.transform.transform2D =
*/ */
ol.geom.flat.transform.translate = ol.geom.flat.transform.translate =
function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) { function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {
var dest = goog.isDef(opt_dest) ? opt_dest : []; var dest = opt_dest ? opt_dest : [];
var i = 0; var i = 0;
var j, k; var j, k;
for (j = offset; j < end; j += stride) { for (j = offset; j < end; j += stride) {
@@ -58,7 +58,7 @@ ol.geom.flat.transform.translate =
dest[i++] = flatCoordinates[k]; dest[i++] = flatCoordinates[k];
} }
} }
if (goog.isDef(opt_dest) && dest.length != i) { if (opt_dest && dest.length != i) {
dest.length = i; dest.length = i;
} }
return dest; return dest;

View File

@@ -122,8 +122,7 @@ ol.geom.Geometry.prototype.closestPointXY = goog.abstractMethod;
* @api stable * @api stable
*/ */
ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) { ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) {
var closestPoint = goog.isDef(opt_closestPoint) ? var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];
opt_closestPoint : [NaN, NaN];
this.closestPointXY(point[0], point[1], closestPoint, Infinity); this.closestPointXY(point[0], point[1], closestPoint, Infinity);
return closestPoint; return closestPoint;
}; };
@@ -169,10 +168,27 @@ ol.geom.Geometry.prototype.getExtent = function(opt_extent) {
}; };
/**
* Create a simplified version of this geometry. For linestrings, this uses
* the the {@link
* https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
* Douglas Peucker} algorithm. For polygons, a quantization-based
* simplification is used to preserve topology.
* @function
* @param {number} tolerance The tolerance distance for simplification.
* @return {ol.geom.Geometry} A new, simplified version of the original
* geometry.
* @api
*/
ol.geom.Geometry.prototype.simplify = function(tolerance) {
return this.getSimplifiedGeometry(tolerance * tolerance);
};
/** /**
* Create a simplified version of this geometry using the Douglas Peucker * Create a simplified version of this geometry using the Douglas Peucker
* algorithm. * algorithm.
* @see http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm * @see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
* @function * @function
* @param {number} squaredTolerance Squared tolerance. * @param {number} squaredTolerance Squared tolerance.
* @return {ol.geom.Geometry} Simplified geometry. * @return {ol.geom.Geometry} Simplified geometry.

View File

@@ -1,6 +1,5 @@
goog.provide('ol.geom.GeometryCollection'); goog.provide('ol.geom.GeometryCollection');
goog.require('goog.array');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.object'); goog.require('goog.object');
@@ -27,7 +26,7 @@ ol.geom.GeometryCollection = function(opt_geometries) {
* @private * @private
* @type {Array.<ol.geom.Geometry>} * @type {Array.<ol.geom.Geometry>}
*/ */
this.geometries_ = goog.isDef(opt_geometries) ? opt_geometries : null; this.geometries_ = opt_geometries ? opt_geometries : null;
this.listenGeometriesChange_(); this.listenGeometriesChange_();
}; };
@@ -54,7 +53,7 @@ ol.geom.GeometryCollection.cloneGeometries_ = function(geometries) {
*/ */
ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() { ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() {
var i, ii; var i, ii;
if (goog.isNull(this.geometries_)) { if (!this.geometries_) {
return; return;
} }
for (i = 0, ii = this.geometries_.length; i < ii; ++i) { for (i = 0, ii = this.geometries_.length; i < ii; ++i) {
@@ -70,7 +69,7 @@ ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() {
*/ */
ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() { ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() {
var i, ii; var i, ii;
if (goog.isNull(this.geometries_)) { if (!this.geometries_) {
return; return;
} }
for (i = 0, ii = this.geometries_.length; i < ii; ++i) { for (i = 0, ii = this.geometries_.length; i < ii; ++i) {
@@ -231,7 +230,7 @@ ol.geom.GeometryCollection.prototype.intersectsExtent = function(extent) {
* @return {boolean} Is empty. * @return {boolean} Is empty.
*/ */
ol.geom.GeometryCollection.prototype.isEmpty = function() { ol.geom.GeometryCollection.prototype.isEmpty = function() {
return goog.array.isEmpty(this.geometries_); return this.geometries_.length === 0;
}; };

View File

@@ -132,11 +132,11 @@ ol.geom.LinearRing.prototype.getType = function() {
*/ */
ol.geom.LinearRing.prototype.setCoordinates = ol.geom.LinearRing.prototype.setCoordinates =
function(coordinates, opt_layout) { function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
} else { } else {
this.setLayout(opt_layout, coordinates, 1); this.setLayout(opt_layout, coordinates, 1);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates( this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(

View File

@@ -2,6 +2,7 @@ goog.provide('ol.geom.LineString');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('ol');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
@@ -69,7 +70,7 @@ goog.inherits(ol.geom.LineString, ol.geom.SimpleGeometry);
ol.geom.LineString.prototype.appendCoordinate = function(coordinate) { ol.geom.LineString.prototype.appendCoordinate = function(coordinate) {
goog.asserts.assert(coordinate.length == this.stride, goog.asserts.assert(coordinate.length == this.stride,
'length of coordinate array should match stride'); 'length of coordinate array should match stride');
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = coordinate.slice(); this.flatCoordinates = coordinate.slice();
} else { } else {
goog.array.extend(this.flatCoordinates, coordinate); goog.array.extend(this.flatCoordinates, coordinate);
@@ -148,7 +149,7 @@ ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) {
this.layout != ol.geom.GeometryLayout.XYZM) { this.layout != ol.geom.GeometryLayout.XYZM) {
return null; return null;
} }
var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0, return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0,
this.flatCoordinates.length, this.stride, m, extrapolate); this.flatCoordinates.length, this.stride, m, extrapolate);
}; };
@@ -234,11 +235,11 @@ ol.geom.LineString.prototype.intersectsExtent = function(extent) {
*/ */
ol.geom.LineString.prototype.setCoordinates = ol.geom.LineString.prototype.setCoordinates =
function(coordinates, opt_layout) { function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
} else { } else {
this.setLayout(opt_layout, coordinates, 1); this.setLayout(opt_layout, coordinates, 1);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates( this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(

View File

@@ -2,6 +2,7 @@ goog.provide('ol.geom.MultiLineString');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('ol');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
@@ -62,7 +63,7 @@ goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry);
ol.geom.MultiLineString.prototype.appendLineString = function(lineString) { ol.geom.MultiLineString.prototype.appendLineString = function(lineString) {
goog.asserts.assert(lineString.getLayout() == this.layout, goog.asserts.assert(lineString.getLayout() == this.layout,
'layout of lineString should match the layout'); 'layout of lineString should match the layout');
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = lineString.getFlatCoordinates().slice(); this.flatCoordinates = lineString.getFlatCoordinates().slice();
} else { } else {
goog.array.extend( goog.array.extend(
@@ -135,8 +136,8 @@ ol.geom.MultiLineString.prototype.getCoordinateAtM =
this.flatCoordinates.length === 0) { this.flatCoordinates.length === 0) {
return null; return null;
} }
var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
var interpolate = goog.isDef(opt_interpolate) ? opt_interpolate : false; var interpolate = opt_interpolate !== undefined ? opt_interpolate : false;
return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0, return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0,
this.ends_, this.stride, m, extrapolate, interpolate); this.ends_, this.stride, m, extrapolate, interpolate);
}; };
@@ -269,11 +270,11 @@ ol.geom.MultiLineString.prototype.intersectsExtent = function(extent) {
*/ */
ol.geom.MultiLineString.prototype.setCoordinates = ol.geom.MultiLineString.prototype.setCoordinates =
function(coordinates, opt_layout) { function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);
} else { } else {
this.setLayout(opt_layout, coordinates, 2); this.setLayout(opt_layout, coordinates, 2);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
var ends = ol.geom.flat.deflate.coordinatess( var ends = ol.geom.flat.deflate.coordinatess(
@@ -291,9 +292,9 @@ ol.geom.MultiLineString.prototype.setCoordinates =
*/ */
ol.geom.MultiLineString.prototype.setFlatCoordinates = ol.geom.MultiLineString.prototype.setFlatCoordinates =
function(layout, flatCoordinates, ends) { function(layout, flatCoordinates, ends) {
if (goog.isNull(flatCoordinates)) { if (!flatCoordinates) {
goog.asserts.assert(!goog.isNull(ends) && ends.length === 0, goog.asserts.assert(ends && ends.length === 0,
'ends cannot be null and ends.length should be 0'); 'ends must be truthy and ends.length should be 0');
} else if (ends.length === 0) { } else if (ends.length === 0) {
goog.asserts.assert(flatCoordinates.length === 0, goog.asserts.assert(flatCoordinates.length === 0,
'flatCoordinates should be an empty array'); 'flatCoordinates should be an empty array');
@@ -311,7 +312,7 @@ ol.geom.MultiLineString.prototype.setFlatCoordinates =
* @param {Array.<ol.geom.LineString>} lineStrings LineStrings. * @param {Array.<ol.geom.LineString>} lineStrings LineStrings.
*/ */
ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) { ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) {
var layout = ol.geom.GeometryLayout.XY; var layout = this.getLayout();
var flatCoordinates = []; var flatCoordinates = [];
var ends = []; var ends = [];
var i, ii; var i, ii;

View File

@@ -38,7 +38,7 @@ goog.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry);
ol.geom.MultiPoint.prototype.appendPoint = function(point) { ol.geom.MultiPoint.prototype.appendPoint = function(point) {
goog.asserts.assert(point.getLayout() == this.layout, goog.asserts.assert(point.getLayout() == this.layout,
'the layout of point should match layout'); 'the layout of point should match layout');
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = point.getFlatCoordinates().slice(); this.flatCoordinates = point.getFlatCoordinates().slice();
} else { } else {
goog.array.extend(this.flatCoordinates, point.getFlatCoordinates()); goog.array.extend(this.flatCoordinates, point.getFlatCoordinates());
@@ -104,7 +104,7 @@ ol.geom.MultiPoint.prototype.getCoordinates = function() {
* @api stable * @api stable
*/ */
ol.geom.MultiPoint.prototype.getPoint = function(index) { ol.geom.MultiPoint.prototype.getPoint = function(index) {
var n = goog.isNull(this.flatCoordinates) ? var n = !this.flatCoordinates ?
0 : this.flatCoordinates.length / this.stride; 0 : this.flatCoordinates.length / this.stride;
goog.asserts.assert(0 <= index && index < n, goog.asserts.assert(0 <= index && index < n,
'index should be in between 0 and n'); 'index should be in between 0 and n');
@@ -175,11 +175,11 @@ ol.geom.MultiPoint.prototype.intersectsExtent = function(extent) {
*/ */
ol.geom.MultiPoint.prototype.setCoordinates = ol.geom.MultiPoint.prototype.setCoordinates =
function(coordinates, opt_layout) { function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
} else { } else {
this.setLayout(opt_layout, coordinates, 1); this.setLayout(opt_layout, coordinates, 1);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
this.flatCoordinates.length = ol.geom.flat.deflate.coordinates( this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(

View File

@@ -3,6 +3,7 @@ goog.provide('ol.geom.MultiPolygon');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
@@ -94,7 +95,7 @@ ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {
'layout of polygon should match layout'); 'layout of polygon should match layout');
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var ends; var ends;
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = polygon.getFlatCoordinates().slice(); this.flatCoordinates = polygon.getFlatCoordinates().slice();
ends = polygon.getEnds().slice(); ends = polygon.getEnds().slice();
this.endss_.push(); this.endss_.push();
@@ -182,7 +183,7 @@ ol.geom.MultiPolygon.prototype.getArea = function() {
*/ */
ol.geom.MultiPolygon.prototype.getCoordinates = function(opt_right) { ol.geom.MultiPolygon.prototype.getCoordinates = function(opt_right) {
var flatCoordinates; var flatCoordinates;
if (goog.isDef(opt_right)) { if (opt_right !== undefined) {
flatCoordinates = this.getOrientedFlatCoordinates().slice(); flatCoordinates = this.getOrientedFlatCoordinates().slice();
ol.geom.flat.orient.orientLinearRingss( ol.geom.flat.orient.orientLinearRingss(
flatCoordinates, 0, this.endss_, this.stride, opt_right); flatCoordinates, 0, this.endss_, this.stride, opt_right);
@@ -362,11 +363,11 @@ ol.geom.MultiPolygon.prototype.intersectsExtent = function(extent) {
*/ */
ol.geom.MultiPolygon.prototype.setCoordinates = ol.geom.MultiPolygon.prototype.setCoordinates =
function(coordinates, opt_layout) { function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_);
} else { } else {
this.setLayout(opt_layout, coordinates, 3); this.setLayout(opt_layout, coordinates, 3);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
var endss = ol.geom.flat.deflate.coordinatesss( var endss = ol.geom.flat.deflate.coordinatesss(
@@ -390,8 +391,8 @@ ol.geom.MultiPolygon.prototype.setCoordinates =
*/ */
ol.geom.MultiPolygon.prototype.setFlatCoordinates = ol.geom.MultiPolygon.prototype.setFlatCoordinates =
function(layout, flatCoordinates, endss) { function(layout, flatCoordinates, endss) {
goog.asserts.assert(!goog.isNull(endss), 'endss cannot be null'); goog.asserts.assert(endss, 'endss must be truthy');
if (goog.isNull(flatCoordinates) || flatCoordinates.length === 0) { if (!flatCoordinates || flatCoordinates.length === 0) {
goog.asserts.assert(endss.length === 0, 'the length of endss should be 0'); goog.asserts.assert(endss.length === 0, 'the length of endss should be 0');
} else { } else {
goog.asserts.assert(endss.length > 0, 'endss cannot be an empty array'); goog.asserts.assert(endss.length > 0, 'endss cannot be an empty array');
@@ -409,7 +410,7 @@ ol.geom.MultiPolygon.prototype.setFlatCoordinates =
* @param {Array.<ol.geom.Polygon>} polygons Polygons. * @param {Array.<ol.geom.Polygon>} polygons Polygons.
*/ */
ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) { ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) {
var layout = ol.geom.GeometryLayout.XY; var layout = this.getLayout();
var flatCoordinates = []; var flatCoordinates = [];
var endss = []; var endss = [];
var i, ii, ends; var i, ii, ends;

View File

@@ -66,7 +66,7 @@ ol.geom.Point.prototype.closestPointXY =
* @api stable * @api stable
*/ */
ol.geom.Point.prototype.getCoordinates = function() { ol.geom.Point.prototype.getCoordinates = function() {
return goog.isNull(this.flatCoordinates) ? [] : this.flatCoordinates.slice(); return !this.flatCoordinates ? [] : this.flatCoordinates.slice();
}; };
@@ -104,11 +104,11 @@ ol.geom.Point.prototype.intersectsExtent = function(extent) {
* @api stable * @api stable
*/ */
ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) { ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
} else { } else {
this.setLayout(opt_layout, coordinates, 0); this.setLayout(opt_layout, coordinates, 0);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
this.flatCoordinates.length = ol.geom.flat.deflate.coordinate( this.flatCoordinates.length = ol.geom.flat.deflate.coordinate(

View File

@@ -3,6 +3,7 @@ goog.provide('ol.geom.Polygon');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.math'); goog.require('goog.math');
goog.require('ol');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
@@ -91,7 +92,7 @@ goog.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry);
ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) { ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) {
goog.asserts.assert(linearRing.getLayout() == this.layout, goog.asserts.assert(linearRing.getLayout() == this.layout,
'layout of linearRing should match layout'); 'layout of linearRing should match layout');
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = linearRing.getFlatCoordinates().slice(); this.flatCoordinates = linearRing.getFlatCoordinates().slice();
} else { } else {
goog.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates()); goog.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates());
@@ -169,7 +170,7 @@ ol.geom.Polygon.prototype.getArea = function() {
*/ */
ol.geom.Polygon.prototype.getCoordinates = function(opt_right) { ol.geom.Polygon.prototype.getCoordinates = function(opt_right) {
var flatCoordinates; var flatCoordinates;
if (goog.isDef(opt_right)) { if (opt_right !== undefined) {
flatCoordinates = this.getOrientedFlatCoordinates().slice(); flatCoordinates = this.getOrientedFlatCoordinates().slice();
ol.geom.flat.orient.orientLinearRings( ol.geom.flat.orient.orientLinearRings(
flatCoordinates, 0, this.ends_, this.stride, opt_right); flatCoordinates, 0, this.ends_, this.stride, opt_right);
@@ -338,11 +339,11 @@ ol.geom.Polygon.prototype.intersectsExtent = function(extent) {
* @api stable * @api stable
*/ */
ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) { ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) {
if (goog.isNull(coordinates)) { if (!coordinates) {
this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_); this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);
} else { } else {
this.setLayout(opt_layout, coordinates, 2); this.setLayout(opt_layout, coordinates, 2);
if (goog.isNull(this.flatCoordinates)) { if (!this.flatCoordinates) {
this.flatCoordinates = []; this.flatCoordinates = [];
} }
var ends = ol.geom.flat.deflate.coordinatess( var ends = ol.geom.flat.deflate.coordinatess(
@@ -360,9 +361,9 @@ ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) {
*/ */
ol.geom.Polygon.prototype.setFlatCoordinates = ol.geom.Polygon.prototype.setFlatCoordinates =
function(layout, flatCoordinates, ends) { function(layout, flatCoordinates, ends) {
if (goog.isNull(flatCoordinates)) { if (!flatCoordinates) {
goog.asserts.assert(!goog.isNull(ends) && ends.length === 0, goog.asserts.assert(ends && ends.length === 0,
'ends cannot be null and should be an empty array'); 'ends must be an empty array');
} else if (ends.length === 0) { } else if (ends.length === 0) {
goog.asserts.assert(flatCoordinates.length === 0, goog.asserts.assert(flatCoordinates.length === 0,
'flatCoordinates should be an empty array'); 'flatCoordinates should be an empty array');
@@ -388,7 +389,7 @@ ol.geom.Polygon.prototype.setFlatCoordinates =
* @api stable * @api stable
*/ */
ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) { ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) {
var n = goog.isDef(opt_n) ? opt_n : 32; var n = opt_n ? opt_n : 32;
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var flatCoordinates = []; var flatCoordinates = [];
var i; var i;
@@ -434,7 +435,7 @@ ol.geom.Polygon.fromExtent = function(extent) {
* @api * @api
*/ */
ol.geom.Polygon.fromCircle = function(circle, opt_sides, opt_angle) { ol.geom.Polygon.fromCircle = function(circle, opt_sides, opt_angle) {
var sides = goog.isDef(opt_sides) ? opt_sides : 32; var sides = opt_sides ? opt_sides : 32;
var stride = circle.getStride(); var stride = circle.getStride();
var layout = circle.getLayout(); var layout = circle.getLayout();
var polygon = new ol.geom.Polygon(null, layout); var polygon = new ol.geom.Polygon(null, layout);
@@ -462,8 +463,8 @@ ol.geom.Polygon.makeRegular = function(polygon, center, radius, opt_angle) {
var ends = polygon.getEnds(); var ends = polygon.getEnds();
goog.asserts.assert(ends.length === 1, 'only 1 ring is supported'); goog.asserts.assert(ends.length === 1, 'only 1 ring is supported');
var sides = flatCoordinates.length / stride - 1; var sides = flatCoordinates.length / stride - 1;
var startAngle = goog.isDef(opt_angle) ? opt_angle : 0; var startAngle = opt_angle ? opt_angle : 0;
var angle, coord, offset; var angle, offset;
for (var i = 0; i <= sides; ++i) { for (var i = 0; i <= sides; ++i) {
offset = i * stride; offset = i * stride;
angle = startAngle + (goog.math.modulo(i, sides) * 2 * Math.PI / sides); angle = startAngle + (goog.math.modulo(i, sides) * 2 * Math.PI / sides);

View File

@@ -232,7 +232,7 @@ ol.geom.SimpleGeometry.prototype.setLayout =
function(layout, coordinates, nesting) { function(layout, coordinates, nesting) {
/** @type {number} */ /** @type {number} */
var stride; var stride;
if (goog.isDef(layout)) { if (layout) {
stride = ol.geom.SimpleGeometry.getStrideForLayout(layout); stride = ol.geom.SimpleGeometry.getStrideForLayout(layout);
} else { } else {
var i; var i;
@@ -258,7 +258,7 @@ ol.geom.SimpleGeometry.prototype.setLayout =
* @api stable * @api stable
*/ */
ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) { ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {
if (!goog.isNull(this.flatCoordinates)) { if (this.flatCoordinates) {
transformFn(this.flatCoordinates, this.flatCoordinates, this.stride); transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);
this.changed(); this.changed();
} }
@@ -271,7 +271,7 @@ ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {
*/ */
ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) { ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {
var flatCoordinates = this.getFlatCoordinates(); var flatCoordinates = this.getFlatCoordinates();
if (!goog.isNull(flatCoordinates)) { if (flatCoordinates) {
var stride = this.getStride(); var stride = this.getStride();
ol.geom.flat.transform.translate( ol.geom.flat.transform.translate(
flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates, 0, flatCoordinates.length, stride,
@@ -290,7 +290,7 @@ ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {
ol.geom.transformSimpleGeometry2D = ol.geom.transformSimpleGeometry2D =
function(simpleGeometry, transform, opt_dest) { function(simpleGeometry, transform, opt_dest) {
var flatCoordinates = simpleGeometry.getFlatCoordinates(); var flatCoordinates = simpleGeometry.getFlatCoordinates();
if (goog.isNull(flatCoordinates)) { if (!flatCoordinates) {
return null; return null;
} else { } else {
var stride = simpleGeometry.getStride(); var stride = simpleGeometry.getStride();

View File

@@ -1,11 +1,11 @@
goog.provide('ol.Graticule'); goog.provide('ol.Graticule');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.math');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');
goog.require('ol.geom.LineString'); goog.require('ol.geom.LineString');
goog.require('ol.geom.flat.geodesic'); goog.require('ol.geom.flat.geodesic');
goog.require('ol.math');
goog.require('ol.proj'); goog.require('ol.proj');
goog.require('ol.render.EventType'); goog.require('ol.render.EventType');
goog.require('ol.style.Stroke'); goog.require('ol.style.Stroke');
@@ -20,7 +20,7 @@ goog.require('ol.style.Stroke');
*/ */
ol.Graticule = function(opt_options) { ol.Graticule = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {}; var options = opt_options || {};
/** /**
* @type {ol.Map} * @type {ol.Map}
@@ -86,14 +86,14 @@ ol.Graticule = function(opt_options) {
* @type {number} * @type {number}
* @private * @private
*/ */
this.targetSize_ = goog.isDef(options.targetSize) ? this.targetSize_ = options.targetSize !== undefined ?
options.targetSize : 100; options.targetSize : 100;
/** /**
* @type {number} * @type {number}
* @private * @private
*/ */
this.maxLines_ = goog.isDef(options.maxLines) ? options.maxLines : 100; this.maxLines_ = options.maxLines !== undefined ? options.maxLines : 100;
goog.asserts.assert(this.maxLines_ > 0, goog.asserts.assert(this.maxLines_ > 0,
'this.maxLines_ should be more than 0'); 'this.maxLines_ should be more than 0');
@@ -113,7 +113,7 @@ ol.Graticule = function(opt_options) {
* @type {ol.style.Stroke} * @type {ol.style.Stroke}
* @private * @private
*/ */
this.strokeStyle_ = goog.isDef(options.strokeStyle) ? this.strokeStyle_ = options.strokeStyle !== undefined ?
options.strokeStyle : ol.Graticule.DEFAULT_STROKE_STYLE_; options.strokeStyle : ol.Graticule.DEFAULT_STROKE_STYLE_;
/** /**
@@ -134,7 +134,7 @@ ol.Graticule = function(opt_options) {
*/ */
this.projectionCenterLonLat_ = null; this.projectionCenterLonLat_ = null;
this.setMap(goog.isDef(options.map) ? options.map : null); this.setMap(options.map !== undefined ? options.map : null);
}; };
@@ -238,7 +238,7 @@ ol.Graticule.prototype.createGraticule_ =
// Create meridians // Create meridians
centerLon = Math.floor(centerLon / interval) * interval; centerLon = Math.floor(centerLon / interval) * interval;
lon = goog.math.clamp(centerLon, this.minLon_, this.maxLon_); lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);
idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0); idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);
@@ -248,7 +248,7 @@ ol.Graticule.prototype.createGraticule_ =
idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx); idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);
} }
lon = goog.math.clamp(centerLon, this.minLon_, this.maxLon_); lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);
cnt = 0; cnt = 0;
while (lon != this.maxLon_ && cnt++ < maxLines) { while (lon != this.maxLon_ && cnt++ < maxLines) {
@@ -261,7 +261,7 @@ ol.Graticule.prototype.createGraticule_ =
// Create parallels // Create parallels
centerLat = Math.floor(centerLat / interval) * interval; centerLat = Math.floor(centerLat / interval) * interval;
lat = goog.math.clamp(centerLat, this.minLat_, this.maxLat_); lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);
idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0); idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);
@@ -271,7 +271,7 @@ ol.Graticule.prototype.createGraticule_ =
idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx); idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);
} }
lat = goog.math.clamp(centerLat, this.minLat_, this.maxLat_); lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);
cnt = 0; cnt = 0;
while (lat != this.maxLat_ && cnt++ < maxLines) { while (lat != this.maxLat_ && cnt++ < maxLines) {
@@ -346,7 +346,7 @@ ol.Graticule.prototype.getMeridian_ = function(lon, minLat, maxLat,
minLat, maxLat, this.projection_, squaredTolerance); minLat, maxLat, this.projection_, squaredTolerance);
goog.asserts.assert(flatCoordinates.length > 0, goog.asserts.assert(flatCoordinates.length > 0,
'flatCoordinates cannot be empty'); 'flatCoordinates cannot be empty');
var lineString = goog.isDef(this.meridians_[index]) ? var lineString = this.meridians_[index] !== undefined ?
this.meridians_[index] : new ol.geom.LineString(null); this.meridians_[index] : new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates); lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
return lineString; return lineString;
@@ -382,7 +382,7 @@ ol.Graticule.prototype.getParallel_ = function(lat, minLon, maxLon,
this.minLon_, this.maxLon_, this.projection_, squaredTolerance); this.minLon_, this.maxLon_, this.projection_, squaredTolerance);
goog.asserts.assert(flatCoordinates.length > 0, goog.asserts.assert(flatCoordinates.length > 0,
'flatCoordinates cannot be empty'); 'flatCoordinates cannot be empty');
var lineString = goog.isDef(this.parallels_[index]) ? var lineString = this.parallels_[index] !== undefined ?
this.parallels_[index] : new ol.geom.LineString(null); this.parallels_[index] : new ol.geom.LineString(null);
lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates); lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
return lineString; return lineString;
@@ -415,13 +415,30 @@ ol.Graticule.prototype.handlePostCompose_ = function(e) {
var squaredTolerance = var squaredTolerance =
resolution * resolution / (4 * pixelRatio * pixelRatio); resolution * resolution / (4 * pixelRatio * pixelRatio);
var updateProjectionInfo = goog.isNull(this.projection_) || var updateProjectionInfo = !this.projection_ ||
!ol.proj.equivalent(this.projection_, projection); !ol.proj.equivalent(this.projection_, projection);
if (updateProjectionInfo) { if (updateProjectionInfo) {
this.updateProjectionInfo_(projection); this.updateProjectionInfo_(projection);
} }
//Fix the extent if wrapped.
//(note: this is the same extent as vectorContext.extent_)
var offsetX = 0;
if (projection.canWrapX()) {
var projectionExtent = projection.getExtent();
var worldWidth = ol.extent.getWidth(projectionExtent);
var x = frameState.focus[0];
if (x < projectionExtent[0] || x > projectionExtent[2]) {
var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);
offsetX = worldWidth * worldsAway;
extent = [
extent[0] + offsetX, extent[1],
extent[2] + offsetX, extent[3]
];
}
}
this.createGraticule_(extent, center, resolution, squaredTolerance); this.createGraticule_(extent, center, resolution, squaredTolerance);
// Draw the lines // Draw the lines
@@ -443,7 +460,7 @@ ol.Graticule.prototype.handlePostCompose_ = function(e) {
* @private * @private
*/ */
ol.Graticule.prototype.updateProjectionInfo_ = function(projection) { ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
goog.asserts.assert(!goog.isNull(projection), 'projection cannot be null'); goog.asserts.assert(projection, 'projection cannot be null');
var epsg4326Projection = ol.proj.get('EPSG:4326'); var epsg4326Projection = ol.proj.get('EPSG:4326');
@@ -462,19 +479,19 @@ ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
var minLatP = worldExtentP[1]; var minLatP = worldExtentP[1];
var minLonP = worldExtentP[0]; var minLonP = worldExtentP[0];
goog.asserts.assert(!goog.isNull(extent), 'extent cannot be null'); goog.asserts.assert(extent, 'extent cannot be null');
goog.asserts.assert(goog.isDef(maxLat), 'maxLat should be defined'); goog.asserts.assert(maxLat !== undefined, 'maxLat should be defined');
goog.asserts.assert(goog.isDef(maxLon), 'maxLon should be defined'); goog.asserts.assert(maxLon !== undefined, 'maxLon should be defined');
goog.asserts.assert(goog.isDef(minLat), 'minLat should be defined'); goog.asserts.assert(minLat !== undefined, 'minLat should be defined');
goog.asserts.assert(goog.isDef(minLon), 'minLon should be defined'); goog.asserts.assert(minLon !== undefined, 'minLon should be defined');
goog.asserts.assert(goog.isDef(maxLatP), goog.asserts.assert(maxLatP !== undefined,
'projected maxLat should be defined'); 'projected maxLat should be defined');
goog.asserts.assert(goog.isDef(maxLonP), goog.asserts.assert(maxLonP !== undefined,
'projected maxLon should be defined'); 'projected maxLon should be defined');
goog.asserts.assert(goog.isDef(minLatP), goog.asserts.assert(minLatP !== undefined,
'projected minLat should be defined'); 'projected minLat should be defined');
goog.asserts.assert(goog.isDef(minLonP), goog.asserts.assert(minLonP !== undefined,
'projected minLon should be defined'); 'projected minLon should be defined');
this.maxLat_ = maxLat; this.maxLat_ = maxLat;
@@ -508,12 +525,12 @@ ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
* @api * @api
*/ */
ol.Graticule.prototype.setMap = function(map) { ol.Graticule.prototype.setMap = function(map) {
if (!goog.isNull(this.map_)) { if (this.map_) {
this.map_.un(ol.render.EventType.POSTCOMPOSE, this.map_.un(ol.render.EventType.POSTCOMPOSE,
this.handlePostCompose_, this); this.handlePostCompose_, this);
this.map_.render(); this.map_.render();
} }
if (!goog.isNull(map)) { if (map) {
map.on(ol.render.EventType.POSTCOMPOSE, map.on(ol.render.EventType.POSTCOMPOSE,
this.handlePostCompose_, this); this.handlePostCompose_, this);
map.render(); map.render();

Some files were not shown because too many files have changed in this diff Show More