Compare commits

..

1306 Commits

Author SHA1 Message Date
ahocevar
79750c662c Merge pull request #1056 from openlayers/doc
Basic docs
2013-09-24 07:21:43 -07:00
Tim Schaub
394dfa297a Link to API docs 2013-09-24 15:14:50 +02:00
Tim Schaub
c4dba8e828 Link to website root 2013-09-24 15:14:49 +02:00
ahocevar
9e274a61db Fixing typo 2013-09-24 15:06:22 +02:00
Tim Schaub
5c98a47581 Bare bones index pages 2013-09-24 14:57:58 +02:00
Tim Schaub
a9b0e6239b Link to latest, fenced code blocks 2013-09-24 14:57:58 +02:00
ahocevar
860735d7e4 Nicer search box position 2013-09-24 14:56:25 +02:00
ahocevar
b80022036f ol3 logo for examples and apidoc header 2013-09-24 14:42:04 +02:00
ahocevar
d1c0665926 Adding heading 2013-09-24 13:46:14 +02:00
Frédéric Junod
ac6d8f2df1 Merge pull request #1057 from fredj/apidoc
Fix jsdoc formating
2013-09-24 04:30:47 -07:00
ahocevar
3adc46ae4a Adding basic concepts tutorial 2013-09-24 13:28:42 +02:00
Frederic Junod
ef929e9a72 Fix jsdoc formating 2013-09-24 12:18:00 +02:00
Tom Payne
3e8abadf95 Merge pull request #1053 from elemoine/sourceoptions
Use typedef in source code for SourceOptions
2013-09-24 03:03:12 -07:00
Tom Payne
a25eff9283 Merge pull request #1047 from twpayne/remove-load-events
Remove source load events
2013-09-24 02:50:13 -07:00
Frederic Junod
f07294698a Include ol.css in doc/quickstart.hbs 2013-09-24 11:15:26 +02:00
ahocevar
5ab7803402 New font and header background color
With this change, API docs and examples match the website design
of the new-build branch of openlayers.github.io better.
2013-09-24 10:50:27 +02:00
Tim Schaub
aec0c0d9af Adding YAML frontmatter
This will be parsed by the website build task
2013-09-24 10:39:34 +02:00
Tim Schaub
2f2ee22831 Moving quickstart to doc directory 2013-09-24 10:37:43 +02:00
Julien-Samuel Lacroix
3b7db642f1 QuickStart first draft 2013-09-24 10:36:29 +02:00
Tim Schaub
2610e9e0c3 Merge pull request #1054 from tschaub/apidoc
Differentiating doc from apidoc.
2013-09-23 15:38:29 -07:00
Tim Schaub
4def0c6a84 Differentiating doc from apidoc
This renames the doc task to apidoc.  The apidoc delegates to jsdoc3 currently.  We will have additional documentation that is not built by jsdoc3.  It makes sense to reserve the more general 'doc' name for building all documentation (not just apidoc).
2013-09-23 23:58:25 +02:00
Éric Lemoine
b2c336c29e Use typedef in source code for SourceOptions 2013-09-23 17:53:43 +02:00
Frédéric Junod
3546a15f39 Merge pull request #1049 from fredj/webgl_ie11
Add 'experimental-webgl' to ol.webgl.CONTEXT_IDS_ (IE11 support)
2013-09-23 05:55:17 -07:00
Frédéric Junod
29165ddc1f Merge pull request #1050 from fredj/social-links.js
Remove social-links.js script from examples and doc
2013-09-23 05:38:55 -07:00
Frederic Junod
d061994842 Remove webgl-experimental from ol.webgl.CONTEXT_IDS_ 2013-09-23 14:18:30 +02:00
Frederic Junod
88f938ea47 Remove social-links.js script from examples and doc 2013-09-23 13:58:12 +02:00
Frederic Junod
c7b5bd0b6d Add 'experimental-webgl' to ol.webgl.CONTEXT_IDS_ (IE11 support)
see: http://msdn.microsoft.com/en-us/library/ie/ff975238(v=vs.85).aspx
2013-09-23 09:38:45 +02:00
Tim Schaub
6276e633de Merge pull request #832 from fredj/feature_getset_id
Rename setFeatureId to setId (same for get).
2013-09-20 10:31:37 -07:00
Tim Schaub
5d04d74c92 Merge pull request #1045 from tschaub/advanced
Use "advanced" for the production loader.
2013-09-20 10:13:57 -07:00
Tim Schaub
6c2e5f6eca The production loader has special logic for advanced and raw modes 2013-09-20 15:29:29 +01:00
Tom Payne
bd81e6c9a9 Remove source load events 2013-09-20 13:37:40 +01:00
Tom Payne
56e352b7aa Dispatch change events instead of load events when sources change 2013-09-20 13:37:31 +01:00
Tom Payne
8a0809c673 Merge pull request #1028 from twpayne/remove-extent-tostring
Remove ol.extent.toString
2013-09-20 05:10:02 -07:00
Tom Payne
fd28d56c45 Merge pull request #1046 from twpayne/url-capitalization
Use URL instead of Url or url in comments and strings
2013-09-20 05:09:44 -07:00
Tom Payne
abaa220314 Use URL instead of Url or url in comments and strings 2013-09-20 12:28:04 +01:00
Tom Payne
f24c9a807f Merge pull request #1042 from fredj/esri_attributions
Add missing source attribution in xyz-esri example
2013-09-20 04:17:41 -07:00
Tom Payne
aa44547565 Remove ol.extent.toString 2013-09-20 12:14:41 +01:00
Marc Jansen
6a39d11222 Merge pull request #1034 from marcjansen/build-help
Add a help-target to build.py.
2013-09-20 03:47:21 -07:00
Tom Payne
a8d9dad552 Merge pull request #1036 from twpayne/async-tile-load
Asynchronos tile URL calculation
2013-09-20 02:23:09 -07:00
Tom Payne
f3336532dd Merge pull request #1043 from twpayne/remove-xyz-seturl-example
Remove xyz-seturl example
2013-09-20 01:59:33 -07:00
Tom Payne
265c5f1a11 Remove xyz-seturl example 2013-09-20 09:14:13 +01:00
Tim Schaub
387f60f1e5 Merge pull request #1041 from tschaub/antisocial
Don't display the social links on the example index.  Don't display the "mode" selection when running the development server.  Set the mode in the query string when the selection changes.
2013-09-19 16:44:09 -07:00
Bruno Binet
8ccc997ecd Merge pull request #1032 from bbinet/minmax_resolution
Add support for layer min/maxResolution
2013-09-19 09:11:16 -07:00
Frederic Junod
5c15c18f1a Remove xyz-seturl example 2013-09-19 17:23:25 +02:00
Bruno Binet
d1e9dd964b Be consistent with constant names 2013-09-19 16:59:38 +02:00
Bruno Binet
690ed1ed8e Improve doc for minResolution and maxResolution 2013-09-19 16:59:38 +02:00
Bruno Binet
97556f234f Add min-max-resolution example
Show/hide layers depending on current map resolution.
2013-09-19 16:59:38 +02:00
Bruno Binet
fa484cca8c Fix tests for min/maxResolution 2013-09-19 16:59:38 +02:00
Bruno Binet
cf4799e87c Add support for layer min/maxResolution 2013-09-19 16:59:38 +02:00
Tim Schaub
ea66ddf3a4 Don't show compiled option when using node dev server 2013-09-19 15:20:11 +01:00
Tim Schaub
66e1b01c2d Use form.navbar-form for input elements in a navbar 2013-09-19 15:19:20 +01:00
Tim Schaub
ac4b031353 Remove social links from example index 2013-09-19 15:17:02 +01:00
Frederic Junod
e97b2d35d4 Add missing source attribution in xyz-esri example 2013-09-19 16:07:11 +02:00
Frédéric Junod
9a8269f780 Merge pull request #1040 from fredj/goog_global
Use goog.global instead of window
2013-09-19 06:46:34 -07:00
Marc Jansen
346fe30a1b Merge pull request #1038 from marcjansen/example-compression-selection
examples: remove social links / include tool to switch compression
2013-09-19 06:10:53 -07:00
Marc Jansen
9e0b560cf6 Remove now obsolete file social-link.js. 2013-09-19 15:05:31 +02:00
Frederic Junod
4666f64673 Use goog.global instead of window
See f1f319d6ad
2013-09-19 15:03:17 +02:00
Frédéric Junod
58693be9e6 Merge pull request #1039 from fredj/perf
Only reset canvas transformation matrix when it has changed
2013-09-19 02:37:57 -07:00
Frederic Junod
9906497cb8 Only reset canvas transformation matrix when it has changed 2013-09-18 19:12:36 +02:00
Frédéric Junod
8a97535d93 Merge pull request #1037 from fredj/perf
ol.TileCoord.getKeyZXY optimization
2013-09-18 09:16:28 -07:00
Marc Jansen
62a7505d2b Mention default target 'build' in the help output. 2013-09-18 17:49:17 +02:00
Marc Jansen
6d40b170d6 Examples: Remove social links. 2013-09-18 17:39:52 +02:00
Marc Jansen
886e38a69b Examples: Add switch compilation level tool. 2013-09-18 17:26:46 +02:00
Frederic Junod
e30d0fefb0 Concatenate keys instead of joining it
For performances reasons, see http://jsperf.com/array-join-string-concat
2013-09-18 17:19:50 +02:00
Frederic Junod
42f7288d73 Assign function instead of calling it 2013-09-18 17:19:50 +02:00
Tom Payne
0e4c5d10c5 Merge pull request #1024 from pagameba/doc-interactions
Documentation for Interactions
2013-09-18 08:05:46 -07:00
Tom Payne
293ccfda8a Export ol.ImageTile#getImage 2013-09-18 15:37:45 +01:00
Tom Payne
004898e462 Export ol.TileCoord#getZXY 2013-09-18 15:37:45 +01:00
Tom Payne
8ea6a50f03 Add ol.TileCoord#getZXY 2013-09-18 15:37:45 +01:00
Tom Payne
9397720c8e Export ol.Tile#getTileCoord 2013-09-18 15:33:54 +01:00
Tom Payne
f3d5a5c37b Add tileLoadFunction option to ol.source.XYZ 2013-09-18 13:40:07 +01:00
Tom Payne
6896e920f9 Allow tile load function to be overridden 2013-09-18 13:39:42 +01:00
Tom Payne
0085623eee Add ol.TileLoadFunctionType 2013-09-18 13:37:12 +01:00
Marc Jansen
9deffc9d87 Merge pull request #1035 from marcjansen/jsdoc
Fix spelling on API-doc index page.
2013-09-18 04:50:25 -07:00
Marc Jansen
67f2e57635 Fix spelling on API-doc index page. 2013-09-18 13:48:47 +02:00
Marc Jansen
b8a7c5ee9e Add a help-target to build.py. 2013-09-18 13:24:02 +02:00
Tom Payne
578e83d80a Merge pull request #1033 from twpayne/no-coffee
Remove dependency on CoffeeScript
2013-09-18 03:39:10 -07:00
Tom Payne
fef6f5c0a5 Use compiled mocha-phantomjs.js instead of CoffeScript 2013-09-18 11:25:55 +01:00
Tom Payne
98ba6b63a4 Add compiled version of mocha-phantomjs.js 2013-09-18 11:25:28 +01:00
Frederic Junod
764aacb568 Rename {get|set}FeatureId to {get|set}Id 2013-09-17 12:50:56 +02:00
Frédéric Junod
c0486f6f65 Merge pull request #1031 from fredj/unused_requires
Remove unused goog.requires
2013-09-17 01:40:56 -07:00
Frederic Junod
7de0e79c62 Remove unused goog.requires 2013-09-17 09:41:22 +02:00
Éric Lemoine
ddc8fbcff7 Merge pull request #1001 from elemoine/keyhandler
Don't register for keyboard events on the document
2013-09-16 13:59:42 -07:00
Éric Lemoine
aa5214d3a1 Add an "accessible" example 2013-09-16 22:51:57 +02:00
Éric Lemoine
b81a4e875b Remove noModifierKeys condition for keyboad zoom
Refs #917. With the key hanler now attached to the map target by default we can remove the noModifierKeys condition for the keyboard zoom interaction. This will prevent the back button shortcut (alt + <back arrow>) to work, but it's ok, the map is focused so it's the one with the highest priority.
2013-09-16 22:51:44 +02:00
Éric Lemoine
f863ee9e37 Attach key handler to map target 2013-09-16 22:43:26 +02:00
Éric Lemoine
4abdac2abf Merge pull request #1030 from elemoine/touches
Exclude tiles that touches the source extent
2013-09-16 10:00:11 -07:00
Éric Lemoine
4990c797d1 WMTS tiles touching the extent are excluded 2013-09-16 15:53:13 +02:00
Éric Lemoine
832be21c0f WMS tiles touching the extent are excluded 2013-09-16 15:52:52 +02:00
Éric Lemoine
70c66d4cf1 Add ol.extent.touches 2013-09-16 15:51:12 +02:00
Tim Schaub
f54a54a432 Merge pull request #1029 from tschaub/tilejson-extent
Use proper extent structure for TileJSON.
2013-09-16 06:47:29 -07:00
Tim Schaub
7caaed4218 Merge pull request #1017 from tschaub/provide-objects-only
Never use goog.provide with primitives (especially with falsely values).
2013-09-16 06:46:26 -07:00
Tim Schaub
8b25e2a63e Merge pull request #955 from tschaub/proj
Move projection to ol.proj namespace and limit exports.
2013-09-16 06:42:38 -07:00
Tim Schaub
97d614285e New extent structure for TileJSON
The change in e806f51b3d neglected to correct the extent handling for the TileJSON source.
2013-09-15 22:22:20 -06:00
Tim Schaub
e1bafd2f6e Export ol.proj.Projection.prototype.getExtent for use in WMTS example 2013-09-15 22:04:51 -06:00
Tim Schaub
9a2dac7182 Limit ol.proj exports 2013-09-15 22:04:51 -06:00
Tim Schaub
b524de417b Rename ol.ProjectionUnits to ol.proj.Units 2013-09-15 22:04:51 -06:00
Tim Schaub
9a29c0e22d Rename ol.ProjectionLike to ol.proj.ProjectionLike 2013-09-15 22:01:56 -06:00
Tim Schaub
3b20cc7b53 Rename ol.Projection to ol.proj.Projection 2013-09-15 22:01:56 -06:00
Tim Schaub
b192335e56 Merge pull request #1027 from tschaub/closure-util
Use the closure-util package.  Documentation will come when this is a more complete solution.  See #1027 for basic usage instructions.
2013-09-15 15:36:13 -07:00
Tim Schaub
591f022e9a Merge pull request #956 from tschaub/extent
Change structure for ol.Extent.  This makes extent use `[minX, minY, maxX, maxY]` order.
2013-09-15 15:28:35 -07:00
Tim Schaub
13c84b0523 Export ol.Geolocation.SUPPORTED and provide ol.Geolocation 2013-09-15 15:54:41 -06:00
Tim Schaub
589c6f8a0b Export ol.DeviceOrientation.SUPPORTED and provide ol.DeviceOrientation 2013-09-15 15:54:41 -06:00
Tim Schaub
210b489a6c Provide ol.renderer.dom instead of ol.renderer.dom.SUPPORTED 2013-09-15 15:54:41 -06:00
Tim Schaub
a2c70dba85 Provide ol.canvas instead of ol.canvas.SUPPORTED
This is not currently used outside the library, so it is not exported.
2013-09-15 15:54:01 -06:00
Tim Schaub
54738e29eb Export ol.webgl.SUPPORTED and provide ol.webgl 2013-09-15 15:51:17 -06:00
Éric Lemoine
bbe4417be5 Merge pull request #1025 from elemoine/notify
Remove ol.Object#bindTo noNotify option
2013-09-15 14:28:58 -07:00
Tim Schaub
f1f319d6ad Preemptively set global properties
As mentioned in the comments, calling goog.getUid and goog.events.listen on the global object (as done in map.js and deviceorientation.js) set global properties.  To let Mocha check for other leaks, we preemptively set these properties.
2013-09-15 14:22:41 -06:00
Tim Schaub
13b55b04a8 Unnecessary spy 2013-09-15 10:41:44 -06:00
Éric Lemoine
009172951c WebGL image layer tests require the common proj 2013-09-15 10:37:22 -06:00
Éric Lemoine
ecd82297a0 Better setup/teardown for ol.proj tests 2013-09-15 10:37:01 -06:00
Tim Schaub
e806f51b3d Changing extent structure back to single array: [minX, minY, maxX, maxY]
This means we'll have to have a new structure and new methods for 3D envelopes.
2013-09-15 00:31:32 -06:00
Tim Schaub
de0e8aeced New extent structure in examples 2013-09-14 21:14:55 -06:00
Tim Schaub
e84e0e1233 WebGL renderer updates for new extent structure 2013-09-14 21:14:55 -06:00
Tim Schaub
1a7e99f67e DOM renderer updates for new extent structure 2013-09-14 21:13:47 -06:00
Tim Schaub
e575df6df0 Canvas renderer updates for new extent structure 2013-09-14 21:13:47 -06:00
Tim Schaub
3faa035de3 Geom2 package working with new extent structure 2013-09-14 21:13:47 -06:00
Tim Schaub
e6b395e2ee View support for new extent structure 2013-09-14 21:13:46 -06:00
Tim Schaub
511e5ad5e8 Vector layer updates for new extent structure 2013-09-14 21:13:46 -06:00
Tim Schaub
75cb19d7e1 Source updates for new extent structure 2013-09-14 21:13:46 -06:00
Tim Schaub
a670b7979c Tile grid working with new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
65863614bb GeoJSON and TopoJSON tests for new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
0eb4cd6dd4 Proj support for new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
7d00159bff WMS capabilities parsing with new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
5d18da4035 Filter encoding with new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
3ea6041714 GML parsing with new extent structure 2013-09-14 21:11:53 -06:00
Tim Schaub
9226472380 Update geom package to use new extent structure 2013-09-14 21:11:52 -06:00
Tim Schaub
208d86b5bf Arg order for extent function in expressions 2013-09-14 21:11:52 -06:00
Tim Schaub
6955499534 Update rtree to use new extent structure 2013-09-14 21:11:52 -06:00
Tim Schaub
60bf396e25 Update geom package to use new extent structure 2013-09-14 21:11:52 -06:00
Tim Schaub
dbccb8b231 Function for cloning extents 2013-09-14 21:11:52 -06:00
Tim Schaub
fcf00dea8b New structure for extent: [minCoord, maxCoord] 2013-09-14 21:11:52 -06:00
Tim Schaub
3dc2b69615 Test conventions
* use `be` or `equal` for strict equality tests
 * use `be.a` for `instanceof` checks
 * use dot instead of bracket notation
2013-09-14 18:10:13 -06:00
Tim Schaub
377da9349e Don't use private date_ property (see #1026)
It looks like at some point the Closure Library exposed a public `date` property for this same purpose.  The version of the Closure Library that comes with the closure-util package uses this property.  At some point later, I'll demonstrate how we can control which version of the library we depend on.
2013-09-14 18:10:12 -06:00
Tim Schaub
75fffd1f47 Making use of the closure-util package
This provides some initial development utilities for people using Node.

Instructions for installing:

    npm install

After pulling down the dependencies, you can start a developement server that provides the libraries (ol and Closure Library) in debug mode (not minified/compiled).  Run the dev server with the following:

    npm start

Currently, the example index page needs to be built with `build.py`.  After building that, you should be able to browse all static files, view the examples and run the tests.
2013-09-14 18:10:12 -06:00
Paul Spencer
3a91aa3d36 fix lint issue 2013-09-13 11:23:06 -04:00
Paul Spencer
3ab50facc7 Label the link to ol.interaction as ol.interaction.Interaction
The documentation is really talking about instance of Interaction, not the namespace.  This is more clear for users.
2013-09-13 11:23:06 -04:00
Paul Spencer
28ee9bcd9b remove export for conditionType as it breaks the build to have it in there. 2013-09-13 11:23:06 -04:00
Paul Spencer
d7eee91195 Add exports for interactions. 2013-09-13 11:23:05 -04:00
Bart van den Eijnden
26b46d248b Merge pull request #1022 from bartvde/parser-api
Parser api changes (remove read/write for feature parsers and add parser to the filenames) (r=@elemoine)
2013-09-13 08:01:57 -07:00
Éric Lemoine
8301b01395 Remove ol.Object#bindTo noNotify option 2013-09-13 16:46:49 +02:00
Frédéric Junod
2ce1c29c4d Merge pull request #995 from fredj/export-map_example
Better user notification if a.download attribute is not supported
2013-09-13 05:11:15 -07:00
Bart van den Eijnden
d8ae3c161c rename parser files to have parser as part of their filename, so they follow the ol3 conventions 2013-09-13 11:05:00 +02:00
Bart van den Eijnden
99f2d0e3d5 do not export read and write for feature parsers 2013-09-13 10:35:57 +02:00
Éric Lemoine
60623e3061 Merge pull request #1020 from elemoine/condition
Change the interaction condition signature
2013-09-12 09:53:05 -07:00
Éric Lemoine
ba3f97d50a Change the interaction condition signature 2013-09-12 18:08:01 +02:00
Tim Schaub
daddc61dc6 Merge pull request #1015 from tschaub/export
Export ol.source.XYZ.prototype.setUrl.
2013-09-11 12:14:07 -07:00
Tom Payne
d1782dc4bb Merge pull request #1012 from twpayne/more-renames
More renames
2013-09-11 11:33:40 -07:00
Tim Schaub
c029e8770c Used in example but not exported (see #1011) 2013-09-11 12:21:27 -06:00
Éric Lemoine
364e31fdb1 Merge pull request #1013 from elemoine/tileimage
Even more renames
2013-09-11 09:28:42 -07:00
Éric Lemoine
78a3ac46dd Rename options type for ol.source.TileImage 2013-09-11 18:28:03 +02:00
Éric Lemoine
7db1b4b337 Rename file for ol.source.TileImage 2013-09-11 18:28:03 +02:00
Tom Payne
b2da95de4b Merge pull request #1011 from twpayne/set-url
Add ol.source.XYZ#setUrl
2013-09-11 09:17:07 -07:00
Tom Payne
d0216c80cd Rename ol.source.StaticImage to ol.source.ImageStatic 2013-09-11 17:48:49 +02:00
Tom Payne
4542c689e8 Add FIXME about avoiding tile cache clears 2013-09-11 17:12:58 +02:00
Tom Payne
ae6ecb7103 Add XYZ set URL example 2013-09-11 17:12:57 +02:00
Tom Payne
1ef4c379b2 Add ol.source.XYZ#setUrl and friends 2013-09-11 17:12:57 +02:00
Tom Payne
4ef6254c13 Add ol.source.TileImage#setTileUrlFunction 2013-09-11 17:12:57 +02:00
Tom Payne
184c2e52d5 Factor out ol.TileCoordTransformType 2013-09-11 17:12:57 +02:00
Tim Schaub
d57b4844d1 Merge pull request #979 from tschaub/xyz
Export ol.source.XYZ.
2013-09-11 07:55:57 -07:00
Tom Payne
a21ee997ba Rename ol.source.SingleImageWMS to ol.source.ImageWMS 2013-09-11 16:38:01 +02:00
Tim Schaub
1ee2da76af Add example using XYZ tiles from Esri 2013-09-11 00:41:25 -06:00
Tim Schaub
cf37566606 Remove unused require
This was unused before 03f7bb66374b162aab26289b761e7918b79c0ca7 as well.  It would be interesting to see how many other unused requires there are (types that are only referenced in comments but not used in code).
2013-09-11 00:17:02 -06:00
Tim Schaub
843334627e Moving maxZoom default to XYZ source.
No reason this convenience should be restricted to the OSM layer.
2013-09-11 00:17:01 -06:00
Tim Schaub
8d7d1412c9 Adding XYZOptions to objectliterals.jsdoc
I remain uncertain about when to use the @exportClass annotation and when to use the @exportSymbol.  osmsource.exports seems to get away with simply @exportSymbol, but many other sources use @exportProperty.
2013-09-11 00:17:01 -06:00
Tim Schaub
0df6cebff9 minZoom is not a supported property of ol.tilegrid.XYZOptions 2013-09-11 00:17:01 -06:00
Tim Schaub
a6fb72c240 Export XYZ source 2013-09-11 00:17:01 -06:00
Tim Schaub
32d35386ba Merge pull request #1008 from tschaub/code-gen
Non-greedy pattern matching for types.
2013-09-10 23:13:55 -07:00
Tim Schaub
4d71d2b1e8 Less greedy 2013-09-10 23:24:43 -06:00
Tim Schaub
919e2d39f1 Merge pull request #1009 from tschaub/tile
Use new name for tile layer in moveend example.
2013-09-10 22:23:20 -07:00
Tim Schaub
d9a2c66909 New name for tile layer 2013-09-10 21:59:08 -06:00
Tim Schaub
c845d85a31 Merge pull request #982 from tschaub/moveend
Fire a moveend event when the view settles.
2013-09-10 16:36:31 -07:00
Frédéric Junod
643e4592c5 Merge pull request #1007 from fredj/objectliterals
Fix ol.animation.BounceOptions apidoc (default easing function)
2013-09-10 09:18:39 -07:00
Frederic Junod
adf8422391 Fix ol.animation.BounceOptions apidoc (default easing function) 2013-09-10 18:16:33 +02:00
Frédéric Junod
398c527e1a Merge pull request #1006 from fredj/WMTSOptions
Add missing 'version' property to ol.source.WMTSOptions
2013-09-10 08:16:02 -07:00
Tim Schaub
ba7e0e7da3 Merge pull request #973 from tschaub/default-style
Rework default style handling.
2013-09-10 07:58:44 -07:00
Frederic Junod
25aa1688e5 Add 'version' property to ol.source.WMTSOptions 2013-09-10 16:40:36 +02:00
Frédéric Junod
2e4ffb3591 Merge pull request #1003 from fredj/extent
Minor coding style and simplification for ol.Extent
2013-09-10 07:06:31 -07:00
Tom Payne
b4c2cd0eb2 Merge pull request #1004 from twpayne/tiled-wms-rename
Rename tiledwmssource.exports to tilewmssource.exports
2013-09-10 06:54:28 -07:00
Tom Payne
ea653ceec8 Rename tiledwmssource.exports to tilewmssource.exports 2013-09-10 15:53:14 +02:00
Frederic Junod
f1bce39fa9 Rename optional param to opt_extent 2013-09-10 14:41:12 +02:00
Frederic Junod
d34a63944b Use ol.extent.createOrUpdate function 2013-09-10 14:33:12 +02:00
Éric Lemoine
48b2ece5a1 Merge pull request #1002 from elemoine/tilewms
Rename tiledwmssource.js to tilewmssource.js
2013-09-10 04:43:22 -07:00
Éric Lemoine
762fed6f8d Change Tiled to Tile in a comment 2013-09-10 09:41:38 +02:00
Éric Lemoine
8a7e13a50c Rename tiledwmssource.js to tilewmssource.js 2013-09-10 09:41:38 +02:00
Éric Lemoine
b92f5efbe8 Merge pull request #994 from elemoine/update-params
Allow changing parameters/dimensions for WMS and WMTS
2013-09-10 00:40:29 -07:00
Frédéric Junod
14d550de0f Merge pull request #997 from fredj/apidoc
More api doc content
2013-09-09 08:29:58 -07:00
Éric Lemoine
31cc1f5541 More robust coordinate keys for WMTS and TiledWMS
This uses more robust ZXY coordinate keys, and caches the key to avoid creating garbage each time getKeyZXY is called.
2013-09-09 17:01:38 +02:00
Éric Lemoine
0823ee4ad3 Add getDimensions/updateDimensions to WMTS 2013-09-09 17:00:05 +02:00
Olivier Terral
e16de02cb2 Add getParams/updateParams to TiledWMS 2013-09-09 17:00:05 +02:00
Tom Payne
8663a5027b Handle tile source revisions in DOM tile layer renderer 2013-09-09 17:00:05 +02:00
Tom Payne
00bdeb6bcf Don't use rendered framebuffer when source revision has changed 2013-09-09 17:00:05 +02:00
Tom Payne
cd0186dde5 Store revision number in sources and update it on changes 2013-09-09 17:00:05 +02:00
Tom Payne
4f27dd35d8 Allow tile cache key calculation to be overridden 2013-09-09 17:00:05 +02:00
Olivier Terral
9fb4514b4e Add getParams/updateParams to SingleImageWMS 2013-09-09 16:50:10 +02:00
Tom Payne
c82aeb586f Merge pull request #998 from twpayne/consistent-names
Consistent names
2013-09-09 07:48:42 -07:00
Tom Payne
bcb4813615 Rename ol.layer.VectorLayer2 to ol.layer.Vector2 2013-09-09 16:21:04 +02:00
Tom Payne
d1659b8e69 Rename ol.source.VectorSource2 to ol.source.Vector2 2013-09-09 15:18:31 +02:00
Tom Payne
23505799b6 Rename ol.test.source.MockTileSource to ol.test.source.TileMock 2013-09-09 15:17:36 +02:00
Tom Payne
8f8f94e697 Rename ol.layer.TileLayer to ol.layer.Tile 2013-09-09 15:14:45 +02:00
Tom Payne
8f6f5e42c6 Rename ol.source.TiledWMS to ol.source.TileWMS 2013-09-09 15:12:38 +02:00
Tom Payne
0235caa1e0 Rename ol.source.ImageTileSource to ol.source.TileImage 2013-09-09 15:09:25 +02:00
Tom Payne
bf1d804a5e Rename ol.source.DebugTileSource to ol.source.TileDebug 2013-09-09 15:07:05 +02:00
Frédéric Junod
7ffd2bcaa1 Merge pull request #993 from pagameba/deviceorientation-ios
Detect iOS compass heading
2013-09-09 05:57:34 -07:00
Tom Payne
71a396a189 Rename ol.source.TileSource to ol.source.Tile 2013-09-09 14:40:23 +02:00
Tom Payne
7d5a84ce8a Rename ol.layer.ImageLayer to ol.layer.Image 2013-09-09 14:36:40 +02:00
Tom Payne
5967f96047 Rename ol.source.ImageSource to ol.source.Image 2013-09-09 14:33:12 +02:00
Tom Payne
fc2975f346 Rename ol.layer.LayerGroup to ol.layer.Group 2013-09-09 14:23:16 +02:00
Tom Payne
e428b66ab4 Rename ol.layer.LayerBase to ol.layer.Base 2013-09-09 14:18:24 +02:00
Paul Spencer
4117a5df2d check iOS compass calibration via webkitCompassAccuracy
Ensure that webkitCompassAccuracy is not -1 as this indicates that the
compass has not been calibrated and its values cannot be trusted.
2013-09-09 08:05:37 -04:00
Paul Spencer
f56e01104b Merge pull request #1 from fredj/deviceorientation-ios
Rename externs/html5.js to externs/closure-compiler.js
2013-09-09 05:00:43 -07:00
Frederic Junod
03e2f1a903 Add links to Proj4js and CONTRIBUTING.md 2013-09-09 12:07:16 +02:00
Frederic Junod
20916c75bb Add more api doc 2013-09-09 12:07:03 +02:00
Frédéric Junod
cf7b40268b Merge pull request #988 from fredj/icon_example
IE10 compatibility: no tooltip on icon.html example
2013-09-09 01:58:22 -07:00
Frederic Junod
0efe92ab4c Fix popover in icon example 2013-09-09 10:23:28 +02:00
Frédéric Junod
f123f5e57b Merge pull request #986 from fredj/rotate-north_example
IE10 CSS compatibility: custom-controls example
2013-09-09 01:09:17 -07:00
Frederic Junod
77c7d02873 Better user notification if a.download attribute is not supported 2013-09-09 09:55:30 +02:00
Frederic Junod
0b82cb8050 Fix rotate-north control display on touch devices 2013-09-09 09:19:45 +02:00
Frederic Junod
4bae5e755a Rename externs/html5.js to externs/closure-compiler.js
Add add a fix for issues:
  * https://code.google.com/p/closure-compiler/issues/detail?id=1084
  * https://code.google.com/p/closure-compiler/issues/detail?id=1088
2013-09-08 16:53:28 +02:00
Éric Lemoine
5861f6a148 Merge pull request #992 from elemoine/urlfunction
Stricter with types
2013-09-07 22:44:49 -07:00
Paul Spencer
69872c99d2 Detect iOS compass heading
iOS webkit does not provide an absolute alpha, instead it provides
webkitCompassHeading.
2013-09-07 21:48:49 -04:00
Éric Lemoine
02a285665b Remove unneeded FIXME 2013-09-07 23:50:15 +02:00
Éric Lemoine
e01344f0da Be stricter with types in WMTS 2013-09-07 23:50:01 +02:00
Éric Lemoine
3036ee01ad Be stricter with types in BingMaps 2013-09-07 23:49:37 +02:00
Éric Lemoine
1e308e34f9 Stricter type def for ol.TileUrlFunctionType 2013-09-07 23:32:38 +02:00
Éric Lemoine
30acfc20c3 Stricter type def for ol.ImageUrlFunctionType 2013-09-07 23:32:30 +02:00
Tim Schaub
13a937fad7 Lazily create default style 2013-09-07 09:19:11 -06:00
Tim Schaub
cc11efa420 Merge pull request #958 from tschaub/requires
Make the `build/check-requires-timestamp` target work with namespace provides in cases where the namespace provide isn't required by a module that provides constructors or other objects within that namespace.  This may seem a bit odd, but if I want to provide `foo.bar.Bam` it isn't strictly necessary that my module require `foo.bar`.

To make this build target work, we stick with the following convention (used in the Closure Library):

 * If you want to make a function available via `goog.require`, use `goog.provide` to provide the object of which the function is a member (e.g. to make the `foo.bar.baz` function available, use `goog.provide('foo.bar')`).
2013-09-07 08:13:06 -07:00
Frédéric Junod
a177cf159b Merge pull request #990 from fredj/examples_no_webgl
Better user notification if WebGL is not supported
2013-09-06 14:35:54 -07:00
Frederic Junod
aa823e2b28 Better user notification if WebGL is not supported 2013-09-06 22:36:39 +02:00
Frederic Junod
393566155d Export ol.*.SUPPORTED symbols 2013-09-06 22:34:32 +02:00
Frédéric Junod
48bf1702d4 Merge pull request #981 from fredj/side-by-side
Side-by-side example broken
2013-09-06 12:51:43 -07:00
Frederic Junod
169e66835d Bind to layergroup instead of layers 2013-09-06 18:17:12 +02:00
Éric Lemoine
91b6258f13 Merge pull request #985 from ebelo/patch-1
add webgl only info
2013-09-06 02:09:03 -07:00
Emmanuel Belo
dbfa1726d5 Add "WebGL only" note to bind-input example 2013-09-06 11:05:43 +02:00
Éric Lemoine
bebe39102c Merge pull request #978 from pagameba/doc-deviceorientation
More comprehensive docs for ol.DeviceOrientation
2013-09-06 01:39:17 -07:00
Tim Schaub
6617969d36 Example using the moveend event 2013-09-05 15:36:03 -06:00
Tim Schaub
50ed564bf6 Fire a moveend event after rendering
The moveend event is fired after rendering if there is no pending animation, current interaction, or other pre-render functions in the queue.
2013-09-05 15:35:53 -06:00
Paul Spencer
a0ca05d18e Use markdown format for inline links 2013-09-05 09:01:49 -04:00
Paul Spencer
74158e52be Update based on comments
This removes @class and fixes the return type pattern to match the
project standard.  There are a couple of minor changes to the text as
well.
2013-09-05 07:57:16 -04:00
Paul Spencer
f9ba90f4ca More comprehensive docs for ol.DeviceOrientation
Adding an extended class description of DeviceOrientation along with
some additional details in the property accessors.
2013-09-04 21:28:59 -04:00
Tim Schaub
15609f36ad Unused imports 2013-09-04 13:56:03 -06:00
Tim Schaub
2ac3d4d2cd Export namespaces instead of functions in generated code 2013-09-04 13:56:02 -06:00
Tim Schaub
8b7a0a060c Export ol.interaction namespace instead of the defaults function 2013-09-04 13:55:54 -06:00
Tim Schaub
716b7b0cec Export ol.control namespace instead of ol.control.defaults function 2013-09-04 13:55:54 -06:00
Tim Schaub
7d510310ed Removing unnecessary require 2013-09-04 13:55:54 -06:00
Tim Schaub
36ea408ed2 Handle namespace provides
It looks like the convention in the Closure Library is to export either namespaces (starting with lowercase), constructors (starting with uppercase), or enums (all uppercase, one instance).  I don't see any places where the Closure Library exports a function that is not a constructor.

Following the same convention, when we export `ol.foo`, it means we are making available function properties of the `ol.foo` object that start with a lowercase letter.
2013-09-04 13:55:54 -06:00
Tim Schaub
fa1601f04f Export namespaces or constructors but not functions 2013-09-04 13:55:54 -06:00
Tim Schaub
8ca3f13bd2 Instead of providing animation functions, provide the namespace
This follows the convention in the Closure Library of providing either namespace objects (where the property starts with a lowercase letter), constructors (where the property starts with an uppercase letter), or enums (all uppercase properties, only one instance of this in the closure library).
2013-09-04 13:55:36 -06:00
Frédéric Junod
cd11ebbc8a Merge pull request #976 from fredj/focus_touchend
Reset the map focus on 'mouseout' and 'touchend'
2013-09-04 07:06:22 -07:00
Frederic Junod
ae314916cf Reset the map focus on 'mouseout' and 'touchend' 2013-09-04 13:21:06 +02:00
Éric Lemoine
69107621bf Merge pull request #975 from elemoine/set-target
Remove ol.Map#target_
2013-09-04 04:11:49 -07:00
Éric Lemoine
fe1f10e797 No need for ol.Map#target_ 2013-09-04 12:08:15 +02:00
Tom Payne
9c28d0c112 Merge pull request #971 from twpayne/set-target
Cleaner ol.Map#setTarget handling
2013-09-04 02:32:02 -07:00
Frédéric Junod
25b99d5997 Merge pull request #925 from fredj/ms_pointer_events
MSPointer events fixes
2013-09-03 22:34:14 -07:00
Tim Schaub
a34f5d110c Merge pull request #949 from tschaub/feature-exports
Limited feature exports.
2013-09-03 16:17:32 -07:00
Tim Schaub
bd4f2bf1cb Merge pull request #972 from tschaub/before-render
Rename addPreRenderFunction to beforeRender and remove the plural.
2013-09-03 16:16:48 -07:00
ahocevar
94942e636c Merge pull request #969 from ahocevar/master
WMS getFeatureInfoOptions ignored in minified build
2013-09-03 12:57:09 -07:00
ahocevar
3bce782943 Making sure that options are not renamed 2013-09-03 20:02:49 +02:00
Tim Schaub
8e2b065ece Exporting set and setGeometry
Since the set method is exported on ol.Object, we need to export the method on the feature prototype to get correct behavior.
2013-09-03 11:54:58 -06:00
Tim Schaub
dc76b81780 Rename addPreRenderFunction to beforeRender and remove the plural 2013-09-03 10:57:31 -06:00
Tom Payne
aafd7e91cc Update teleport example to use string target 2013-09-03 15:26:19 +02:00
Tom Payne
83a9724270 Update ol.control.FullScreen to handle string targets 2013-09-03 15:26:19 +02:00
Tom Payne
53223be376 Perform ol.Map#setTarget string-to-Element conversion in event handler
With this change, ol.Map#setTarget no longer changes the type of the
value passed to it.
2013-09-03 15:26:19 +02:00
Éric Lemoine
e83e0e1374 Merge pull request #970 from pagameba/doc-GeolocationPositionOptions
Link to HTML5 Geolocation PositionOptions docs
2013-09-03 06:05:35 -07:00
Paul Spencer
fa48fc1905 Link to HTML5 Geolocation PositionOptions docs 2013-09-03 07:54:20 -04:00
Frederic Junod
f994c4f8a1 Only dispatch touchmove events after a touchstart 2013-09-03 09:35:30 +02:00
Frederic Junod
77f6b4ff59 Only consider touch events to compute ol.interaction.Touch.targetTouches 2013-09-03 09:35:30 +02:00
Frederic Junod
2b5e0c2c31 Change touchmove and touchstart listened element to 'document'
As for the mouse events, this allows to drag, zoom or rotate the map
with pointer(s) who moved outside of the viewport.
2013-09-03 09:35:30 +02:00
Tim Schaub
85509e1a40 Merge pull request #957 from tschaub/use-coordinate
Use ol.Coordinate instead of ol.geom.Vertex.
2013-09-02 15:53:29 -07:00
Éric Lemoine
e826e83530 Merge pull request #940 from elemoine/getarray
Export ol.Collection#getArray
2013-09-02 09:24:22 -07:00
Éric Lemoine
d68f411e82 Add doc for ol.Collection#getArray 2013-09-02 18:24:07 +02:00
Frédéric Junod
4483725185 Merge pull request #933 from fredj/focus
Move focus_ position update into handleMapBrowserEvent
2013-09-02 08:16:55 -07:00
Éric Lemoine
6a66e749f6 Merge pull request #953 from elemoine/overlay
Make ol.Overlay consistent with ol.control.Control
2013-09-02 07:03:11 -07:00
ahocevar
39b4da5ca2 Merge pull request #945 from ahocevar/select-followup
Follow-up improvements for #897
2013-09-02 06:47:01 -07:00
Éric Lemoine
09d9f28fe1 Merge pull request #963 from elemoine/getcontrols
Export ol.Map.prototype.getControls
2013-09-02 05:55:51 -07:00
Frédéric Junod
7b3a95288e Merge pull request #966 from fredj/geolocation_example
Reduce the width of the div to better see the error messages
2013-09-02 05:53:20 -07:00
Tim Schaub
12839f6f50 Merge pull request #946 from tschaub/control-options
Remove map from ControlOptions.
2013-09-02 05:40:45 -07:00
Frederic Junod
19f8ba75bc Reduce the width of the div to better see the error messages 2013-09-02 14:40:34 +02:00
Éric Lemoine
52c58721e1 export ol.Map.prototype.getControls 2013-09-02 14:17:23 +02:00
Éric Lemoine
7e25ecb3dc Remove map from OverlayOptions 2013-09-02 14:15:11 +02:00
Éric Lemoine
dd4b2e3e88 Add overlay-related methods to ol.Map 2013-09-02 14:12:54 +02:00
Éric Lemoine
3885815c1d Merge pull request #959 from probins/controlexamples
Out-of-date examples in control api docs
2013-09-02 05:10:47 -07:00
Peter Robins
6b61e9d84b Remove examples from control api docs
[ci skip]
2013-09-02 07:44:08 -04:00
Éric Lemoine
1c72a4d078 Merge pull request #947 from elemoine/attribution
Make ol.Attribution take an options object
2013-09-02 03:10:41 -07:00
Éric Lemoine
7af4cbb75e Export ol.Collection#getArray 2013-09-02 11:25:52 +02:00
Frédéric Junod
fdc70f3c30 Merge pull request #962 from fredj/lint
Reorder goog.require
2013-09-02 02:17:55 -07:00
Frederic Junod
34f6ba4ee8 Reorder goog.require 2013-09-02 11:01:31 +02:00
Éric Lemoine
e2a1c13439 Merge pull request #960 from elemoine/handlemappostrender
Remove handleMapPostrender extension point
2013-09-01 14:15:19 -07:00
Tim Schaub
109ef38d69 Exporting setMap so it is documented for custom controls 2013-08-31 16:40:46 -06:00
Éric Lemoine
96ef1ed3bd Remove handleMapPostrender extension point 2013-08-31 23:25:08 +02:00
Tim Schaub
8844310bf4 Call setMap instead of passing map to control 2013-08-31 14:45:03 -06:00
Tim Schaub
3e1de0b1ad Call addControl instead of passing map to control 2013-08-31 14:44:29 -06:00
Tim Schaub
6d9d5ecb4b Update ZoomSlider example in docs 2013-08-31 07:29:44 -06:00
Tim Schaub
96dfe5656d Merge pull request #950 from pagameba/doc-animations
Improve documentation for animation-related stuff.
2013-08-30 14:49:07 -07:00
Tim Schaub
b17feb4580 Add extra requires (see #958) 2013-08-30 15:20:21 -06:00
ahocevar
d8bc769758 Do not delete from oldFeatureMap 2013-08-30 23:18:59 +02:00
ahocevar
cbf7f91cfb instanceof check to avoid ducktyping 2013-08-30 23:18:17 +02:00
Tim Schaub
4679ba77c4 Don't export ol.control.Control.prototype.setMap 2013-08-30 14:59:47 -06:00
Tim Schaub
b479909e25 Remove map from control options 2013-08-30 14:59:21 -06:00
Tim Schaub
33f4d1e0ee Add missing provide and require for ol.geom 2013-08-30 13:32:04 -06:00
Tim Schaub
58fe110419 Rename ol.geom.VertexArray to ol.CoordinateArray 2013-08-30 13:30:53 -06:00
Tim Schaub
7165d414c7 Use ol.Coordinate instead of ol.geom.Vertex 2013-08-30 13:30:25 -06:00
Tim Schaub
6f98a75fb8 Limit feature exports 2013-08-30 13:14:17 -06:00
Paul Spencer
bfa1fbc2cd remove trailing whitespace to make the linter happy. 2013-08-30 13:31:10 -04:00
Paul Spencer
8c4c83b207 Improve documentation for animation-related stuff
The animation-related code is missing sufficient detail to make it
usable without digging in to the code.  This adds some additional
detail to the ol.animation namespace, the related options, and makes
note of the existance of ol.animation in the documentation of
ol.Map.addPreRenderFunction(s).
2013-08-30 11:32:47 -04:00
Éric Lemoine
729039ba04 Adapt examples to new signature for ol.Attribution 2013-08-30 16:50:36 +02:00
Éric Lemoine
38ab64c3c3 Adapt sources to new signature for ol.Attribution 2013-08-30 16:50:36 +02:00
Éric Lemoine
818894bb56 ol.Attribution is a single-arg constructor 2013-08-30 16:50:36 +02:00
ahocevar
9dfbfab648 Follow-up improvements for #897
* Interaction is no goog.Disposable any more.
* Permanent cleanup during selection instead of disposeInternal.
* Moved selectionLayers creation outside feature loop.
* Maintain selectedFeatures and unselectedFeatures only for
  layers that have a setRenderIntent method.
2013-08-30 16:26:49 +02:00
ahocevar
29317c3316 Merge pull request #897 from ahocevar/select
Select control
2013-08-30 06:25:14 -07:00
ahocevar
643eb5c4cc Better initial extent 2013-08-30 14:46:32 +02:00
ahocevar
9dae49dc18 Symbolizer defaults for the select renderIntent 2013-08-30 13:47:43 +02:00
ahocevar
83720975f8 More specific INTENTCHANGE instead of SYMBOLIZER event 2013-08-30 12:10:55 +02:00
ahocevar
e2c4fec253 Let's at least be disposable, so we can clean up after ourselves 2013-08-30 12:00:06 +02:00
ahocevar
2a4aef0b58 THIS_IDENTIFIER no longer needed 2013-08-30 11:44:52 +02:00
ahocevar
6bb23cdda5 No longer inheriting from EventTarget 2013-08-30 11:43:35 +02:00
Éric Lemoine
1ee12e696e Merge pull request #942 from elemoine/expr
Move and rename exports file for ol.expr
2013-08-29 13:01:47 -07:00
Éric Lemoine
ff30a89a49 Merge pull request #943 from elemoine/proj
Move exports file for proj
2013-08-29 13:00:46 -07:00
Éric Lemoine
2f5742bc1b Merge pull request #941 from elemoine/feature
ol.Feature.prototype.get need not be exported
2013-08-29 13:00:11 -07:00
ahocevar
8a180e63b2 Filter layer by id 2013-08-29 16:50:55 +02:00
ahocevar
43c67ba09f Do not dispatch selection events for now 2013-08-29 16:50:55 +02:00
ahocevar
95cf0e1264 Less closures 2013-08-29 16:50:55 +02:00
ahocevar
0c1f2328f9 Do not implement a specific clone method
What we need here is a mix of deep and shallow cloning, and we
do not want to do this in a generic ol.Feature#clone() method.
2013-08-29 16:50:55 +02:00
ahocevar
2394b39f6f Use select as keyword 2013-08-29 16:50:54 +02:00
ahocevar
0fbf07fef1 Using a renderIntent lib function instead of this identifier
A 'this' identifier is quite useless with compressed JavaScript,
and in fact it turned out to fail in advanced mode when trying
to access a feature's renderIntent property with it. The added
renderIntent lib function as a Call expression does the job
well.
2013-08-29 16:50:54 +02:00
ahocevar
526dbebadc Re-adding @requires that got lost during rebase. 2013-08-29 16:50:54 +02:00
ahocevar
c47634b2ee Renaming condition to clickOnly, and fixing docs 2013-08-29 16:50:54 +02:00
Frederic Junod
89bdd3bc2c Use a ol.interaction.condition in ol.interaction.Select 2013-08-29 16:50:54 +02:00
ahocevar
bb93a86528 Do not export 'dispose' for now 2013-08-29 16:50:54 +02:00
ahocevar
e5b095bfdf Simplifying setRenderIntent API for bulk changing all features 2013-08-29 16:50:53 +02:00
ahocevar
100b85a7b0 Converting control to an interaction
To dispatch events, the interaction base class now inherits from
goog.events.EventTarget.
2013-08-29 16:50:53 +02:00
ahocevar
c6e61e2d23 Dynamic layers and lazy selection layer creation
With this change, the user provides a filter function instead of
an array of layers. Selection layers are created lazily, and
addition/removal of layers is not handled by the control to give
the user more options, as suggested by @elemoine.
2013-08-29 16:50:53 +02:00
ahocevar
a417b75c1f Simplifying layer mapping
By making selectionLayer an object keyed by source layer UIDs,
we save some indexOf lookups.
2013-08-29 16:50:53 +02:00
ahocevar
d5c0fdd557 Removing addressed TODOs 2013-08-29 16:50:53 +02:00
ahocevar
0391a028c5 Adding layer visibility/addition/removal handling
The Select control creates a selection layer for each layer it
is configured with. When a configured layer is removed from the
map, the selection layer will be made invisible. For configured
layers on the map, the 'visible' property of the selection layer
is bound to the configured layer.
2013-08-29 16:50:53 +02:00
ahocevar
56c228d009 Removing option for temporary layer
Instead, adding setter and getter for a private temp_ property,
as suggested by @elemoine.
2013-08-29 16:50:52 +02:00
ahocevar
3a50a754aa Implementing renderIntent handling 2013-08-29 16:50:52 +02:00
ahocevar
4f2d37b6a3 New ThisIdentifier expression
This allows member expressions to use the 'this' keyword.
2013-08-29 16:50:52 +02:00
ahocevar
89052079b7 Example update after recent API changes 2013-08-29 16:50:52 +02:00
ahocevar
14b69d15f1 One selection layer per source layer
This way all styles can be defined on the source layer, by
defining a rule with a select renderIntent. It also will make
addition and removal of layers easier while the select control
is active.
2013-08-29 16:50:52 +02:00
ahocevar
760694582e Adding missing @requires 2013-08-29 16:50:52 +02:00
ahocevar
f05629b3c3 Work with clones rather than the original features 2013-08-29 16:50:51 +02:00
ahocevar
fdd79a385a Making JSDoc happy 2013-08-29 16:50:51 +02:00
ahocevar
d7e277d0f5 Adding exports 2013-08-29 16:50:51 +02:00
ahocevar
414f4828d6 Making Travis happy 2013-08-29 16:50:51 +02:00
ahocevar
0c54cbd9cc Adding tests 2013-08-29 16:50:51 +02:00
ahocevar
3d22ec4ca8 Simplifying clear/append detection 2013-08-29 16:50:51 +02:00
ahocevar
b06526781c Adding change event 2013-08-29 16:50:51 +02:00
ahocevar
6be1ab80d2 Require layers 2013-08-29 16:50:50 +02:00
ahocevar
19a00bbe27 Making the control's button work 2013-08-29 16:50:50 +02:00
ahocevar
871388d2c0 Adding selection layer and implementing basic click selection 2013-08-29 16:50:50 +02:00
ahocevar
e2526621d1 Select example and skeleton with event listeners 2013-08-29 16:50:50 +02:00
Éric Lemoine
561581cf8b Move exports file for proj 2013-08-29 15:38:00 +02:00
Éric Lemoine
a86ea051bf Move and rename exports file for ol.expr 2013-08-29 15:24:52 +02:00
Éric Lemoine
0c091e868c ol.Feature.prototype.get need not be exported
get is not overridden in ol.Feature.prototype, so there's no need for a specific export.
2013-08-29 14:05:25 +02:00
Frédéric Junod
7298cbd119 Merge pull request #926 from fredj/mapbrowserevent_clanup
ol.MapBrowserEvent cleanup
2013-08-28 22:08:34 -07:00
Tim Schaub
b0e0d18883 Merge pull request #939 from tschaub/initially-hidden
Do not display the popup initially.
2013-08-28 17:07:37 -07:00
Tim Schaub
ba1e985d2f Do not display the popup initially 2013-08-28 18:05:54 -06:00
Tim Schaub
a83f298db1 Merge pull request #937 from tschaub/popup
Bare bones popup example.
2013-08-28 15:04:12 -07:00
Tim Schaub
0361609631 Remove separate arrow element 2013-08-28 15:25:05 -06:00
Tim Schaub
03580bcfec Better title 2013-08-28 14:21:49 -06:00
Tim Schaub
b4df86a17e Remove unused style 2013-08-28 14:21:07 -06:00
Tim Schaub
7cac81857d Merge pull request #936 from tschaub/geom-exports
Proper geometry exports.
2013-08-28 11:40:14 -07:00
Tim Schaub
c34e582f1a Toggle display instead of visibility for proper click handling 2013-08-28 12:36:00 -06:00
Tim Schaub
0f34bbc161 Adding some variety to the examples 2013-08-28 12:35:23 -06:00
Tim Schaub
7f66376315 Basic popup example 2013-08-28 12:28:47 -06:00
Éric Lemoine
e93383c859 Merge pull request #934 from elemoine/vector-layer
ol.layer.Vector pass original options to parent
2013-08-28 10:19:45 -07:00
Tim Schaub
dd37d0e736 Slightly less giant icon 2013-08-28 10:45:24 -06:00
Tim Schaub
9ef439ba23 Exports for specific geometry types 2013-08-28 10:41:07 -06:00
Tim Schaub
fb27d44840 Merge pull request #931 from tschaub/example-data
Move png to data to work with host-examples task.
2013-08-28 07:46:13 -07:00
Éric Lemoine
3deeaa21c7 ol.layer.Vector pass original options to parent
This makes it possible to pass arbitrary property to ol.layer.Vector and use layer.get('property_name') to get the value of properties.
2013-08-28 14:13:37 +02:00
Frederic Junod
d091cfd508 Move focus_ position update into handleMapBrowserEvent
Otherwise, the position is only updated on keyboard or mouse wheel events.
2013-08-28 12:39:25 +02:00
Frédéric Junod
377f031860 Merge pull request #932 from fredj/unclosed_div
Fix unclosed div in examples/icon.html
2013-08-28 03:36:04 -07:00
Frederic Junod
010eda74df Fix unclosed div in examples/icon.html 2013-08-28 11:58:33 +02:00
Frederic Junod
ecf953a125 Remove pressed_ variable and rely on down_ to check if a mouse button is pressed 2013-08-28 11:28:50 +02:00
Éric Lemoine
c608e15943 Merge pull request #929 from elemoine/collectionevent
Add ol.CollectionEvent#getElement
2013-08-28 02:16:57 -07:00
Frederic Junod
dc5b209f7f Change previous_ local variable type to boolean
And rename it to pressed_ for clarity; the variable represents whether
the mouse button is pressed
2013-08-28 11:16:45 +02:00
Frederic Junod
9306704c1d Add documentation in mapbrowserevent.js 2013-08-28 11:16:44 +02:00
Tim Schaub
ab2c4387b8 Move png to data to work with host-examples task 2013-08-27 16:36:13 -06:00
Tim Schaub
01ab16d7d6 Merge pull request #923 from tschaub/icon
Add xOffset and yOffset support to icon symbolizers.
2013-08-27 15:25:22 -07:00
Tim Schaub
e9aa316007 Call getUid once 2013-08-27 16:22:45 -06:00
Tim Schaub
6b625e368b Account for icon offsets when doing feature hit detection 2013-08-27 16:22:45 -06:00
Tim Schaub
efeb00e4a5 Add x/y offset for icon symbolizers 2013-08-27 16:22:45 -06:00
Tim Schaub
6baf5d0b18 Export ol.geom.Geometry.prototype.getCoordinates 2013-08-27 16:22:45 -06:00
Tim Schaub
9c824584b3 Example using an icon symbolizer and displaying a popup
I'm adding this example to demonstrate a few things that should change:

 * the icon symbolizer should accept xOffset and yOffset in pixels
 * the `ol.geom.Geometry.prototype.getCoordinates` method should be exported
 * overlays should have a `panIntoView` method
2013-08-27 16:22:45 -06:00
Tim Schaub
700bb64d2d Merge pull request #927 from tschaub/null-crs
Accept null crs in GeoJSON.
2013-08-27 13:51:18 -07:00
Éric Lemoine
d1e879e03f Use ol.Collection#getElement in tests 2013-08-27 22:11:33 +02:00
Éric Lemoine
9895f879f9 Export ol.CollectionEvent#getElement 2013-08-27 22:08:26 +02:00
Éric Lemoine
9f2c351057 Use ol.CollectionEvent#getElement in LayerGroup 2013-08-27 22:07:45 +02:00
Éric Lemoine
b9f2f7bcb4 Add ol.CollectionEvent#getElement 2013-08-27 22:07:03 +02:00
Tim Schaub
0c555e6e7d Accept null crs 2013-08-27 10:54:00 -06:00
Éric Lemoine
6b6639f620 Merge pull request #924 from elemoine/getextent
Export ol.source.Source.prototype.getExtent
2013-08-27 08:02:49 -07:00
Éric Lemoine
f273be6597 Export ol.source.Source#getExtent 2013-08-27 15:42:55 +02:00
Tim Schaub
e8ddecc8b1 Merge pull request #920 from tschaub/point-examples
Cast to number when creating literals from symbolizers where literal properties must be numeric.
2013-08-26 11:57:09 -07:00
Tim Schaub
ecba1d78c2 Merge pull request #921 from tschaub/geojson-crs
Parse top-level crs member when reading features from GeoJSON.
2013-08-26 10:41:14 -07:00
Tim Schaub
0a3e46b88d Remove unnecessary cast and save 15 bytes using goog.isDef 2013-08-26 09:26:07 -06:00
Tim Schaub
eaf447759f Merge pull request #913 from tschaub/dimension
Allow for vector data with unknown or inconsistent dimension.
2013-08-26 05:59:50 -07:00
Tim Schaub
7e2bd66417 Read crs from top-level object when parsing as features 2013-08-25 12:32:22 -06:00
Tim Schaub
379c11e1ce Add externs for GeoJSON crs member 2013-08-25 12:22:08 -06:00
Tim Schaub
9755240cac Leaving the + operator as a convenience for concatenating strings
When people need to serialize in a format that differentiates string concatenation from addition, they can use the new `concat` function in an expression.  But I don't think we need to throw if people use `+` with strings.
2013-08-23 18:33:52 -04:00
Tim Schaub
8190178fc9 Missing test dependency 2013-08-23 18:28:44 -04:00
Tim Schaub
6ddef67cd9 Add KML earthquake example 2013-08-23 18:17:42 -04:00
Tim Schaub
3c993168c4 Cast to numbers for literals
There are times when we parse from XML without a schema (e.g. KML).  In these cases, features attributes will always be strings.  We can cast to number when creating literals from symbolizers and then assert `!isNaN` instead of asserting that they are numbers before.
2013-08-23 17:30:24 -04:00
Tim Schaub
43953c8efa Call concat instead of using math op in FE expression parsing 2013-08-23 16:46:33 -04:00
Tim Schaub
3b615fa312 Add a concat function for concatenating strings 2013-08-23 13:05:12 -04:00
Frédéric Junod
637bbeb2a7 Merge pull request #903 from fredj/keyboard
Don't react to keyboard events when the focus is on editable inputs
2013-08-22 23:40:42 -07:00
Tom Payne
9a994eab47 Merge pull request #918 from twpayne/source-change-events
Source change events
2013-08-21 07:40:54 -07:00
Tom Payne
0170c426ee Propagate change events from sources via layers 2013-08-21 12:29:49 +02:00
Tom Payne
788ac5f41d Add ol.source.Source#dispatchChangeEvent 2013-08-21 12:29:28 +02:00
Frederic Junod
9e8d559c1b Don't react to keyboard events when the focus is on editable inputs 2013-08-20 14:44:40 +02:00
Tim Schaub
554a725d1a Merge pull request #912 from tschaub/seperate-fill-stroke
Separate fill and stroke symbolizers.  Allow styles with no rules (and also support "else" symbolizers).
2013-08-19 15:43:06 -07:00
Éric Lemoine
9e43719ffb Merge pull request #682 from elemoine/export-func
missing exports
2013-08-19 09:14:16 -07:00
Éric Lemoine
d0f793b7a0 Fix bad option name in ol.control.defaults 2013-08-19 17:00:43 +02:00
Éric Lemoine
d6d15db6e8 Use @exportFunction to export animation functions 2013-08-19 17:00:43 +02:00
Éric Lemoine
f67d3dc165 Use @exportFunction to export ol.interaction.defaults 2013-08-19 17:00:43 +02:00
Éric Lemoine
29a2d2a9f7 Use @exportFunction to export ol.control.defaults 2013-08-19 17:00:43 +02:00
Éric Lemoine
169e986b28 Remove 2nd arg to ol.interaction.defaults 2013-08-19 17:00:43 +02:00
Éric Lemoine
3d2d45e01f Remove 2nd arg to ol.control.defaults 2013-08-19 17:00:37 +02:00
Éric Lemoine
3f6b9c9434 Use ol.Collection#extend in examples
This commit changes the examples to using ol.control.defaults().extend to extend the collection of controls. This is in preparation for a future commit that will remove the 2nd argument to ol.control.defaults. The same is done for ol.interaction.defaults.
2013-08-19 14:25:38 +02:00
Éric Lemoine
41fe103fa4 Export ol.Collection#extend 2013-08-19 14:25:38 +02:00
Éric Lemoine
6576a49178 Make ol.Collection#extend return this
This to be able to do this:

new ol.Map({
  controls: ol.control.defaults().extend([new MyControl()]),
  ...
})
2013-08-19 14:25:38 +02:00
Éric Lemoine
77adbdfa7a Use per-animation function modules
Currently the animation functions share the same module, namely ol.animation. We do differently for ol.control.defaults and ol.interaction.defaults, with ol.control.defaults and ol.interaction.defaults module. This commit replaces the ol.animation module by four modules, one for each animation function.

This makes things more consistent, and will make it possible to use the @exportFunction annotation for the exporting of the animation functions.
2013-08-19 14:25:38 +02:00
Éric Lemoine
a37f114e4b Add export annotation @exportFunction
This commit adds a new export annotation: @exportFunction. @exportFunction is to be used to declare functions that take an options object literal as their first arguments. @exportFunction is to regular functions as @exportClass is to constructors.

The usage of @exportFunction is as follows:

@exportFunction ol.control.defaults ol.control.DefaultsOptions ol.Collection

Note: the Function#export method uses a recursive function. This is to handle nested options.
2013-08-19 14:01:57 +02:00
Éric Lemoine
8d09be7134 No reference to internal types in externs file
Currently we have things like like in the generated externs file (types.js):

/**
 * @type {ol.control.AttributionOptions|undefined}
 */
olx.control.DefaultsOptionsExtern.prototype.attributionOptions;

It doesn't make sense to have external object properties whose types are
internal (ol.control.AttributionOptions in the above example).

With this commit, the generate-exports.py script generates this:

/**
 * @type {olx.control.AttributionOptionsExtern|undefined}
 */
olx.control.DefaultsOptionsExtern.prototype.attributionOptions;
2013-08-19 13:54:26 +02:00
Tom Payne
0ec1f33304 Merge pull request #910 from twpayne/reduced-check-examples
Only check examples in advanced mode
2013-08-19 02:19:48 -07:00
Frédéric Junod
6a276a408d Merge pull request #905 from fredj/css_classes_fixup
IE10 compatibility: full-screen-drag-rotate-and-zoom.html
2013-08-19 01:03:01 -07:00
Tim Schaub
0f9e269057 Ignore extra dimensions and pad with NaN for missing dimensions 2013-08-18 09:57:26 -04:00
Tim Schaub
94c4d420a6 Merge pull request #911 from tschaub/expression-literals
Parse literal nodes in expressions in addition to text nodes.
2013-08-16 08:36:25 -07:00
Tim Schaub
7ccc45b276 No need for rules if no rules have filter 2013-08-15 15:38:58 -04:00
Tim Schaub
9b90129b24 Merge pull request #904 from tschaub/test-correction
Correctly make assertions with expect.
2013-08-15 11:44:31 -07:00
Tim Schaub
183b51a1c0 Parse literal nodes in expressions in addition to text nodes 2013-08-15 14:32:47 -04:00
Tim Schaub
dd72408a88 Dependencies 2013-08-15 14:07:11 -04:00
Tim Schaub
4e053c4c0a No such thing as IconType 2013-08-15 13:57:36 -04:00
Tim Schaub
af1cd64018 Lint 2013-08-15 13:54:37 -04:00
Tim Schaub
966034e4f7 Alphabetize 2013-08-15 13:50:50 -04:00
Tim Schaub
bad401bc17 Add support for "else" symbolizers
When a style has no rules, the "else" symbolizers apply.  When a style has rules and none of them apply to the given feature, the "else" symbolizers apply.  Note that this is different than default symbolizer properties that might be merged into all symbolizers (as in OL2) - I don't think we should support that.
2013-08-15 10:37:18 -04:00
Tim Schaub
6078fe7b02 Line literal color instead of strokeColor etc. 2013-08-15 10:37:18 -04:00
Tim Schaub
a5991aee03 Remove applyDefaultStyle method 2013-08-15 10:37:18 -04:00
Tim Schaub
a670e225cd Clearer naming of method to create symbolizer literals 2013-08-15 10:37:18 -04:00
Tim Schaub
d5d0262b4c Create literal with feature or geometry type 2013-08-15 10:37:18 -04:00
Tim Schaub
c36ceab2a0 Separate stroke and fill 2013-08-15 10:37:18 -04:00
Tim Schaub
dc54128c77 Method to reduce polygon literals 2013-08-15 10:37:18 -04:00
Tim Schaub
36bcd26305 Separate literals from symbolizers 2013-08-15 10:37:18 -04:00
Tim Schaub
90fb37c220 Rename ol.style.SymbolizerLiteral to ol.style.Literal 2013-08-15 10:37:18 -04:00
Tom Payne
b06a6d1aef Only check examples in advanced mode 2013-08-15 15:21:00 +02:00
Frédéric Junod
a12d41b1bc Merge pull request #908 from fredj/bing_key
Fix BingMaps API key in example
2013-08-15 06:11:19 -07:00
Frederic Junod
c793b18c44 Fix BingMaps API key in example 2013-08-15 14:10:29 +02:00
Frederic Junod
4afe025c75 Add missing space between CSS classes 2013-08-15 13:58:58 +02:00
Bart van den Eijnden
c3a920774b Merge pull request #852 from bartvde/ogcfilter2
Add parser for OGC Filter 1.0 and 1.1 (read/write) (r=@tschaub,@ahocevar)
2013-08-15 02:12:58 -07:00
Bart van den Eijnden
ab7d446e25 Merge pull request #3 from tschaub/bartvde-ogcfilter2
Suggestions for filter encoding
2013-08-15 02:12:03 -07:00
Tim Schaub
db658e491f Correct use of expect with spies 2013-08-14 11:57:53 -04:00
Tim Schaub
89daf91c0b Proper use of expect 2013-08-14 11:50:18 -04:00
Tim Schaub
6c8ec8ed95 Test names and instanceof checks 2013-08-14 11:35:44 -04:00
Tim Schaub
2d95488906 Remove special write-only handling for dates 2013-08-14 11:26:01 -04:00
Tim Schaub
824c950824 Parse distance as a number 2013-08-14 09:33:47 -04:00
Tom Payne
e23cbbac13 Merge pull request #902 from twpayne/fix-color
Fix opacity in createFromString
2013-08-14 05:29:09 -07:00
Tom Payne
362ace01da Fix opacity in createFromString 2013-08-14 12:02:23 +02:00
Bruno Binet
7b95509970 Merge pull request #899 from bbinet/renderer-refactoring
Renderer refactoring related to the layer groups
2013-08-13 08:25:33 -07:00
Bruno Binet
88da6da3a7 Trigger CHANGE event only when required
For example only when layer is both ready and visible.
2013-08-13 16:41:43 +02:00
Bruno Binet
8b435059f7 Update color matrices based on framestate values
In getColorMatrix method, we'll update the color matrices only if layerstate
color properties has changed in the framestate.
2013-08-13 16:24:44 +02:00
Bruno Binet
46ea218d0f Make layer renderers more stupid
Layer renderers should not be responsible for listening to layer
properties change and triggering a render.
Layer change events are now forwarded to the map which will trigger a render.
2013-08-13 16:24:44 +02:00
Bruno Binet
a13d4bdded Merge pull request #797 from bbinet/layergroup
Layer group support
2013-08-13 07:24:21 -07:00
Bruno Binet
54bf8c2d2a Bindto valueAsNumber in layer-group example
(now that #898 is in)
2013-08-13 12:37:00 +02:00
Bruno Binet
3ecb5b89ff Create a custom event type for vector layers
Vector layers will now dispatch ol.layer.VectorLayerEventType.ADD and
ol.layer.VectorLayerEventType.REMOVE event types instead of the generic
goog.events.EventType.CHANGE event type.
This will fix a maximum call stack size exceeded javascript error.
2013-08-13 12:27:38 +02:00
Bruno Binet
e4c36378ac ol.Map now have a LAYERGROUP property
The LAYERS property is gone.
2013-08-13 12:27:38 +02:00
Bruno Binet
d84477c1c0 Bind more layer properties in layer-group example
This allows to update hue, saturation, brightness, contrast values.
2013-08-13 12:27:38 +02:00
Bruno Binet
1100cc67da Get opacity from layerState in webglmaprenderer
instead of getting it from layer.getOpacity().
Fix the issue of changing opacity which didn't work with LayerGroups in webgl.
2013-08-13 12:27:38 +02:00
Bruno Binet
f3b63d9c2c Add a layer-group example 2013-08-13 12:27:38 +02:00
Bruno Binet
1aa695580b Add tests for layer.getLayerState() 2013-08-13 12:27:38 +02:00
Bruno Binet
31c8644716 Add tests for ol.layer.LayerGroup 2013-08-13 12:27:38 +02:00
Bruno Binet
1d15d840ac Add layergroup exports 2013-08-13 12:27:37 +02:00
Bruno Binet
097ce52060 Add layergroup support 2013-08-13 12:27:37 +02:00
Bruno Binet
f731d5632c Merge pull request #898 from bbinet/input-valueasnumber
Add support for binding input value as number
2013-08-13 03:24:54 -07:00
Bruno Binet
dddea56c2c Add a temporary html5 externs file
This is needed because the current version of closure compiler we use does not
include externs for valueAsNumber which we now use in ol.dom.Input.
So this backports patch from issue:
https://code.google.com/p/closure-compiler/issues/detail?id=1060

This patch should be reverted when the next closure compiler release is out
with valueAsNumber externs.
2013-08-13 11:31:58 +02:00
Bruno Binet
2dd6321c74 Fix bind-input example to use valueAsNumber 2013-08-13 11:31:58 +02:00
Bruno Binet
afee1ab975 Add VALUE_AS_NUMBER property to ol.dom.Input
This should be used when one want to bind a number instead of a string.
2013-08-13 11:31:58 +02:00
Tim Schaub
a3ec0d776c Building an expression with constructors instead of ol.expr.parse 2013-08-09 17:15:42 -06:00
Bart van den Eijnden
09c27f430d remove accidentally committed swap file 2013-08-09 15:58:31 +02:00
Bart van den Eijnden
8792973c08 make sure the _expression reader can deal with combined propertyname and literals 2013-08-09 15:57:29 +02:00
Bart van den Eijnden
29954d2ff9 trim the string before passing it off to ol.expr.parse 2013-08-09 11:08:19 +02:00
Bart van den Eijnden
deb88a5a6d change _expression reader 2013-08-09 10:42:16 +02:00
Bart van den Eijnden
1948233d1f merge with master - solving conflicts 2013-08-09 09:55:44 +02:00
ahocevar
5673feb48f Merge pull request #885 from ahocevar/wms-getfeatureinfo
Implement WMS GetFeatureInfo
2013-08-08 07:44:04 -07:00
ahocevar
f1e01511b9 Fixing example title
Thanks @bartvde for catching this.
2013-08-08 15:55:37 +02:00
ahocevar
2f37816608 Use X, Y or I, J depending on WMS version
This also adds consistency - Pixel coordinates are now always
rounded to integers.
2013-08-08 14:43:49 +02:00
Tim Schaub
bfff0197d7 Merge pull request #894 from tschaub/more-geojson
Allowing all GeoJSON types to be read as an array of features.  This makes the parser more useful when used with a source that may not already be a feature collection.
2013-08-08 05:41:11 -07:00
ahocevar
c1746f2549 No array needed for a single event
Thanks @bartvde.
2013-08-08 13:19:26 +02:00
Tim Schaub
254f325f29 Provide a method for parsing any GeoJSON as an array of features 2013-08-07 11:50:37 -06:00
Tim Schaub
1f588821b4 Merge pull request #892 from tschaub/symbolizer-opacity
Separate fill and stroke opacity.
2013-08-07 07:52:49 -07:00
Tom Payne
9fdcfedd96 Merge pull request #893 from twpayne/plovr-81ed862
Use plovr-81ed862
2013-08-06 07:05:46 -07:00
Tom Payne
05c950156a Use plovr-81ed862 2013-08-06 15:20:43 +02:00
Tim Schaub
c2cc1af2ac Separate opacity in examples 2013-08-05 11:32:48 -06:00
Tim Schaub
5d0b4563a8 Optionally stroke and fill polygons (closes #475)
This also removes the unsupported width property from PolyStyle (closes #891).
2013-08-05 11:16:49 -06:00
Tim Schaub
993e76e3a1 Support fillOpacity and strokeOpacity on polygon symbolizers 2013-08-05 11:16:49 -06:00
Tim Schaub
f210d6d0e1 Rename line symbolizer opacity to strokeOpacity for consistency
We already have strokeColor and strokeWidth.  Having strokeOpacity makes sense.
2013-08-05 11:16:49 -06:00
Tim Schaub
1cedea6606 Support fillOpacity and strokeOpacity on shape symbolizers 2013-08-05 11:16:48 -06:00
Tim Schaub
2a1ece194d Merge pull request #890 from tschaub/attributions
Move attribution constants to constructors.
2013-08-05 07:43:23 -07:00
ahocevar
759e6ff925 Merge pull request #880 from openlayers/parser-projection
Get source projection from parser
2013-08-05 00:57:27 -07:00
Tim Schaub
c764d76aee Move attributions constant to constructor 2013-08-04 13:31:37 -06:00
ahocevar
cc29ea912b Updating the TopoJSON parser to return a ReadFeaturesResult 2013-08-04 15:10:11 +02:00
ahocevar
9578da0cfb Renaming readFeaturesWithMetadata* back to readFeatures*
Since this is not exported and we do not have a counterpart that
does not return the metadata, it should be fine to use a shorter
name.
2013-08-04 15:10:11 +02:00
ahocevar
0aed05a413 Renaming handleWriteOptions to applyWriteOptions 2013-08-04 15:10:10 +02:00
ahocevar
3ebbdbb48f Use goog.functions.sequence 2013-08-04 15:10:10 +02:00
Bart van den Eijnden
b66f4aef07 make Travis happy 2013-08-04 15:10:10 +02:00
Bart van den Eijnden
8d997f17ec forgot to remove a commented code block 2013-08-04 15:10:10 +02:00
Bart van den Eijnden
17fefda8fd implement GMLReadOptions and GMLWriteOptions as discussed with @ahocevar 2013-08-04 15:10:10 +02:00
Bart van den Eijnden
2f4f508d1a move srsName and axisOrientation from the instance to the read and write functions as discussed with @ahocevar 2013-08-04 15:10:10 +02:00
ahocevar
6f3fa14c53 Sensible axisOrientation and srsName defaults 2013-08-04 15:10:09 +02:00
ahocevar
023d3faf3c Do not translate projections using regular expressions 2013-08-04 15:10:09 +02:00
ahocevar
e32da90f5a Fixing typo
Thanks @bartvde for spotting this.
2013-08-04 15:10:09 +02:00
ahocevar
56e8b1cfb4 Get projection and axis order from GML data
To make tests pass, the winding order of the coordinates in the
test data had to be reversed to conform to common gml practice.
2013-08-04 15:10:09 +02:00
ahocevar
109ec71877 Using single argument for callback and string for projection
This makes the asynchronous and synchronous versions of
readFeatures work with the same data structures, and leaves
projection handling outside the parsers.
2013-08-04 15:10:09 +02:00
Bart van den Eijnden
a4ceb41938 fix up KML tests 2013-08-04 15:10:09 +02:00
Bart van den Eijnden
33dd188f9b fix up the geojson tests 2013-08-04 15:10:08 +02:00
Bart van den Eijnden
7b31ec26ea fix up build 2013-08-04 15:10:08 +02:00
ahocevar
0168c2e46f Better interface for passing projection and other metadata 2013-08-04 15:10:08 +02:00
ahocevar
b0c1ef04a1 Implementing getProjection for KML and GPX 2013-08-04 15:10:08 +02:00
ahocevar
55697dea28 getProjection method on parsers
With this, vector sources/layers do not need to make
assumptions on the data projection.
2013-08-04 15:10:08 +02:00
ahocevar
82a158bdd2 Merge pull request #889 from ahocevar/advanced-param
check-examples target failing because of G+ widgets
2013-08-04 06:09:25 -07:00
ahocevar
da2fd4f80f Append '?mode=advanced' for advanced mode to avoid G+ inclusion 2013-08-04 14:38:55 +02:00
ahocevar
58949ed856 Adding tests, and fixing an issue revealed by the tests 2013-07-31 23:42:08 +02:00
Frédéric Junod
e732b744b7 Merge pull request #864 from fredj/upgrade_font-awesome
Upgrade Font Awesome to version 3.2.1
2013-07-31 09:21:53 -07:00
ahocevar
5acff857e7 Add example, and use getFeatures in other examples
The new dedicated getfeatureinfo example shows how to combine
feature info from a WMS and a vector layer. The other examples
that previously used getFeatureInfo from vector layers now use
the more appropriate getFeatures.
2013-07-31 17:47:16 +02:00
Tim Schaub
b839cea4de Merge pull request #844 from tschaub/topojson
Parser for reading TopoJSON topologies.
2013-07-31 08:33:46 -07:00
ahocevar
4dd148a731 Implementing GetFeatureInfo for WMS 2013-07-31 12:10:02 +02:00
ahocevar
f333acc183 Interface for GetFeatureInfo
When a source implements this interface, the layer renderer can
access the source to get feature info.
2013-07-31 12:09:39 +02:00
ahocevar
5307e5ea3f Until we know what we want to return, return undefined 2013-07-31 11:58:45 +02:00
ahocevar
53765ebd0f Merge pull request #878 from ahocevar/polygon-labels
Better label placement for polygons
2013-07-30 01:04:44 -07:00
ahocevar
b2e25c8f6b Renaming method to getInteriorPoint
as suggested by @tschaub. Also giving credit to JTS.
2013-07-30 09:25:24 +02:00
Tim Schaub
3061fc6941 Missing requires in test and example lint 2013-07-26 16:20:33 -06:00
Tim Schaub
d36a085449 Slightly different style than other vector example 2013-07-26 16:14:57 -06:00
Tim Schaub
e1a5599f6a Update example 2013-07-26 15:52:32 -06:00
Tim Schaub
3023c5b9e6 Tests for parsing world-110m.json 2013-07-26 15:52:22 -06:00
Tim Schaub
b206442418 Exports 2013-07-26 15:05:53 -06:00
Tim Schaub
f677eb8c50 Rendering 110m world TopoJSON 2013-07-26 15:05:53 -06:00
Tim Schaub
a0fd3eec19 Initial spec 2013-07-26 15:05:53 -06:00
Tim Schaub
5b707d4275 Shared structure for crs transforms 2013-07-26 15:05:53 -06:00
Tim Schaub
e53deb62be Transform arcs 2013-07-26 15:05:53 -06:00
Tim Schaub
6580ece2bb GeometryCollection as individual features 2013-07-26 15:05:53 -06:00
Tim Schaub
38172c4f20 Adding TopoJSON parser 2013-07-26 15:05:52 -06:00
Tim Schaub
70be904979 Adding TopoJSON externs 2013-07-26 15:05:52 -06:00
Frédéric Junod
d30efdaa71 Merge pull request #881 from fredj/examples_css
examples: don't inject ol.css from loader.js
2013-07-25 04:48:14 -07:00
Frederic Junod
e13075f6ff Don't inject ol.css from loader.js 2013-07-25 11:40:35 +02:00
Tom Payne
73f77115e1 Merge pull request #882 from twpayne/plovr-2013-rc3
Use Plovr 2013-rc3
2013-07-24 03:14:15 -07:00
Tom Payne
68d943d98d Use Oracle Java on Mac OS X 2013-07-24 12:13:40 +02:00
Tom Payne
45c0e27c36 Use goog.log instead of goog.debug.Logger 2013-07-23 13:06:06 +02:00
Tom Payne
f533f6b654 Merge pull request #4 from fredj/plovr-2013-rc3
IE pointer events names are now defined in goog.events.EventType
2013-07-23 01:55:08 -07:00
Frederic Junod
d43581719b IE pointer events names are now defined in goog.events.EventType 2013-07-23 08:50:57 +02:00
Tom Payne
88ccf64379 Add missing private member 2013-07-22 18:22:58 +02:00
Tom Payne
ccdbd5aae5 Add some type hints in ol.layer.Layer 2013-07-22 18:22:43 +02:00
Tom Payne
ce56ac90a8 Add some type hints in ol.Kinetic 2013-07-22 18:22:29 +02:00
Tom Payne
639000a603 Add some type hints in ol.extent 2013-07-22 18:22:13 +02:00
Tom Payne
6cc8104ad3 Add some type hints in ol.array 2013-07-22 18:21:57 +02:00
Tom Payne
cec83abc3e Use regex module to work around arbitrary limitations in re
Our automatically generated regular expressions break Python's random
and arbitrary limit of 100 groups. See
  http://stackoverflow.com/questions/478458
2013-07-22 18:20:39 +02:00
Tom Payne
5afd564986 Add missing call to base class 2013-07-22 17:51:35 +02:00
Tom Payne
46d16ba0ca Use setElementShown instead of showElement 2013-07-22 17:42:47 +02:00
Tom Payne
0467222e46 Fix various type errors in ol.structs.RTree 2013-07-22 17:42:47 +02:00
Tom Payne
1208dab3e9 Fix various type errors related to features 2013-07-22 17:42:47 +02:00
Tom Payne
272bfceaf8 Fix invalid typecasts 2013-07-22 17:42:47 +02:00
Tom Payne
b6319c9a68 Use goog.events.Key 2013-07-22 17:42:47 +02:00
Tom Payne
368194f293 w3c_device_sensor_event.js is now supplied with Plovr 2013-07-22 17:42:47 +02:00
Tom Payne
0fc60e9957 Use plovr-2013-rc3 2013-07-22 17:42:46 +02:00
Bart van den Eijnden
369d692a90 implement @tschaub's suggestions for ieq and ineq 2013-07-22 14:11:29 +02:00
Bart van den Eijnden
875edc540e implement @tschaub's suggestions for the LIKE function 2013-07-22 13:23:08 +02:00
ahocevar
2d08b5ff2c Merge pull request #850 from ahocevar/vector-events
Render changes when adding and removing features
2013-07-20 02:41:05 -07:00
ahocevar
ca9f9b7563 Re-adding type cast, as suggested by @elemoine 2013-07-20 11:11:26 +02:00
ahocevar
b43625820e Removing addFeatures from the API 2013-07-20 11:09:49 +02:00
ahocevar
11ef2cb7d1 Better label placement for polygons
Using the y-coordinate of the polygon's bounding box, this
simple algorithm intersects the polygon with the horizontal
center line of its bounding box. The x-coordinate of the label
point is the center of the longest segment of this intersection
that is inside the polygon.
2013-07-20 10:36:13 +02:00
Frédéric Junod
58d3314f7a Merge pull request #868 from fredj/apidoc
Add basic ol.animation api doc
2013-07-19 11:10:16 -07:00
Éric Lemoine
65ec948cb0 Merge pull request #859 from elemoine/zoomtoextent
Add a ZoomToExtent control
2013-07-19 05:46:26 -07:00
ahocevar
781caff9e5 Expire tile by range and listen to changes
Instead of just listening for the first change, we now listen
for all changes, and expire tiles by tile range. The outcome is
that the vector layer's addFeatures and removeFeatures methods
now show instant results on the rendered map.
2013-07-19 14:07:16 +02:00
ahocevar
d04c6f4c01 New pruneTileRange method
This also adds an assert that cache values are an instance of
ol.Tile in expireCache, instead of doing a type cast. Later we
will want to enforce the ol.Tile type by overriding the set
method.
2013-07-19 14:07:16 +02:00
ahocevar
ac67c10acd Add and remove features with meaningful events
This adds a removeFeatures method, and makes the CHANGE event
more useful by adding information about changed features and
extent.
2013-07-19 14:07:15 +02:00
ahocevar
c3bed305c7 Merge pull request #870 from ahocevar/vector-api
Give VectorSource the ability to load and parse data
2013-07-19 05:06:19 -07:00
ahocevar
a9fcc5ff15 Addressing @elemoine's review comments 2013-07-19 13:30:14 +02:00
Éric Lemoine
4e1012823f Merge pull request #860 from elemoine/exports
Add exports
2013-07-18 04:21:59 -07:00
Frédéric Junod
fecda5b094 Merge pull request #866 from fredj/object.setOptions
Api docs does not list Object#setValues
2013-07-17 23:56:24 -07:00
Frederic Junod
a965d9ee9f Remove unused ol.Object#setOptions function 2013-07-17 13:50:43 +02:00
Éric Lemoine
3d7316906b Merge pull request #867 from elemoine/bingkeyupdate
Update key in bing-maps example
2013-07-17 03:03:50 -07:00
ahocevar
892088ffac Updating examples to use the new API 2013-07-17 11:39:57 +02:00
ahocevar
9095032014 Removing unused methods and changing getFeaturesObjectForExtent
With this change, getFeaturesObjectForExtent may return null if
the source does not have data loaded for the provided extent.
A callback can be passed to getFeaturesObjectForExtent to get
notified when the requested data is available.
2013-07-17 11:28:48 +02:00
ahocevar
f325046a95 Allow VectorSource to load and parse data
This adds url, data and parser options to the source, and makes
EPSG:4326 the default projection. It also adds a prepareFeatures
method, which is used to load/parse data once the target
projection is known.
2013-07-17 11:24:34 +02:00
Frederic Junod
2565e00e1d Add basic ol.animation api doc 2013-07-17 10:56:19 +02:00
Éric Lemoine
fef6359f75 Update key in bing-maps example 2013-07-17 10:21:28 +02:00
Frédéric Junod
2121a7dc9e Merge pull request #865 from fredj/xyztilegrid_grid_init
tilejson example error
2013-07-16 22:40:59 -07:00
Éric Lemoine
907476f566 No need to impl setMap in ZoomToExtent control 2013-07-16 17:13:38 +02:00
Stéphane Brunner
74f446948f Rotate to north for custom controls example 2013-07-16 17:13:38 +02:00
Stéphane Brunner
d15f68d651 Add navigation controls example 2013-07-16 17:13:38 +02:00
Stéphane Brunner
86001fd331 Add zoom to extent control 2013-07-16 17:13:38 +02:00
Frederic Junod
ad42496948 Initialize all the items in tileRangeByZ 2013-07-16 15:31:05 +02:00
Frederic Junod
bebac2011b Upgrade Font Awesome to version 3.2.1 2013-07-15 10:16:42 +02:00
Tim Schaub
63c4feb6db Merge pull request #862 from tschaub/mutable-symbolizers
Provide getters and setters for symbolizer properties
2013-07-12 16:45:54 -07:00
Frédéric Junod
66a167b4ed Merge pull request #861 from fredj/layer-options
Preserve unexpected items in options object passed to the constructor
2013-07-12 14:10:30 -07:00
Tim Schaub
8b93c5a0a0 Getters and setters for text symbolizer 2013-07-12 11:16:17 -06:00
Tim Schaub
4a098aaee3 Adding tests for text symbolizer 2013-07-12 10:59:52 -06:00
Tim Schaub
0e87922389 Getters and setters for icon symbolizer 2013-07-12 10:42:59 -06:00
Tim Schaub
8844465188 Fixing bug with IconLiteral#equals and adding tests 2013-07-12 10:17:08 -06:00
Tim Schaub
2e08ccce03 Getters and setters for shape symbolizers 2013-07-12 09:57:40 -06:00
Tim Schaub
a0d058b2fa Getters and setters for polygon symbolizer 2013-07-12 09:50:42 -06:00
Éric Lemoine
e17d6aef70 Preserve unexpected items in options object passed to the constructor 2013-07-12 17:47:09 +02:00
Tim Schaub
711261171b Getters and setters for line symbolizers 2013-07-12 09:41:47 -06:00
Éric Lemoine
42d02e064e Export ol.layer.Layer and its getSource func 2013-07-12 10:21:01 +02:00
Éric Lemoine
9b039d76ea Export ol.source.TileSource and its getTileGrid func 2013-07-12 10:20:02 +02:00
Éric Lemoine
b2fc570328 Export tilegrid.WMTS functions 2013-07-12 10:12:51 +02:00
Éric Lemoine
c51265502d Export TileGrid functions 2013-07-12 10:12:30 +02:00
Éric Lemoine
757ccf148b Merge pull request #858 from elemoine/getzoom
Add ol.View2D#getZoom
2013-07-11 00:51:25 -07:00
Éric Lemoine
3e4d39b228 Export ol.View2D#getZoom 2013-07-11 09:50:31 +02:00
Éric Lemoine
d7e838274e Merge pull request #840 from fredj/zoomcontrol
Add ol.control.Zoom#zoomByDelta function
2013-07-09 21:38:41 -07:00
Éric Lemoine
2cc5c7a776 Merge pull request #857 from elemoine/view2d-docs
Better View2D docs
2013-07-09 06:29:12 -07:00
Éric Lemoine
daa03b5ef7 @class doc for View2D 2013-07-09 15:28:31 +02:00
Éric Lemoine
42abdb308a Better docs for View2DOptions 2013-07-09 15:28:31 +02:00
Frederic Junod
17f0d01e9f Add ol.control.Zoom#zoomByDelta function
To replace ol.control.Zoom#handleIn_ and ol.control.Zoom#handleOut_ callbacks.
2013-07-09 14:21:46 +02:00
Éric Lemoine
f72784dc38 Merge pull request #855 from elemoine/zoom-slider-fix
Zoomslider cannot be added to a map with no target
2013-07-09 04:45:50 -07:00
Bart van den Eijnden
31fd41ab14 make filterMap_ static as proposed by @tschaub 2013-07-09 13:34:23 +02:00
Éric Lemoine
44a9c181aa handleMapPostrender may get a null frameState 2013-07-09 10:06:01 +02:00
Éric Lemoine
ccf6aa10ac Zoomslider cannot be added to a map with no target
The zoom slider control's initSlider_ function requires that the control's element is inserted in the document. So if initSlider_ is called before the map have a target then the slider isn't correctly initialized. This commit fixes that by defering the slider initialization until the first handleMapPostrender call.
2013-07-09 10:05:15 +02:00
Éric Lemoine
a10d142752 Add ol.View2D#getZoom 2013-07-09 09:30:45 +02:00
Bart van den Eijnden
c299bfa1cb more dot notation 2013-07-08 17:29:32 +02:00
Bart van den Eijnden
499319fb99 address most of @tschaub's review comments, use dot notation where possible still needs to be done, and I have some questions on the _expression reader still 2013-07-08 17:04:27 +02:00
Tim Schaub
461d85dfc3 Merge pull request #854 from elemoine/remove-gh-pages
Rename build/gh-pages to build/hosted
2013-07-05 17:09:52 -07:00
Tim Schaub
087b4d04a6 Merge pull request #809 from tschaub/clockwise
Consistent winding order for polygon rings.
2013-07-05 17:04:50 -07:00
Éric Lemoine
3af5e530ca Merge pull request #835 from elemoine/setzoom
Add ol.View2D.prototype.setZoom
2013-07-05 12:31:34 -07:00
Éric Lemoine
d9f554e10d Dir build/gh-pages renamed to build/hosted 2013-07-05 20:45:40 +02:00
Tim Schaub
d482b66af3 Doc typo 2013-07-05 11:48:45 -06:00
Éric Lemoine
7efff5c3cf Merge pull request #833 from elemoine/stop-other-interactions
Remove ol.MapBrowserEvent#stopOtherInteractions
2013-07-04 00:48:35 -07:00
Éric Lemoine
d0e198df93 Use constrainResolution function
Use the constrainResolution function when setting the initial view resolution.
2013-07-04 09:16:04 +02:00
Éric Lemoine
e6efa741d2 More type checking for View2D 2013-07-04 09:13:31 +02:00
Éric Lemoine
552853a3b8 Remove unused createContinuous function 2013-07-04 08:58:33 +02:00
Éric Lemoine
0cf4024194 Add ol.View2D.prototype.setZoom 2013-07-04 08:58:32 +02:00
Bart van den Eijnden
ab40ab6208 Add parser for OGC Filter 1.0 and 1.1 (read/write)
This work is based on the ol.expr package by @tschaub.
It adds a few named expression functions to that package:

 * INTERSECTS, CONTAINS, DWITHIN, WITHIN (no client-side implementation as yet)
 * LIKE (like comparison with wildcard, singleChar and escapeChar)
 * IEQ (case-insensitive equality)
 * INEQ (case-insensitive non-equality)

It also adds a few extra parameters to the existing EXTENT function to be able
to deserialize and serialize all info (i.e. projection and property name).

Some changes were needed for the GML parser as well:

 * createGeometry function needed to be public
 * when parsing Box (GML2) and Envelope (GML3) also parse the srsName
 * fix up writing for Box and Envelope now that bounds is an array

Also added createDocumentFragment function to the XML parser. Implementation
is similar to OpenLayers 2.

Some addtional notes on the implementation:

 * PropertyIsBetween was implemented as an ol.expr.Logical with operator
   ol.expr.LogicalOp.AND and two ol.expr.Comparison instances with operator
   ol.expr.ComparisonOp.GTE and ol.expr.ComparisonOp.LTE
 * In OGC Filter And and Or can contain more than 2 sub filters, so this
   is translated into a hierarchy of ol.expr.Logical
2013-07-03 13:09:25 +02:00
Frédéric Junod
a071c3521c Merge pull request #848 from fredj/geolocation-example
Update geolocation example to display all the properties
2013-07-01 07:28:06 -07:00
Frédéric Junod
6ae4b28db8 Merge pull request #847 from fredj/apidoc
API doc update.
2013-07-01 07:01:35 -07:00
Frederic Junod
e1f8863bd2 Update geolocation example to display all the properties 2013-07-01 15:48:50 +02:00
Frederic Junod
1c3369a3f6 Add className parameter documentation 2013-07-01 15:04:14 +02:00
Tim Schaub
f2ce4db85a Merge pull request #842 from tschaub/examples
Updates to example markup.
2013-06-28 12:15:53 -07:00
Tim Schaub
949edb694e Duplicated id 2013-06-28 10:43:57 -06:00
Tim Schaub
7ebacba720 Use full grid
The example documentation should not be restricted to 1/3 of the row unless there is something else consuming the other 2/3.
2013-06-28 10:42:42 -06:00
Tim Schaub
12338783cc Load scripts in RAW mode by default
On-the-fly compilation is a frustrating default.
2013-06-28 10:07:02 -06:00
Tim Schaub
82c791f9f5 Merge pull request #839 from tschaub/delete-gh-pages-branch
Delete gh-pages branch
2013-06-28 08:26:00 -07:00
Éric Lemoine
e29d0aa52c Merge pull request #841 from elemoine/fix-ign-example
Fix wmts-ign example when hosted (take 2)
2013-06-28 02:35:00 -07:00
Éric Lemoine
5d5a248344 ol.source.Source#setLogo is not exported 2013-06-28 11:33:02 +02:00
Éric Lemoine
09a50ad442 Merge pull request #838 from elemoine/fix-ign-example
Fix wmts-ign example when hosted
2013-06-28 02:10:17 -07:00
Éric Lemoine
1d6e428e8f ol.source.Source#setAttributions is not exported 2013-06-28 00:10:27 +02:00
Tim Schaub
e1a2c72587 Adjective -> adverb 2013-06-27 16:01:22 -06:00
Tim Schaub
dc246cd45b Correct links to hosted examples (and docs) 2013-06-27 15:59:52 -06:00
Tim Schaub
04bab7e436 The examples and docs are deployed from the openlayers.github.io repo
To deploy the latest docs and examples, see https://github.com/openlayers/openlayers.github.io/blob/build/README.md

tl;dr

    git clone -b build https://github.com/openlayers/openlayers.github.io.git
    cd openlayers.github.io
    npm install
    npm run deploy

Subsequent deploys are simply: `npm run deploy`

This publishes the examples (http://ol3js.org/en/master/examples/) and docs (http://ol3js.org/en/master/apidoc/).

The `build.py gh-pages` target published under different paths (http://ol3js.org/ol3/master/examples/ and http://ol3js.org/ol3/master/apidoc/).  Having two (not always up to date) copies of this content hosted on the same domain is A Bad Idea.
2013-06-27 15:56:11 -06:00
Tim Schaub
cd14753495 Merge pull request #831 from tschaub/kml-example
Nicer KML example
2013-06-27 14:38:57 -07:00
Éric Lemoine
445f85b3e2 Merge pull request #801 from elemoine/ign
Add an IGN WMTS example
2013-06-27 14:19:48 -07:00
Tim Schaub
a2bc986785 Timezone offset in a tooltip 2013-06-27 14:51:04 -06:00
Éric Lemoine
2974c74f1a Export ol.tilegrid.TileGrid#getResolutions 2013-06-27 22:37:27 +02:00
Éric Lemoine
943bad6e17 Add an IGN WMTS example 2013-06-27 22:37:27 +02:00
Éric Lemoine
a19cb9ca64 Sort matrixIds by scaleDenominator
We cannot assume that the matrixIds are ordered in the matrixSet. For example, they're not ordered in http://wxs.ign.fr/cle/geoportail/wmts?SERVICE=WMTS&REQUEST=GetCapabilities.
2013-06-27 21:36:14 +02:00
Éric Lemoine
e6e98a6ca2 Fix WMTS requestEncoding 2013-06-27 21:36:14 +02:00
Tim Schaub
aab5c8472c Update example to use expression parsing 2013-06-27 10:17:40 -06:00
Tim Schaub
b7412552a5 Adding a prettier KML example 2013-06-27 10:17:40 -06:00
Tim Schaub
fa4d2d485d Merge pull request #829 from tschaub/kml
Parse MultiGeometry in KML
2013-06-27 06:35:50 -07:00
Éric Lemoine
6fc4aa68b6 Remove ol.MapBrowserEvent#stopOtherInteractions
and check for false/true in the return from handleMapBrowserEvent. Refs #791.
2013-06-27 14:43:00 +02:00
Frédéric Junod
07d790260c Merge pull request #690 from fredj/layer-options
ol.layer.Layer: default values
2013-06-27 04:35:02 -07:00
Tom Payne
d6f442bbee Merge pull request #820 from twpayne/use-view2dstate-in-interactions
Use view2DState in interactions
2013-06-27 04:06:05 -07:00
Tom Payne
f360dd86a0 Use view2DState in ol.interaction.TouchZoom 2013-06-27 12:25:52 +02:00
Tom Payne
dc9d7e857a Use view2DState in ol.interaction.TouchRotate 2013-06-27 12:25:52 +02:00
Tom Payne
e84c484677 Use view2DState in ol.interaction.TouchPan 2013-06-27 12:25:52 +02:00
Tom Payne
79e0c81301 Use view2DState in ol.interaction.DragRotate 2013-06-27 12:25:50 +02:00
Tom Payne
ec4110ee54 Use view2DState in ol.interaction.DragRotateAndZoom 2013-06-27 12:20:48 +02:00
Tom Payne
8565201c74 Use view2DState in ol.interaction.DragPan 2013-06-27 12:20:46 +02:00
Tom Payne
b555c52013 Use view2DState in ol.interaction.Drag 2013-06-27 12:19:16 +02:00
Tom Payne
a4e8e529c4 Make View2D-only comments more consistent 2013-06-27 12:19:15 +02:00
Tom Payne
d96ea1cb97 Don't invoke interactions if view is not defined 2013-06-27 12:19:15 +02:00
Tim Schaub
a7ca22dde0 Merge pull request #790 from tschaub/expression
Expression parsing
2013-06-26 16:40:08 -07:00
Tim Schaub
71153d26d1 Prefer if/else to switch 2013-06-26 17:01:27 -06:00
Tim Schaub
42aa94de21 KML MultiGeometry may contain other MultiGeometry
As demonstrated in the tests, a MultiGeometry may contain other MultiGeometry nodes.  We can support this with heterogenous GeometryCollection instances - though these are not currently rendered.
2013-06-26 12:31:08 -06:00
Tim Schaub
30d947521d The fromParts factories take geometry instances instead of coords
The MultiLineString case was correct here.  The MultiPoint and MultiPolygon cases should be using the constructor instead of the `fromParts` factories.
2013-06-26 12:23:19 -06:00
Tim Schaub
f06208920f Merge pull request #828 from tschaub/shortdesc
Minor edits to shortdesc in examples
2013-06-26 10:59:58 -07:00
Éric Lemoine
16e23a33fb Merge pull request #823 from elemoine/tilegridbug
Tile has a child if z < maxZoom
2013-06-26 10:10:38 -07:00
Tim Schaub
0958674765 Shortdesc edits 2013-06-26 10:57:36 -06:00
Tim Schaub
e0a3f8ca07 Removing markup from shortdesc element (see #827)
The text in `shortdesc` is shown on the example index page.  It shouldn't have any markup in it.
2013-06-26 10:28:15 -06:00
Frédéric Junod
3800676e97 Merge pull request #812 from fredj/812
INTERACTION view hint ever growing on pinch zoom
2013-06-26 06:42:25 -07:00
Frederic Junod
87dda95b18 Handle ol.ViewHint.INTERACTING in ol.interaction.Touch 2013-06-26 09:27:44 +02:00
Frederic Junod
ae7b342ee9 Handle ol.ViewHint.INTERACTING in ol.interaction.Drag 2013-06-26 09:27:44 +02:00
Éric Lemoine
020d528e73 Tile has a child if z < maxZoom 2013-06-26 07:18:59 +02:00
Tim Schaub
4ccff4e8b6 Merge pull request #817 from tschaub/vector-exports
Proper vector exports to get vector examples working
2013-06-25 18:17:37 -07:00
Tim Schaub
3dc8c4bc7b Properly exporting the transformFeatureInfo option
This was previously called getTransformFeatureInfo, which is a method instead of an option.  In addition, the generate-exports.py script does not properly export properties whose names appear on a different line than the @property annotation.  This makes the vector-layer.html, kml.html, and gpx.html examples work with the built lib.
2013-06-25 13:21:13 -06:00
Tim Schaub
72532b7dd6 Export individual geometry types
This makes the style-rules.html example work with built lib.
2013-06-25 13:21:13 -06:00
Tim Schaub
34acea5366 Merge pull request #821 from tschaub/generated-file-linting
Create separate target for linting generated files
2013-06-25 12:20:45 -07:00
Tim Schaub
4e5ef05e5e Expression for evaluating feature ids 2013-06-25 12:15:34 -06:00
Tim Schaub
1eaf82ead5 Enum for checking built-in lib functions internally 2013-06-25 12:15:34 -06:00
Tim Schaub
70fef73869 Testing operator precedence 2013-06-25 12:15:34 -06:00
Tim Schaub
c81057780a More tests for binary operators 2013-06-25 12:15:34 -06:00
Tim Schaub
1f23a245e4 More tests for unary expression 2013-06-25 12:15:34 -06:00
Tim Schaub
2577d3f7d6 Rename ol.expression to ol.expr 2013-06-25 12:15:34 -06:00
Tim Schaub
9928730bd3 Tests for ol.expression.register() 2013-06-25 12:15:33 -06:00
Tim Schaub
233595ac75 Allow registration of custom functions for expressions 2013-06-25 12:15:33 -06:00
Tim Schaub
8e8b26805f Uniformly support evaluating symbolizers without features
In combination with a (not yet implemented) `Symbolizer#isLiteral` method, calling `Symbolizer#evaluate` without a feature is the fast track for rendering batches of like-styled features.  This change also simplifies the handling of undefined symbolizer literal properties (where stroke or fill properties are optional).
2013-06-25 12:15:33 -06:00
Tim Schaub
cab983f826 We are guarnteed that all TextLiteral properties are defined (see #770)
Instead of using the browser defaults, we use `ol.style.TextDefaults`.
2013-06-25 12:15:33 -06:00
Tim Schaub
c7da7e4c2e Using new expressions in text symbolizer 2013-06-25 12:15:33 -06:00
Tim Schaub
b04a36ede7 Replace use of filter with expressions
The canvas vector layer still has the (API candidate) `getFeatures` method that accepts an arbitrary expression (was filter).  This, and the `getFeaturesObject` method under it are only used in the tests.  The rendering code that was using filters is now calling `layer.getFeaturesObjectForExtent` with an explicit extent and optional geometry type.
2013-06-25 12:15:33 -06:00
Tim Schaub
a663d8fcae Accept an expression string for rule filter 2013-06-25 12:11:50 -06:00
Tim Schaub
38b784d672 Support +/- unary operators for literals 2013-06-25 12:11:50 -06:00
Tim Schaub
d70a9eba01 Lib for well-known functions
This reveals a lexer bug that needs addressing.
2013-06-25 12:11:50 -06:00
Tim Schaub
bd5d9d572e Lint 2013-06-25 12:11:50 -06:00
Tim Schaub
5e309e244b Using ol.expression.parse 2013-06-25 12:11:50 -06:00
Tim Schaub
53abedaada Correct doc and arg order 2013-06-25 12:11:50 -06:00
Tim Schaub
72d32ec71a Correct index for tokens 2013-06-25 12:11:50 -06:00
Tim Schaub
f0567f5053 Expect the unexpected 2013-06-25 12:11:49 -06:00
Tim Schaub
36d10bef11 Custom error for unexpected token
This makes it clearer to the compiler where we are throwing.
2013-06-25 12:11:49 -06:00
Tim Schaub
62eb0dd72b Give token an index and throw unexpected token from a common place 2013-06-25 12:11:49 -06:00
Tim Schaub
bb1b0cba95 Getter for not expression argument 2013-06-25 12:11:49 -06:00
Tim Schaub
c05fb8c61b Getters for member expression properties 2013-06-25 12:11:49 -06:00
Tim Schaub
2528581642 Getters for math expression properties 2013-06-25 12:11:49 -06:00
Tim Schaub
4a617871da Getters for logical expression properties 2013-06-25 12:11:49 -06:00
Tim Schaub
3de330eb99 Getter for literal expression value 2013-06-25 12:11:49 -06:00
Tim Schaub
6d6ec357e1 Getter for identifier expression name 2013-06-25 12:11:48 -06:00
Tim Schaub
582a52849c Getters for comparison expression properties 2013-06-25 12:11:48 -06:00
Tim Schaub
be636d7f46 Getters for call expression properties 2013-06-25 12:11:48 -06:00
Tim Schaub
6458f98996 Describing the extent of support for ES-5 expressions 2013-06-25 12:11:48 -06:00
Tim Schaub
2fd8f4cb00 Integration testing for binary logical operators 2013-06-25 12:11:48 -06:00
Tim Schaub
973606e67a Integration tests for equality operators 2013-06-25 12:11:48 -06:00
Tim Schaub
d5e133b7d8 Satisfy the build/check-requires-timestamp task (see #785)
I think this line should not be required, as `ol.expression.Char` is only used internally in this file.
2013-06-25 12:11:48 -06:00
Tim Schaub
3a3f9bc20b Integration testing for relational operators
No `instanceof` or `in` operator support.
2013-06-25 12:11:47 -06:00
Tim Schaub
9d5424236c Integration testing for additive operators 2013-06-25 12:11:47 -06:00
Tim Schaub
7c2550fefa Integration testing for multiplicative operators 2013-06-25 12:11:47 -06:00
Tim Schaub
2492515e8f Integration testing for unary operators
Only supporting ! at the moment.
2013-06-25 12:11:47 -06:00
Tim Schaub
e6f03c8f22 Confirm whitespace is consumed as expected 2013-06-25 12:11:47 -06:00
Tim Schaub
26a7d907a2 Test unary expression parsing 2013-06-25 12:11:47 -06:00
Tim Schaub
a0bd736948 Left-hand-side expression parsing 2013-06-25 12:11:47 -06:00
Tim Schaub
803b3a3f7d Binary expression parsing 2013-06-25 12:11:46 -06:00
Tim Schaub
40b12410f0 Increment after scanning >= and <= (and expect EOF in tests) 2013-06-25 12:11:46 -06:00
Tim Schaub
379ac82688 Test argument parsing 2013-06-25 12:11:46 -06:00
Tim Schaub
38c8927ae2 Doc and method reorg 2013-06-25 12:11:46 -06:00
Tim Schaub
6d0badcf2a Optional scope (works for expressions without identifiers) 2013-06-25 12:11:46 -06:00
Tim Schaub
d920d8e578 Test left-hand-side expression parsing 2013-06-25 12:11:46 -06:00
Tim Schaub
13d0b8b084 Provide ol.expression.parse method
This is the only method needed in the API.
2013-06-25 12:11:46 -06:00
Tim Schaub
3643ea164f Cast boolean and null before creating literal expression 2013-06-25 12:11:46 -06:00
Tim Schaub
ce67aa2617 Make way for convenience functions in ol.expression package 2013-06-25 12:11:45 -06:00
Tim Schaub
737d669e4a Correct types 2013-06-25 12:11:45 -06:00
Tim Schaub
7a1e69e288 Initial parsing tests 2013-06-25 12:11:45 -06:00
Tim Schaub
cb9725bdfb Provide static method to check for valid operators 2013-06-25 12:11:45 -06:00
Tim Schaub
29b77a2dac Member expressions 2013-06-25 12:11:45 -06:00
Tim Schaub
fbb028e15e Call expressions 2013-06-25 12:11:45 -06:00
Tim Schaub
2f7e74ab35 Create binary expressions when parsing 2013-06-25 12:11:45 -06:00
Tim Schaub
f050546fe2 Logical expressions 2013-06-25 12:11:44 -06:00
Tim Schaub
153df45f95 Math expressions
Just simple binary type expressions supported here.  These can be serialized in a variety of formats.  More complex operations to be supported by call expressions.
2013-06-25 12:11:44 -06:00
Tim Schaub
b2ff793ea1 Comparison expressions 2013-06-25 12:11:44 -06:00
Tim Schaub
c4867bafec Smaller subset of binary operators 2013-06-25 12:11:44 -06:00
Tim Schaub
7800e9b0cc Comments, links, copyrights 2013-06-25 12:11:44 -06:00
Tim Schaub
052b973b39 Reduce to a single literal 2013-06-25 12:11:44 -06:00
Tim Schaub
20b66fc447 Proper specs 2013-06-25 12:11:43 -06:00
Tim Schaub
0abcbb9854 Stray not 2013-06-25 12:11:43 -06:00
Tim Schaub
ed2e21dffa Parsing 2013-06-25 12:11:43 -06:00
Tim Schaub
1f68522837 Utility methods on the lexer 2013-06-25 12:11:43 -06:00
Tim Schaub
a87ebfe97b Specific expression types 2013-06-25 12:11:43 -06:00
Tim Schaub
d7e0d043f3 Consistently number 2013-06-25 12:11:43 -06:00
Tim Schaub
063b461ffd Fewer calls to charCodeAt 2013-06-25 12:11:43 -06:00
Tim Schaub
9edc9ebcc5 Use next instead 2013-06-25 12:11:42 -06:00
Tim Schaub
f272350e00 Expose next and peek methods 2013-06-25 12:11:42 -06:00
Tim Schaub
5baa38b82c Test punctuator scanning 2013-06-25 12:11:42 -06:00
Tim Schaub
957b6db3d7 Skip whitespace 2013-06-25 12:11:42 -06:00
Tim Schaub
50f94911b1 Scan string literals 2013-06-25 12:11:42 -06:00
Tim Schaub
4d62cea700 Escape sequences in our identifiers have already been handled 2013-06-25 12:11:42 -06:00
Tim Schaub
0844df8cc2 Scanning identifiers
This includes code that is likely not necessary.  The escape sequence scanning will likely not be used in our case, but I'm committing it here so it can be brought back if needed later.
2013-06-25 12:11:42 -06:00
Tim Schaub
a748665646 Space and comment 2013-06-25 12:11:42 -06:00
Tim Schaub
040c80a5ad Expectations about token type 2013-06-25 12:11:42 -06:00
Tim Schaub
193cf4de50 Scan numeric literals 2013-06-25 12:11:41 -06:00
Tim Schaub
81b344715a Renaming for clarity 2013-06-25 12:11:41 -06:00
Tim Schaub
a5343161bf Separate lexer 2013-06-25 12:11:41 -06:00
Tim Schaub
84a9fb40ef More char code tests 2013-06-25 12:11:41 -06:00
Tim Schaub
88fd0fda64 Initial bits for parser 2013-06-25 12:11:41 -06:00
Tim Schaub
48130670ca Create separate target for linting generated files
This allows us to ignore specific error codes (e.g. LINE_TOO_LONG) for externs, exports, types, etc. (any auto-generated files).
2013-06-25 10:43:27 -06:00
Tom Payne
ca3e1f0843 Merge pull request #819 from twpayne/fix-819
Drag rotate and zoom example is broken
2013-06-25 08:07:03 -07:00
Tim Schaub
40b10c13dc Merge pull request #802 from tschaub/802-multilinstring-typo
Multiline strings are not rendered correctly due to typo in VectorLayer
2013-06-25 07:33:08 -07:00
Tom Payne
23e54e4543 Stop other interactions when dragging 2013-06-25 15:46:00 +02:00
Tom Payne
38893eaf8c Merge pull request #818 from twpayne/view2d-properties
View2D properties
2013-06-25 04:50:30 -07:00
Frederic Junod
cd13e700ac Pass options to the base class 2013-06-25 13:13:41 +02:00
Tom Payne
fab12b10c1 Handle projection being undefined in getView2DState 2013-06-25 12:26:35 +02:00
Tom Payne
f462adbe53 Set default View2D rotation in constructor and getView2DState instead of in getRotation 2013-06-25 12:19:30 +02:00
Tom Payne
e5d6ccd6ba Use getView2DState instead of getResolution/getRotation in interactions 2013-06-25 12:18:31 +02:00
Tim Schaub
99ba5a0da8 Store rings so exerior is clockwise and interior is counter-clockwise
KML and WKT don't specify a winding order, so we write those out in CW/CCW order (for exterior/interior).  GML references ISO 19107 that specifies CCW/CW, so we serialize in that winding order.

Having hand generated all this GML data the first time around, I reserve the right to modify it for the tests.
2013-06-24 17:46:36 -06:00
Tim Schaub
e292d8fa12 Add method to determine winding order of linear rings 2013-06-24 17:43:22 -06:00
ahocevar
a427719a22 Merge pull request #816 from ahocevar/tilegrid-units
Use ol.Projection#getMetersPerUnit(). r=@tschaub
2013-06-24 16:05:56 -07:00
ahocevar
a14b21d80c Use ol.Projection#.getMetersPerUnit()
As a follow-up to #815, this change makes
ol.tilegrid.createForProjection work in cases where a Proj4
projection does not have units set. For better code readability,
a new variable is used when calculating the resolution.
2013-06-25 00:29:50 +02:00
Tim Schaub
d1eec80324 Merge pull request #815 from tschaub/override
Override for clarity
2013-06-24 14:38:26 -07:00
Tim Schaub
bb915cbf3d Less code
Since out meters per unit conversion table is a bit spare, prefer the configured conversion.
2013-06-24 12:27:36 -06:00
Tim Schaub
129e4d5704 Fix doc bug 2013-06-24 12:21:56 -06:00
Tim Schaub
5a95d606f8 Override for clarity 2013-06-24 12:20:34 -06:00
Tim Schaub
388967d00c Merge pull request #814 from tschaub/814-min-resolution
Fix vector rendering for projections that do not specify units
2013-06-24 11:08:50 -07:00
Tim Schaub
20527ab1f1 Reuse tile range 2013-06-24 11:34:59 -06:00
Tim Schaub
a9f01a4390 Use getMetersPer unit method 2013-06-24 11:34:48 -06:00
Tim Schaub
d10eff97a2 Allow getMetersPerUnit to work without units identifier (see #814) 2013-06-24 11:34:16 -06:00
Tim Schaub
3f169b1751 Merge pull request #810 from tschaub/async-tests
Proper async testing
2013-06-24 09:02:47 -07:00
ahocevar
f697450523 Merge pull request #811 from ahocevar/conditional-click
Click handler called with empty event object on Android. r=@fredj
2013-06-24 03:09:48 -07:00
ahocevar
a405279f34 Click handler called with empty event object on Android
On Android (both native browser and Chrome), the handleTouchEnd_
method is sometimes reached in a state where this.down_ is null.
This check protects against this.click_ being called without
an event object. To see this issue, open any example in Android,
and tap the zoom + or - button.
2013-06-24 10:35:02 +02:00
ahocevar
b30dcdd35a Merge pull request #799 from ahocevar/dynamic-canvas-tilegrid
Do not use a fixed tile grid for vector rendering. r=@elemoine,@tschaub,@twpayne
2013-06-23 11:15:50 -07:00
Tim Schaub
d6be28a7bb Get rid of unnecessary waitsFor function
This was a relic from the Jasmine tests.  Mocha tests have a built-in timeout.  Async tests are registered with a function that takes a callback.
2013-06-23 11:20:57 -06:00
Tim Schaub
7a620de1bf Calling callback in WMS capabilities tests 2013-06-23 11:08:34 -06:00
Tim Schaub
be33fd58b3 Calling callback in GML v3 tests 2013-06-23 11:04:03 -06:00
Tim Schaub
54378f394a Calling callback in GML v2 tests 2013-06-23 11:02:38 -06:00
Tim Schaub
7bf24eb918 Calling callback in kml tests
Also reordering things so we have `expect(got).to.xmleql(expected)`.
2013-06-23 11:00:41 -06:00
ahocevar
5cc3e189eb Need to take units into account 2013-06-23 18:48:21 +02:00
ahocevar
af0764b1ca Simpler tile coord access now that we only have one resolution 2013-06-23 18:47:49 +02:00
ahocevar
27c23f676b Fixing requires 2013-06-23 18:47:00 +02:00
ahocevar
1c5f466e61 Adding comment about MIN_RESOLUTION 2013-06-23 18:31:25 +02:00
ahocevar
61fcbd560e Do not render tiles during animation and interaction 2013-06-23 18:31:25 +02:00
ahocevar
f20e6002cc Tile grid and cache for one resolution only 2013-06-23 18:31:25 +02:00
ahocevar
89c23b5560 Use binaryInsert instead of sort 2013-06-23 18:31:25 +02:00
ahocevar
aa62764d90 Do not add resolutions while interacting 2013-06-23 18:31:25 +02:00
ahocevar
0aacf197bf Separate method for updating the tile cache 2013-06-23 18:31:24 +02:00
ahocevar
3afd8b4242 Do not use a fixed tile grid for vector rendering
Instead, we create a new tile grid whenever renderFrame is
called, no animation is active, and the resolution is not in the
tile grid already. This gives better rendering results because
we get vector tiles at native resolutions.
2013-06-23 18:30:57 +02:00
ahocevar
1826b7a9be Merge pull request #808 from ahocevar/no-empty-tiles
Don't render/cache tiles with no features. r=@tschaub
2013-06-23 09:11:55 -07:00
ahocevar
3fc4fc3eb8 Only render and cache tiles that have features 2013-06-23 15:52:31 +02:00
Frédéric Junod
8fe0027d98 Merge pull request #805 from fredj/cleanup
ol.Geolocation and ol.DeviceOrientation cleanup
2013-06-21 08:07:03 -07:00
Frédéric Junod
2a7b9381bc Merge pull request #807 from fredj/mouse-position
Don't attempt to display the mouse position if the frameState is null
2013-06-21 04:51:57 -07:00
Frederic Junod
23f09937bc Don't attempt to display the mouse position if the frameState is null 2013-06-21 12:27:39 +02:00
Éric Lemoine
04344ed184 Merge pull request #762 from elemoine/controls
Add addControl and removeControl methods to the map
2013-06-21 00:53:12 -07:00
Frederic Junod
9cac8a92df Set default 'tracking' property to false 2013-06-21 09:21:48 +02:00
Frederic Junod
c4ce85c847 Add missing 'undefined' in type cast 2013-06-21 09:14:41 +02:00
Frédéric Junod
f83fe424fb Merge pull request #800 from fredj/control_object
Make ol.control.Control extends ol.Object
2013-06-20 22:44:10 -07:00
Tim Schaub
91a8703852 Correct typo in geometry type (thanks @jystic)
Previously read 'multilinstring' instead of 'multilinestring'.  Letting the compiler check for typos instead now.
2013-06-20 17:57:29 -06:00
Tom Payne
b7a1ada94d Merge pull request #798 from twpayne/fix-layer-setters
Don't attempt to constrain values in setters
2013-06-20 09:52:40 -07:00
Frederic Junod
4217c5e47a Meaningful variable names 2013-06-20 16:56:59 +02:00
Frederic Junod
22adf354e2 Add 'projection' and 'coordinateFormat' to ol.control.MousePosition 2013-06-20 16:50:43 +02:00
Éric Lemoine
b0dde2ecb4 Do not call setMap(null) if control not in map 2013-06-20 16:47:23 +02:00
ahocevar
10f03a360c Merge pull request #770 from ahocevar/text-symbolizer
Basic support for text symbolizers. r=@bartvde,@tschaub
2013-06-20 07:06:38 -07:00
ahocevar
d250f4449c Updating example to use new properties 2013-06-20 15:24:54 +02:00
ahocevar
ba87c2e5ab Adding TODOs 2013-06-20 15:02:12 +02:00
ahocevar
f316b79bcd Proper handling of defaults 2013-06-20 14:57:01 +02:00
Éric Lemoine
be86b83b67 Add addControl and removeControl methods to ol.Map 2013-06-20 14:51:10 +02:00
Frederic Junod
9d63217778 Add 'units' property to ol.control.ScaleLine 2013-06-20 14:50:32 +02:00
Éric Lemoine
b85520f504 The map now has a collection of controls 2013-06-20 14:39:20 +02:00
Tom Payne
11cfcda37c Stop buttons from moving so much when changing values 2013-06-20 05:41:39 +02:00
Tom Payne
61f89bab6e Prevent buttons from setting out-of-range brightness/contrast/saturation values 2013-06-20 05:41:39 +02:00
ahocevar
9e3ca1c13c Changing renderLabels_ method name to renderText_ 2013-06-19 22:14:52 +02:00
ahocevar
cb9f4972df Use 'text' instead of 'name' for the label text 2013-06-19 22:10:44 +02:00
ahocevar
7353e05a90 Fixing merge errors from unmerging #404 2013-06-19 22:01:51 +02:00
ahocevar
c17424deec Basic support for text symbolizers
This adds basic label rendering for points and polygons to the
canvas renderer, and a text symbolizer to the style package.
2013-06-19 22:01:51 +02:00
Frederic Junod
cbf0402471 Make ol.control.Control extends ol.Object 2013-06-19 16:43:59 +02:00
Tom Payne
aa1a71ed96 Don't attempt to constrain values in setters 2013-06-19 13:38:57 +02:00
Frédéric Junod
79980bc7be Merge pull request #795 from fredj/pan_actionbutton
Right click pan
2013-06-18 22:18:57 -07:00
Tim Schaub
56c2b85fce Merge pull request #796 from tschaub/geojson-rename
Use .geojson extension for GeoJSON
2013-06-18 15:54:47 -07:00
Tim Schaub
2ee0805075 Taking advantage of GitHub's rendering of .geojson 2013-06-18 15:39:45 -06:00
Frederic Junod
6adedacaf8 Only pan the map when the mouse action button is pressed 2013-06-18 16:53:03 +02:00
Tom Payne
bf9b0b4dd2 Merge pull request #779 from twpayne/ch-projection
Add native support for Swiss projections
2013-06-18 06:36:29 -07:00
Frédéric Junod
81a167ef01 Merge pull request #791 from fredj/mapbrowserevent
ol.MapBrowserEvent: call browserEvent.{preventDefault|stopPropagation}
2013-06-18 06:25:43 -07:00
Frédéric Junod
517b4b27d7 Merge pull request #688 from fredj/mouse-position
Add ol.control.MousePosition.setProjection
2013-06-18 06:04:08 -07:00
Frederic Junod
fd5f4f3dd8 API doc strings for preventDefault and stopPropagation
thanks @elemoine
2013-06-18 15:02:42 +02:00
Frederic Junod
bed44dd82c Add ol.MapBrowserEvent.stopOtherInteractions
When called, stops the interaction chain.
2013-06-18 13:02:17 +02:00
Frederic Junod
2bd87313cd ol.MapBrowserEvent: call browserEvent.{preventDefault|stopPropagation} 2013-06-18 11:31:44 +02:00
Frederic Junod
f99fd26386 Add ol.control.MousePosition.getProjection 2013-06-18 11:20:19 +02:00
Frederic Junod
916dde0045 Add ol.control.MousePosition.setProjection 2013-06-18 11:12:20 +02:00
ahocevar
4392feef1b Merge pull request #794 from ahocevar/simplify-ranges
Simplifying ranges structure by adding compiler hints. r=@tschaub,@twpayne,@elemoine
2013-06-18 01:27:24 -07:00
Frédéric Junod
153fea538a Merge pull request #788 from fredj/mapevent
Remove defaultPrevented attribut from ol.MapEvent
2013-06-17 09:24:12 -07:00
ahocevar
c54d81258a Merge pull request #793 from ahocevar/proj-no-extent
Making extent optional for projections. r=@twpayne
2013-06-17 08:40:22 -07:00
ahocevar
11cbbab901 Simplifying ranges structure by adding compiler hints
In JavaScript, keys of object literals are always strings, and
internal type conversions are performed. Now if we tell the
compiler that keys are numbers, we get inconsistent types when
iterating through keys. So instead we set the key type to string
and do a type cast to make the compiler happy. Note that we
could also do toString() instead of a type cast, but it would
add a performance penalty (see
http://jsperf.com/internal-type-conversion-vs-tostring-for-object-keys).
2013-06-17 17:37:48 +02:00
ahocevar
b71bf9607c Do not set center constraint
This change slipped in accidently. Thanks @twpayne for catching
this.
2013-06-17 16:46:47 +02:00
Tom Payne
7b9ac53ace Merge pull request #749 from openlayers/webgl-vector
Skeleton WebGL vector support
2013-06-17 07:08:33 -07:00
Bruno Binet
be0149e478 Merge pull request #763 from bbinet/cleanup-attribution-control
Cleanup attribution control
2013-06-17 07:01:00 -07:00
ahocevar
24953e5f0e Making it clear that Proj4js is used 2013-06-17 15:28:05 +02:00
ahocevar
29b5af9c87 New example using a projection unknown to the client 2013-06-17 15:27:06 +02:00
ahocevar
caefacac35 Serve WMS tiles for sources without specified extent
With this change, WMS sources do not need an extent configured.
The result is that the WMS will be queried for tiles for any
extent.
2013-06-17 15:26:23 +02:00
ahocevar
37b369e0d7 Making extent optional for projections
The projection validity extent is used to generate a sensible
set of default resolutions and a sensible default tile grid.
By making it optional, we can still generate defaults - with
zoom levels that are similar to the default web mercator zoom
levels (based on fitting the world on a single tile, even if the
projection is not available for the whole world).
2013-06-17 15:24:37 +02:00
Tom Payne
cbf88de606 Don't include Swiss projections in default build 2013-06-17 12:23:29 +02:00
Tom Payne
941432af75 Use rigorous Swiss grid / EPSG:4326 transforms 2013-06-17 12:23:29 +02:00
Tom Payne
826556775c Add ol.ellipsoid.BESSEL1841 2013-06-17 12:23:29 +02:00
Tom Payne
0968e2b00b Add ol.proj.EPSG2056 and factor out common code 2013-06-17 12:23:29 +02:00
Tom Payne
c02e2530f1 Add ol.proj.EPSG21781 2013-06-17 12:23:28 +02:00
Bruno Binet
6b904573a0 Hide attribution instead of DOM removal
The reasons are:

 - It minimizes DOM updates (most changes to the attribution are just toggling
   visibility, not the more expensive creation, insertion and removal of DOM
   elements)
 - The order of attributions remains stable as layer visibilities are toggled
   and the user interacts with the map
2013-06-14 00:23:01 +02:00
Bruno Binet
950b53f6dc Clean up attribution control
Do not use map.getLayers() anymore, but get layers from frameState.layersArray.
2013-06-14 00:22:47 +02:00
Bart van den Eijnden
d552d27a35 Merge pull request #783 from bartvde/apidoc2
Add more content for the API doc (r=@twpayne,@tschaub,@fredj)
2013-06-12 11:05:07 -07:00
Bart van den Eijnden
0237675711 address review comments 2013-06-12 20:03:57 +02:00
Frederic Junod
ba8684b585 Remove defaultPrevented attribut from ol.MapEvent
already defined in parent class: http://docs.closure-library.googlecode.com/git/class_goog_events_Event.html
2013-06-12 16:50:12 +02:00
Tom Payne
b08a086a11 Merge pull request #787 from twpayne/proj-related-clean-ups
Projection-related clean ups
2013-06-12 07:44:52 -07:00
Tim Schaub
489879eb0d Merge pull request #784 from tschaub/missing-detail
More useful detail in log messages on the check for missing requires.
2013-06-12 07:21:27 -07:00
Tom Payne
e0dd15567c Add ol.Ellipsoid#e and #eSquared 2013-06-12 16:05:00 +02:00
Tom Payne
1e9ccab806 Make ol.Ellipsoid properties constant 2013-06-12 16:05:00 +02:00
Tom Payne
9751bde8d1 Clean up whitespace 2013-06-12 16:05:00 +02:00
Frédéric Junod
3fab93fc4a Merge pull request #786 from fredj/contextmenu-events
Relay contextmenu browser event
2013-06-12 06:06:53 -07:00
Frederic Junod
1de3ffe57e Relay contextmenu browser event 2013-06-12 14:14:25 +02:00
Tim Schaub
bb980abe8c And the proper syntax 2013-06-11 16:53:55 -06:00
Tim Schaub
9726be64c6 More useful detail in log messages
One line per missing require.  Include line number of last use.  Include proper syntax for adding requires.
2013-06-11 16:42:39 -06:00
ahocevar
f7fd1cf2b0 Merge pull request #404 from ahocevar/canvas-transform
Vector features disappear completely as you zoom in (r=@tschaub)
2013-06-11 12:07:14 -07:00
ahocevar
ea02626c28 Reducing number of default zoom levels
To avoid issues with long segments, we accept scaled tiles for
now. Further workarounds and browser tickets reporting our
issues are needed.
2013-06-11 21:06:18 +02:00
Bart van den Eijnden
8dc97790bc Add more content for the API doc
Involves additions to (there will be subsequent pull requests for other
classes):
- ol.Attribution
- ol.Collection
- ol.Expression
- ol.Feature
- ol.Geolocation
- ol.Map
- ol.Object
- ol.Overlay
- ol.Projection
- ol.View2D
- ol.control.Attribution
- ol.control.Control
- ol.control.FullScreen
- ol.control.Logo
- ol.control.MousePosition
- ol.control.ScaleLine
- ol.control.Zoom
- ol.control.ZoomSlider
- ol.dom.Input
- ol.filter.Filter
- ol.filter.Geometry
- ol.filter.Logical
2013-06-11 20:56:04 +02:00
Frédéric Junod
55b3cbaf17 Merge pull request #552 from fredj/deviceorientation
Add ol.DeviceOrientation
2013-06-11 02:09:38 -07:00
Tim Schaub
9647567704 Merge pull request #776 from tschaub/proj-test
Rename spec to be like src
2013-06-10 10:21:30 -07:00
Tim Schaub
e56a791d41 Merge pull request #774 from tschaub/test-deps
Test dependencies in a common place
2013-06-10 09:08:57 -07:00
Tim Schaub
e7d6bae0ad Providing proj in ol.test 2013-06-10 09:34:43 -06:00
Tim Schaub
a631c50979 Rename spec to be like src 2013-06-10 09:29:00 -06:00
Tim Schaub
2964cc922c Test dependencies in a common place 2013-06-10 09:19:02 -06:00
Tom Payne
bbb95e15fa Fix line collection arguments in tests, thanks @ahocevar 2013-06-10 14:43:01 +02:00
Tom Payne
fc79a0ef3b Merge pull request #771 from ahocevar/leaner-webgl-vector
Removing canvas renderer stub for VectorLayer2
2013-06-10 05:11:19 -07:00
ahocevar
e8ab4f9f0c Removing canvas renderer stub for VectorLayer2
Setting the renderer of the ten-thousand-points example to
WebGL should remove the need for this stub. This is basically
the same approach we took for all vector examples in master,
where we set the renderer to Canvas.
2013-06-10 11:22:32 +02:00
Frédéric Junod
526c38a698 Merge pull request #769 from fredj/export-supported
Export ol.Geolocation.SUPPORTED
2013-06-10 01:37:23 -07:00
ahocevar
489459f313 Apply transform to coordinates rather than the canvas
Credit goes to @jystic for figuring out this approach.
2013-06-09 20:20:53 +02:00
Frederic Junod
4d4a654a8e Export ol.DeviceOrientation.SUPPORTED 2013-06-08 09:53:06 +02:00
Frederic Junod
79f99485c1 Export ol.Geolocation.SUPPORTED 2013-06-08 09:32:39 +02:00
Frederic Junod
ea8c970d6e Better device orientation example 2013-06-07 16:26:45 +02:00
Frederic Junod
9b00967df0 Replace 'changed' with 'change' (see #694) 2013-06-07 16:16:02 +02:00
Frederic Junod
b66b0be8b4 Add options to ol.DeviceOrientation constructor 2013-06-07 16:16:02 +02:00
Frederic Junod
15e5242611 Add 'heading' property to ol.DeviceOrientation 2013-06-07 16:16:02 +02:00
Frederic Junod
c431cc7f63 Add 'tracking' property to ol.DeviceOrientation 2013-06-07 16:16:02 +02:00
Frederic Junod
448e300a03 Add ol.DeviceOrientation 2013-06-07 16:16:02 +02:00
ahocevar
7cd5266d39 Merge pull request #744 from ahocevar/getfeature
getFeatures method and featureInfo templates. r=@bartvde
2013-06-07 07:06:00 -07:00
ahocevar
f83fedb9e1 API doc improvements 2013-06-07 15:34:14 +02:00
ahocevar
3a6c7cf204 Renaming featureInfoFunction to transformFeatureInfo 2013-06-07 15:34:13 +02:00
ahocevar
77d22c4038 getFeatures method and featureInfo templates
To avoid surprises for application developers, this change
creates a new getFeatures method. So it is clear now beforehand
whether features or feature info markup is returned. The result
is now also grouped by layer, so application developers always
have a link between a layer and the feature info it returns.

To make getFeatureInfo return markup for vector layers, this
change also adds a featureInfoFunction property to the vector
layer, which gives developers full control over how features are
rendered to feature info markup.
2013-06-07 15:34:13 +02:00
Frédéric Junod
34becd6871 Merge pull request #768 from fredj/mouseout
Relay mouseout browser event
2013-06-07 01:18:23 -07:00
Frederic Junod
d05bb872f3 Relay mouseout browser event 2013-06-07 09:48:15 +02:00
Tom Payne
85ca39cf0c Add warnings about internal classes and functions 2013-06-06 18:36:40 +02:00
Tom Payne
a858664035 Add warning about internal API to example 2013-06-06 18:36:00 +02:00
Frédéric Junod
286438ae0e Merge pull request #766 from fredj/cleanup
Cleanup
2013-06-06 05:12:17 -07:00
Frederic Junod
ece2a4b64c Store listener keys into an array instead of individual variables 2013-06-06 12:08:32 +02:00
Frédéric Junod
fd62963ad2 Merge pull request #760 from fredj/issue-758
Fix viewportPosition attributes access (closes #758)
2013-06-03 02:28:11 -07:00
Frederic Junod
4f0e09c00e Fix viewportPosition attributes access (closes #758) 2013-06-03 10:40:13 +02:00
ahocevar
461d2a1ba8 Merge pull request #756 from ahocevar/extent-equals
Use ol.extent.equals, removing TODO. r=@elemoine
2013-06-01 15:14:20 -07:00
ahocevar
57e36f4eda Use ol.extent.equals, removing TODO 2013-06-01 11:11:13 -06:00
Tom Payne
5850dff254 Use long LineString in ten-thousand-points example 2013-06-01 18:16:44 +02:00
Tom Payne
45572931a1 Draw LineStrings using drawElements
This enables drawing of LineStrings with more than two coordinates.
2013-06-01 18:16:43 +02:00
Tom Payne
e260255ce8 Return Uint16Array from ol.geom2.LineStringCollection#getIndices 2013-06-01 18:16:43 +02:00
Tom Payne
38c0e24bcd Add Assertion#arreql
Needed because expect.js's eql does not support typed arrays.
2013-06-01 18:16:43 +02:00
Tom Payne
3225a07f6f Add ol.geom2.LineStringCollection#getIndices 2013-06-01 18:16:43 +02:00
Tom Payne
db2f805ed9 Return split values in a single interleaved Float32Array 2013-06-01 18:16:43 +02:00
Tom Payne
42f15f000b Add ol.structs.Buffer#getSplit32 2013-06-01 18:16:43 +02:00
Tom Payne
f61edacb5c Activate ol.renderer.canvas.VectorLayer2 bare skeleton 2013-06-01 18:16:43 +02:00
Tom Payne
674468268e Add ol.renderer.canvas.VectorLayer2 bare skeleton 2013-06-01 18:16:43 +02:00
Tom Payne
f55fed9bc3 Add ten thousand points example 2013-06-01 18:16:42 +02:00
Tom Payne
2484cf2c55 Add line string rendering 2013-06-01 18:16:42 +02:00
Tom Payne
8f86288614 Add line string collections to ol.source.VectorSource2 2013-06-01 18:16:42 +02:00
Tom Payne
1690cb9cae Add ol.geom2.LineStringCollection 2013-06-01 18:16:42 +02:00
Tom Payne
4cc5441579 Activate ol.renderer.webgl.VectorLayer2 2013-06-01 18:16:42 +02:00
Tom Payne
e4b5ec8f0b Add ol.renderer.webgl.VectorLayer2 2013-06-01 18:16:42 +02:00
Tom Payne
bed8c44859 Add ol.layer.VectorLayer2 2013-06-01 18:09:29 +02:00
Tom Payne
ac48fae0af Add ol.source.VectorSource2 2013-06-01 18:09:29 +02:00
Tom Payne
93ba55d357 Add ol.geom2.PointCollection 2013-06-01 18:09:29 +02:00
Tom Payne
d51cdc0e48 Add ol.geom2 utility functions 2013-06-01 18:09:29 +02:00
Tom Payne
7fd2e1ffca Factor out ol.structs.Buffer#allocate 2013-06-01 18:09:29 +02:00
Tom Payne
bcf7707b01 Factor out ol.structs.Buffer#markDirty 2013-06-01 18:09:28 +02:00
Frédéric Junod
07694c52b0 Merge pull request #753 from fredj/size-as-array
Redefine ol.Size to be Array.<number>
2013-06-01 08:40:35 -07:00
Frederic Junod
a1a7e21f92 Redefine ol.Size to be Array.<number> 2013-06-01 10:22:06 +02:00
ahocevar
5560829695 Merge pull request #755 from ahocevar/newline
Fixing linter error
2013-05-31 19:07:46 -07:00
ahocevar
b746116a20 Fixing linter error 2013-05-31 20:07:04 -06:00
ahocevar
4d5149a35f Merge pull request #754 from ahocevar/geom-doc
Exposing ol.geom.GeometryType
2013-05-31 14:05:22 -07:00
ahocevar
56ac30de91 Exposing ol.geom.GeometryType
This is necessary for using ol.filter.Geometry.
2013-05-31 15:04:55 -06:00
Frédéric Junod
1d7ca27e61 Merge pull request #478 from fredj/pixel-as-array
Redefine ol.Pixel to be Array.<number>
2013-05-31 07:26:54 -07:00
Éric Lemoine
a2316e6e14 Merge pull request #752 from elemoine/color-examples
Add color filter values to buttons
2013-05-31 07:22:53 -07:00
Frederic Junod
be081fd44e Redefine ol.Pixel to be Array.<number> 2013-05-31 15:53:04 +02:00
Éric Lemoine
93fd685ca7 Display hue/saturation value in button text 2013-05-31 15:47:17 +02:00
Éric Lemoine
84b1886666 Display brightness/contrast value in button text 2013-05-31 15:45:40 +02:00
Tom Payne
075f4aadc7 Merge pull request #748 from twpayne/rename-projection-to-proj
Rename ol.projection to ol.proj
2013-05-31 04:34:22 -07:00
Frédéric Junod
e9adc06bee Merge pull request #694 from fredj/backbone-model
Change ol.Object event name syntax
2013-05-31 04:33:51 -07:00
Frederic Junod
984002a7ec Change ol.Object event name syntax
'changed' to 'change' and '<attribute>_changed' to 'change:<attribute>'.
2013-05-31 12:38:37 +02:00
Tom Payne
46553c719c Rename ol.projection to ol.proj 2013-05-30 18:55:58 +02:00
Tim Schaub
5e5d8e5b17 Merge pull request #739 from tschaub/attribution-style
Style for attribution control
2013-05-30 08:00:21 -07:00
Tim Schaub
7e20ea160c Simplify style 2013-05-30 08:59:31 -06:00
Tim Schaub
3d0f7f3b70 Merge pull request #738 from tschaub/allow-stop
Allow user to stop map at the end of a drag
2013-05-30 06:15:05 -07:00
Bart van den Eijnden
317281b37b Merge pull request #729 from bartvde/wktsingleton
static read and write methods on ol.parser.WKT (r=@ahocevar)
2013-05-30 00:29:53 -07:00
Tom Payne
795ea69982 Merge pull request #722 from twpayne/unused-variable-check
More rigorous linting
2013-05-28 08:06:30 -07:00
Tom Payne
11672db967 Use === and !== for comparisons with 0 2013-05-28 16:07:48 +02:00
Tom Payne
c0cfc7872e Add missing semicolons 2013-05-28 16:03:32 +02:00
Tom Payne
e744a1b6e9 Enable all gjslint errors 2013-05-28 16:01:34 +02:00
Tom Payne
975e180b26 Fix typo in ol.style.Icon 2013-05-28 16:01:34 +02:00
Tom Payne
7046ebe261 Remove unused variables in tile range 2013-05-28 16:01:34 +02:00
Tom Payne
f4d54ace1d Remove unused variables in structs 2013-05-28 16:01:34 +02:00
Tom Payne
8b539cd4cc Remove unused variables in sphere 2013-05-28 16:01:34 +02:00
Tom Payne
20982bba31 Remove unused variables in sources 2013-05-28 16:01:33 +02:00
Tom Payne
f64e35e8bb Remove unused variables in renderers 2013-05-28 16:01:33 +02:00
Tom Payne
268c18988b Remove unused variables in parsers 2013-05-28 16:01:33 +02:00
Tom Payne
42b6ed5d2a Remove unused variables in interactions 2013-05-28 16:01:33 +02:00
Tom Payne
b021bfd70f Remove unused variables in geom 2013-05-28 16:01:33 +02:00
Tom Payne
6900c90bc5 Remove unused variables in examples 2013-05-28 15:15:49 +02:00
Tom Payne
1c77fb2357 Merge pull request #740 from twpayne/rtree-clean-ups
R-tree clean-ups
2013-05-28 06:14:57 -07:00
Frédéric Junod
c28f64efde Merge pull request #742 from fredj/geolocation
Dispatch an error on Geolocation failure
2013-05-27 04:36:42 -07:00
Frederic Junod
82d2fa373a Dispatch an error on Geolocation failure 2013-05-27 12:46:36 +02:00
Bart van den Eijnden
9968a5feda Merge pull request #734 from bartvde/xml-ie9
Fix XML serialize and xml_eql in IE9 (r=@ahocevar)
2013-05-27 02:28:48 -07:00
Bart van den Eijnden
0f3c151058 implement review comment by @ahocevar 2013-05-27 11:04:27 +02:00
Bart van den Eijnden
b921bece0e Merge pull request #725 from bartvde/gpx
Implement GPX parser (read/write). (r=@fredj)
2013-05-27 01:42:09 -07:00
Bart van den Eijnden
81bffb464f Merge pull request #737 from bartvde/feature-id
FeatureId support in GML (r/w) and KML (w) (r=@fredj)
2013-05-27 01:39:59 -07:00
Frédéric Junod
e2fa562326 Merge pull request #741 from fredj/export-view-constraints
Export constrainResolution and constrainRotation from ol.View2D
2013-05-26 23:47:59 -07:00
Frederic Junod
dab8c8dcd0 Export constrainResolution and constrainRotation from ol.View2D 2013-05-26 08:56:06 +02:00
Frederic Junod
836700669f Sort exported properties 2013-05-26 08:46:30 +02:00
Tom Payne
a162b6fab3 Use empty extents and refactor for clarity 2013-05-25 20:39:55 -05:00
Tom Payne
f0baf2efc2 Add ol.extent.empty 2013-05-25 20:38:11 -05:00
Tom Payne
18b1789512 Sort methods alphabetically 2013-05-25 19:50:44 -05:00
Tom Payne
d80ded31ee Clean up some comments 2013-05-25 19:46:40 -05:00
Tom Payne
aaa4fec141 Move insert into method 2013-05-25 19:39:51 -05:00
Tom Payne
a871f29e75 Move remove into method 2013-05-25 19:35:59 -05:00
Tom Payne
ea1ee73392 Move search and searchReturningObject into methods 2013-05-25 19:33:46 -05:00
Tom Payne
32c663cf2c Move more functions into private methods 2013-05-25 19:24:45 -05:00
Tom Payne
3cdb9f130b Make minWidth and maxWidth private member variables 2013-05-25 18:27:38 -05:00
Tom Payne
476e35c276 Move makeMBR into private static function 2013-05-25 18:17:38 -05:00
Tom Payne
7f22455eed Move squarifiedRatio into private static function 2013-05-25 18:14:52 -05:00
Tim Schaub
439a8a5330 Style for attribution control 2013-05-24 19:02:43 -05:00
Tim Schaub
fa970f1ae2 Allow user to stop map at the end of a drag
If the time between the last move and now is longer than the configured delay, this means that the user stopped panning before releasing the map.
2013-05-24 18:18:34 -05:00
Bart van den Eijnden
3ee533a9b0 FeatureId support in GML (r/w) and KML (w)
Now that we have FeatureId support (see #733), we can add this back to the
GML parsers (v2 and v3). Also add write support for FeatureId in KML, read
support was already added by @fredj
2013-05-24 17:00:59 +02:00
Bart van den Eijnden
e63423eafe Merge pull request #736 from bartvde/jsdoc2
Add parser.jsdoc file for docs on parser options (p=@ahocevar, r=@bartvde)
2013-05-24 07:02:06 -07:00
Bart van den Eijnden
392d529168 Add parser.jsdoc file for docs on parser options.
Pointer by @ahocevar in #735
2013-05-24 16:00:17 +02:00
ahocevar
5a3ac559be Merge pull request #733 from ahocevar/fid
Store the feature's commonly used id. r=@fredj,@bartvde
2013-05-24 06:15:00 -07:00
ahocevar
111b127bf7 Merge pull request #2 from fredj/fid
Store the KML Placemark identifier
2013-05-24 06:14:29 -07:00
Bart van den Eijnden
9881411090 fix typo in WMTS parser 2013-05-24 14:02:00 +02:00
Bart van den Eijnden
6e80a35960 Static read and write functions on WKT parser
Use a singleton to implement static read and write methods on ol.parser.WKT.
2013-05-24 11:17:21 +02:00
Bart van den Eijnden
d8232bb484 Fix XML serialize and xml_eql in IE9
Use the xml property instead in IE for serializing XML.
The xml_eql tests were failing in IE9 on a difference between null and an
empty string for namespaceURI of attributes, this difference is not
relevant to our testing so make sure we ignore.
2013-05-24 10:53:29 +02:00
Bart van den Eijnden
f8ef902af4 Merge pull request #732 from bartvde/geojson-write
Write support for ol.parser.GeoJSON (r=@tschaub)
2013-05-24 00:38:10 -07:00
Frederic Junod
a452915d8a Store the KML Placemark identifier 2013-05-24 09:29:30 +02:00
ahocevar
8c0f1f979a Store the feature's commonly used id
To not clobber the feature's attributes, this is a separate
member property.
2013-05-23 11:16:17 -05:00
ahocevar
d1beaff8e4 Merge pull request #731 from ahocevar/rtree-api-tests
RTree API improvements and more tests. r=@twpayne
2013-05-23 08:28:56 -07:00
Bart van den Eijnden
4b0c43fb8b Merge pull request #726 from bartvde/kml_serialize
Small fixes for KML write (r=@ahocevar)
2013-05-23 07:36:33 -07:00
Bart van den Eijnden
93b067b6bc Write support for ol.parser.GeoJSON
Also add some convenience with static read and write methods based on the
singleton.
2013-05-23 15:57:11 +02:00
ahocevar
10e3a16f40 RTree API improvements and more tests
This change reverts the RTree API back to the original one (i.e.
insert() instead of put(), search() instead of find()), and
creates a new searchReturningObject() method that returns an
object keyed by UIDs.

It also adds missing tests for type restricted search and
searchReturningObject().
2013-05-22 18:25:40 -05:00
ahocevar
513115ea3b Merge pull request #730 from ahocevar/fix-rtree-tests
Fixing bug in tests
2013-05-22 11:42:22 -07:00
ahocevar
597405c288 Fixing bug in tests
That's what you get from copying and pasting and forgetting to
modify the pasted lines to suit your needs.
2013-05-22 13:41:29 -05:00
Frédéric Junod
2d765a6cf9 Merge pull request #728 from fredj/cleanup
Examples cleanup
2013-05-22 07:57:06 -07:00
Frederic Junod
2991c4ab57 Add a resolution input 2013-05-22 16:13:17 +02:00
Frederic Junod
fc12370765 Remove stray end tag fieldset 2013-05-22 16:03:59 +02:00
Frederic Junod
7ba4045e59 geolocation example: suppresses line breaks in tooltip 2013-05-22 15:53:55 +02:00
Frédéric Junod
cf605f2d52 Merge pull request #727 from fredj/mobile-featureinfo
getFeatureInfo examples: listen to click events
2013-05-22 04:31:33 -07:00
Bart van den Eijnden
0f0ea7e63f make feature info work on touch devices for gpx example see #727 2013-05-22 13:06:56 +02:00
Bart van den Eijnden
969b47c78c address review by @fredj 2013-05-22 13:01:41 +02:00
Frederic Junod
db34b37716 getFeatureInfo examples: listen to click events
This make the examples works on touch devices.
2013-05-22 12:30:31 +02:00
Bart van den Eijnden
3a83f1b861 Small fixes for KML write.
Be a good XML citizen and always write out schemaLocation.
Use serialize on ol.parser.XML so that we don't have to set xmlns manually.
2013-05-22 12:00:58 +02:00
Bart van den Eijnden
dc922b4ffa Implement GPX parser (read/write).
Implement a parser for GPX which supports read and write.
2013-05-22 10:44:36 +02:00
ahocevar
783e6d33d5 Merge pull request #723 from ahocevar/add-features
Export addFeatures. r=@tschaub
2013-05-21 20:47:08 -07:00
ahocevar
32d669ccc8 Export addFeatures
This needs discussion, but it's useful for now to be able to
have applications with programmatically created features.
2013-05-21 22:44:28 -05:00
ahocevar
485245fbfd Merge pull request #719 from ahocevar/fast-rtree
More sophisticated RTree implementation. r=@tschaub
2013-05-21 13:01:16 -07:00
ahocevar
a2927a0dd9 Addressing @tschaub's review comments 2013-05-21 15:00:50 -05:00
Frédéric Junod
77e60f8417 Merge pull request #721 from fredj/cleanup
Pass layers as array instead of ol.Collection
2013-05-21 05:28:43 -07:00
Frederic Junod
7d544e0868 Pass layers as array instead of ol.Collection 2013-05-21 12:35:02 +02:00
ahocevar
0f4a5c09af Porting tests from http://github.com/imbcmdth/RTree/
Also fixes some issues that were revealed by the new tests.
2013-05-20 17:47:04 +02:00
ahocevar
97d48277b5 Making docs more clear 2013-05-20 16:20:41 +02:00
ahocevar
2b410cf2d0 More performance and size optimizations
Not using Math.max and Math.min increases performance, and by
using ol.extent functions instead of RTree's rectangle
structures and calculations we can get rid of several functions.
2013-05-20 16:20:21 +02:00
ahocevar
9dd4dc3730 Better optimization for advanced compilation mode 2013-05-20 08:50:15 +02:00
ahocevar
bf510b570a Making RTree work in advanced compilation mode 2013-05-19 23:59:21 +02:00
ahocevar
958ee7af51 Use strings, like with other indices 2013-05-19 11:16:24 +02:00
ahocevar
2ff2e85fbb Only query RTree if requested geometryType is used 2013-05-19 11:16:02 +02:00
ahocevar
79e4ee2717 More sophisticated RTree implementation
This new implementation is based on
http://github.com/imbcmdth/RTree/, with only a few modifications
to add the optional type and provide the API of the previous
implementation.

There is still room for optimization, but this is such an
improvement over the previous RTree already that it's worth
bringing it in now.
2013-05-19 01:47:21 +02:00
Tim Schaub
dc4ca15430 Merge pull request #718 from tschaub/dirty-frame
Properly reset the dirty flag
2013-05-18 09:27:33 -07:00
Tim Schaub
38752f4700 Properly reset the dirty flag
Currently, the dirty flag is never reset (to false).  This is a bug.  Because renderFrame is called very often (every layer render gets called when every other layer needs to re-render), it is criticial to know when we can bail out early.  The dirty flag is currently the way that the vector layer renderer knows that it needs to do more work.  On an empty cache, the renderFrame method of the vector layer renderer is called ~30 times for a single zoom in the vector layer example (due to tiles loading on other layers).  Without this change, we miss the fast path out and clear/re-render the canvas all 30 times.  With this change, we are only clear the canvas and redraw 6 times in a typical zoom animation.
2013-05-17 23:22:07 -06:00
ahocevar
02ba8a86e6 Merge pull request #715 from ahocevar/rtree-performance
Making RTree's find more efficient. r=@bartvde
2013-05-17 04:06:20 -07:00
ahocevar
ecea771801 Making RTree's find more efficient
By doing the type check before the intersection check, we can
save he intersection check for cases where we don't care about
type or have the specified type in a node.
2013-05-17 12:54:06 +02:00
Bart van den Eijnden
b3ad00da13 Merge pull request #714 from bartvde/gmloptions
GML options not always applied (=r@ahocevar)
2013-05-17 03:51:06 -07:00
Bart van den Eijnden
0aa4fe258e GML options not always applied.
This is a follow-up for https://github.com/openlayers/ol3/pull/711
for the GML parser. Also use goog.array.map instead of map as was
pointed out by @twpayne on the WKT review and update the example data
to use all US states as pointed out by @tschaub on the Google hangout.
2013-05-17 11:48:05 +02:00
Bart van den Eijnden
921aa28b42 Merge pull request #712 from bartvde/wkt
Add WKT parser (r=@ahocevar,@twpayne,@tschaub)
2013-05-17 01:55:42 -07:00
Bart van den Eijnden
3e3b5ab02d move last RegExp into constant 2013-05-17 10:15:22 +02:00
Bart van den Eijnden
585887b04e address review comments by @twpayne 2013-05-17 10:09:40 +02:00
ahocevar
9342ebdc98 Merge pull request #713 from ahocevar/kml-responsetext
Do not rely on responseXML, also use responseText. r=@bartvde
2013-05-16 12:49:51 -07:00
ahocevar
5d7cdd2646 Use goog.isString() instad of typeof check 2013-05-16 21:20:34 +02:00
ahocevar
22c4508c27 Don't rely on responseXML, also use responseText
On servers that report an incorrect content type for XML
documents, responseXML will be empty. In these cases we need to
use responseText instead. This change also prevents readNode
calls with empty data.
2013-05-16 21:11:32 +02:00
ahocevar
e50c314c33 Merge pull request #711 from ahocevar/kml-options
KML options not applied when library built separately from application. r=@bartvde
2013-05-16 07:04:42 -07:00
Bart van den Eijnden
bb16820ab0 add exports for WKT 2013-05-16 15:44:31 +02:00
Bart van den Eijnden
bf8c12d9f7 Add WKT parser.
Add a parser (read/write) for OGC Well-Known-Text (WKT). It deals with
geometries only, not with features, mostly because WKT can only contain a
single geometry (or geometry collection). This can later on be used to
serialize and deserialize geometries in ol3.
2013-05-16 15:29:39 +02:00
ahocevar
3e6cdf8901 trackAttributes is optional 2013-05-16 15:26:54 +02:00
ahocevar
cde4ef435c Adding another option 2013-05-16 15:14:38 +02:00
ahocevar
1929403cda Do not extend the instance with options 2013-05-16 14:37:40 +02:00
ahocevar
c245794e56 Sorting properties 2013-05-16 14:37:27 +02:00
ahocevar
7ed51f97aa Merge pull request #710 from ahocevar/hit-detection
Accurate hit detection. r=@bartvde
2013-05-16 02:10:50 -07:00
ahocevar
8084e20e64 Fixing typo 2013-05-16 10:45:25 +02:00
ahocevar
7a800068ed Fixing typedef 2013-05-16 10:44:22 +02:00
ahocevar
824397e6ba Do not change ol.extent.containsCoordinate 2013-05-16 10:42:28 +02:00
ahocevar
2d5c0df7cd More verbose variable names 2013-05-16 10:14:56 +02:00
Éric Lemoine
b7f0f9ba86 Merge pull request #708 from elemoine/user-extensions
The compilation of ol.js produces a warning
2013-05-16 01:06:36 -07:00
ahocevar
4e7ffc2711 Store symbol sizes by tile
The reason for this change is that symbolSizes and maxSymbolSize
on the instance will be wrong as soon as the resolution changes
and cached tiles are used. It turned out that the approach used
now has several advantages: smaller symbolSizes objects, no need
to merge symbolSizes objects, and cache management for free (no
risk of memory leaks). Note that the symbolSizes and
maxSymbolSize for each tile are not strictly tile specific -
they represent the rendering pass that created the tile. This
has no negative side effects, and it has the advantage that
there is not a single additional loop needed to create these
structures.
2013-05-16 09:57:26 +02:00
ahocevar
037e44e084 Accurate hit detection
With this change, hit detection for lines and points gets very
accurate, because the vector renderer instance keeps track of
line widths and point symbol sizes. After doing a bbox query in
the RTree, returned lines and points are evaluated against the
thresholds of their line width or symbol size. The KML example
with its different symbolizers now has getFeatureInfo too to
show this in action.
2013-05-15 23:44:22 +02:00
Bart van den Eijnden
32ea32521d Merge pull request #709 from bartvde/gmlfresh
GML parser (r=@ahocevar)
2013-05-15 07:08:24 -07:00
Bart van den Eijnden
e8ed1674ea do not specify the source projection in ol.parser.ReadFeaturesOptions anymore 2013-05-15 15:34:11 +02:00
Bart van den Eijnden
2ad3ee6f99 incorporate review from @ahocevar 2013-05-15 14:50:37 +02:00
Bart van den Eijnden
5ad4734c24 GML parser.
This adds a parser (read/write) for GML v2 and v3. GML v3 is limited to the
simple features profile of GML 3.1.1, just like OpenLayers 2 was. This will
be the basis for the WFS parser, but it only makes sense to continue this work
once feature modification (insert, update, delete) is in place in ol3. So the
WFS parser will be another pull request.
2013-05-14 20:12:05 +02:00
Éric Lemoine
124b195d3e handleMapPostrender returns undefined
Without this we get the following warning from the compiler:

JSC_EXPORTED_FUNCTION_UNKNOWN_RETURN_TYPE. Unable to determine return type for exported function ol.control.Control.prototype.handleMapPostrender at ../src/ol/control/control.js line 79 : 51

I'm not sure why explicitely specifying the return type is required here.
2013-05-10 14:04:50 +02:00
Éric Lemoine
42cc4d7683 Merge pull request #706 from elemoine/user-extensions
Custom control framework
2013-05-10 04:47:39 -07:00
Éric Lemoine
4c144c3d5c Merge pull request #700 from elemoine/calculate-extent
Add and export View2D.calculateExtent
2013-05-10 03:57:24 -07:00
Bart van den Eijnden
87b3a3274d Merge pull request #699 from bartvde/kmlxmleql3
Use xmleql in the KML tests (r=@ahocevar)
2013-05-10 03:14:35 -07:00
ahocevar
72fce33956 Merge pull request #703 from ahocevar/getfeatureinfo-async
Asynchronous API for map#getFeatureInfo. r=@elemoine
2013-05-10 02:50:11 -07:00
Éric Lemoine
3a4fc2a99a Use our own null function for handleMapPostrender
If we use ol.control.Control.prototype.handleMapPostrender = goog.nullFunction the API doc doesn't show the mapEvent parameter of the handleMapPostRender function.
2013-05-10 10:56:39 +02:00
Éric Lemoine
88352092ee Externalize Control.handleMapPostrender 2013-05-10 10:45:24 +02:00
Éric Lemoine
c845682ecb Export Control.getMap 2013-05-10 10:24:11 +02:00
Éric Lemoine
4e51888651 Add a custom controls example
Inspired from @cedricmoullet's ZoomExtent example in 3312c37ed0.
2013-05-10 10:24:11 +02:00
Éric Lemoine
9685c87bc9 Create ol.inherits alias, and export it 2013-05-10 10:24:11 +02:00
Éric Lemoine
7a71f107cb Export and externalize Control.setMap 2013-05-10 10:24:11 +02:00
Éric Lemoine
2944b31c69 Merge pull request #707 from elemoine/gjslint
Use new gjslint version (2.3.10)
2013-05-09 22:03:38 -07:00
Éric Lemoine
41fb355804 New gslint doesn't like va_filters 2013-05-10 00:13:15 +02:00
Éric Lemoine
410f35bb44 Use latest gjslint version (2.3.10) 2013-05-10 00:13:05 +02:00
Éric Lemoine
917e78a096 Merge pull request #701 from elemoine/rm-google-exports
Remove google.exports
2013-05-09 15:03:35 -07:00
Éric Lemoine
d71c690794 Merge pull request #705 from elemoine/getextent
Fix typo in View2D:getExtent
2013-05-09 15:02:48 -07:00
Éric Lemoine
c34d637de1 Fix typo in View2D:getExtent 2013-05-09 23:42:55 +02:00
Éric Lemoine
c9299f3b8d Merge pull request #704 from elemoine/no-namespace-export
Export fixes
2013-05-09 14:13:48 -07:00
Éric Lemoine
ca332a3fef Minor fix to the generate-exports.py script
Now that we correctly export the ol.animation.*, ol.easing.* and ol.coordinate.* symbols we can make the generate-exports.py script work for more cases.
2013-05-09 22:46:08 +02:00
Éric Lemoine
4b7f3e85c2 No need to export ol.coordinate 2013-05-09 22:45:20 +02:00
Éric Lemoine
f47ac87f12 No need to export ol.easing 2013-05-09 22:45:11 +02:00
Éric Lemoine
17e779177b ol.easing.* functions are symbols 2013-05-09 22:44:49 +02:00
Éric Lemoine
31930290cf No need to export ol.animation 2013-05-09 22:44:11 +02:00
Éric Lemoine
a96031f435 ol.animation.* functions are symbols 2013-05-09 22:43:04 +02:00
ahocevar
53b85c99ae map#getFeatureInfo does not return anything
Thanks @elemoine for catching this.
2013-05-09 22:32:40 +02:00
ahocevar
7b256c3ec6 Asynchronous API for map#getFeatureInfo
This change allows us to use feature info services on the
server. It will also be useful for the GetFeature control to
get results from a WFS.
2013-05-09 22:26:55 +02:00
Éric Lemoine
fa1eb354f2 Merge pull request #702 from elemoine/closure-linter
Use closure_linter-2.3.9.tar.gz
2013-05-09 12:48:48 -07:00
Éric Lemoine
1d709cc6ac Use closure_linter-2.3.9.tar.gz
closure_linter-latest.tar.gz is no longer available in http://closure-linter.googlecode.com/files/, so use closure_linter-2.3.9.tar.gz.
2013-05-09 21:23:31 +02:00
Éric Lemoine
8779b90f7c Remove google.exports
This .exports file made goog.require be exported as a null function. This was needed to be able to run the ol3 examples uncompiled against the ol.js build. Now that host-examples target removes the goog.require statements from the examples' js files (74b8fea6) we don't need to export goog.require anymore.
2013-05-09 21:13:20 +02:00
Bart van den Eijnden
c69e5c1dba Use xmleql in the KML tests
This also involves some modifications to the xmleql functionality now that
it was tested with a real-life case (KML). Also, some of the input KML files
needed to be changed since we currently cannot roundtrip 100% of the input.
2013-05-08 16:41:45 +02:00
Tom Payne
0b09148fb5 Merge pull request #697 from twpayne/fix-nan-test
Fix NaN test
2013-05-08 05:59:16 -07:00
Tom Payne
9286d63133 Merge pull request #693 from twpayne/class-name
Add className option to control options
2013-05-08 05:35:37 -07:00
Tom Payne
b4598aa5d9 Fix NaN test 2013-05-08 14:32:16 +02:00
ahocevar
96c3a86314 Merge pull request #692 from ahocevar/pnpoly
Point-in-polygon improvements. r=@bartvde
2013-05-08 05:11:16 -07:00
Tom Payne
97510ba0be Use className in mouse position example 2013-05-07 17:33:33 +02:00
Tom Payne
2ad5dea737 Rename ol-mouseposition to ol-mouse-position 2013-05-07 17:31:26 +02:00
Bart van den Eijnden
14e073fb5a Merge pull request #689 from bartvde/xmleql4
Improvements for xmleql (r=@ahocevar)
2013-05-07 08:06:57 -07:00
Tom Payne
b698b1736f Add className option to ol.control.ZoomSlider 2013-05-07 16:36:25 +02:00
Tom Payne
9c59116dd1 Make zoom slider control options optional 2013-05-07 16:31:39 +02:00
Tom Payne
ab9fc9cc71 Inline simple function that is only called once 2013-05-07 16:28:22 +02:00
Tom Payne
b7e2a9b40e Add className option to ol.control.Zoom 2013-05-07 16:19:50 +02:00
Tom Payne
09feaedd00 Add className option to ol.control.ScaleLine 2013-05-07 16:19:21 +02:00
Tom Payne
f31a4f8549 Add className option to ol.control.MousePosition 2013-05-07 16:18:05 +02:00
Tom Payne
525d5c5337 Add className option to ol.control.Logo 2013-05-07 16:17:51 +02:00
Tom Payne
f08814250e Add className option to ol.control.FullScreen 2013-05-07 16:17:35 +02:00
Tom Payne
8c396e5afb Add className option to ol.control.Attribution 2013-05-07 16:17:13 +02:00
ahocevar
019fc86ac5 Entertaining linter and compiler 2013-05-07 14:20:09 +02:00
Éric Lemoine
c105a98443 Merge pull request #691 from elemoine/mouseposition
Add default CSS for mouse position control
2013-05-07 02:48:10 -07:00
ahocevar
666a010e3b Point-in-polygon improvements
As suggested by @tschaub in #674, geom.pointInPoly is not needed
if we have geom.LinearRing#containsCoordinate. This pull request
also adds tests and documentation on the limitations of the
containsCoordinate method.

I think for now it is ok to keep geometry/topology functions as
simple as possible in ol3. If we decide to not rely on third
party libraries like jsts for topology operations, we can always
refine what we have and e.g. port topology operations over from
ol2.
2013-05-07 10:49:51 +02:00
Frédéric Junod
aa3cc0cec4 Merge pull request #687 from fredj/geolocation
Use ol.projection.identityTransform instead of goog.functions.identity
2013-05-06 08:41:36 -07:00
Bart van den Eijnden
3fc0f2b47d Improvements for xmleql
This adds some improvements for the xmleql test assertion. When passed in a
document, use the documentElement. Also improve error reporting as suggested
by @tschaub.
2013-05-06 15:35:40 +02:00
Thomas
f219393149 Add default CSS style for mouse position
Missing CSS was confirmed with issue #680, this commit is to fix it and change
ol-mouse-position class to ol-mouseposition. I choose for the moment the top
right corner to display the coordinates from mouse position control because of
potential conflict with the scaleline control.
2013-05-06 14:07:13 +02:00
Bart van den Eijnden
10b690b5f9 Merge pull request #661 from bartvde/xmleql
Add Assertion.prototype.xmleql (r=@twpayne,@tschaub,@elemoine)
2013-05-06 02:43:24 -07:00
Bart van den Eijnden
865404a0d3 Add Assertion.prototype.xmleql
This is based on the xml_eq function we had in the OL2 test framework but
adapted to expect.js.
2013-05-06 11:18:49 +02:00
Frederic Junod
fdfe057efe Use ol.projection.identityTransform instead of goog.functions.identity 2013-05-06 10:21:24 +02:00
Tom Payne
331a5260c9 Merge pull request #679 from twpayne/rename-create-empty-extent
Rename ol.extent.createEmptyExtent to ol.extent.createEmpty
2013-05-01 03:45:51 -07:00
Tom Payne
b070b572d0 Rename ol.extent.createEmptyExtent to ol.extent.createEmpty 2013-05-01 12:36:54 +02:00
Tom Payne
70fc6879db Merge pull request #676 from twpayne/testing-clean-ups
Testing clean-ups
2013-05-01 03:25:09 -07:00
Tom Payne
a9b5f003e5 Merge pull request #677 from twpayne/improve-type-checking
Improve type checking
2013-04-30 15:55:34 -07:00
Tim Schaub
c1ddc55a12 Merge pull request #678 from tschaub/once
Rename onOnce to once
2013-04-30 15:10:47 -07:00
Tim Schaub
ffe9105891 Rename onOnce to once (see #678) 2013-04-30 14:58:39 -06:00
Tom Payne
1ab9de8b2c Improve type checking in ol.View2D 2013-04-30 22:00:22 +02:00
Tom Payne
0541053fa9 Improve type checking in ol.TileUrlFunction 2013-04-30 22:00:22 +02:00
Tom Payne
0e69af847e Improve type checking in ol.source.WMTS 2013-04-30 22:00:22 +02:00
Tom Payne
6e1f049456 Improve type checking in ol.source.StaticImage 2013-04-30 22:00:22 +02:00
Tom Payne
65f891a30d Improve type checking in ol.source.BingMaps 2013-04-30 22:00:22 +02:00
Tom Payne
fe9fee1609 Improve type checking in ol.RotationConstraint 2013-04-30 22:00:22 +02:00
Tom Payne
bd9d723315 Improve type checking in ol.ResolutionConstraint 2013-04-30 22:00:22 +02:00
Tom Payne
2690410cbe Improve type checking in ol.renderer.Layer 2013-04-30 22:00:22 +02:00
Tom Payne
070c286c54 Improve type checking in ol.ImageUrlFunction 2013-04-30 22:00:21 +02:00
Tom Payne
539529af59 Improve type checking in ol.coordinate 2013-04-30 21:29:56 +02:00
Tom Payne
d2979fc4ff Improve type checking in ol.animation 2013-04-30 21:29:10 +02:00
Tom Payne
f0df0d7bf2 Display test errors in Chrome's console, thanks @Turbo87 2013-04-30 18:44:09 +02:00
Tom Payne
984121e095 Remove Assertion#equalArray 2013-04-30 18:22:16 +02:00
Tom Payne
efccede678 Use eql instead of equalArray 2013-04-30 18:21:58 +02:00
Tom Payne
fcc079a5f2 Extend expect.js's eql to handle NaNs 2013-04-30 18:20:34 +02:00
Tom Payne
c012afdbae Remove unused Assertion#intersect 2013-04-30 18:08:24 +02:00
Tom Payne
59a4155651 Merge pull request #665 from twpayne/fix-firefox-dom-renderer
Prevent Bootstrap's setting of max-width from infecting map
2013-04-30 06:46:41 -07:00
Tom Payne
2d83003b64 Merge pull request #671 from twpayne/refactor-tile-functions
Refactor tile functions
2013-04-30 06:39:25 -07:00
Frédéric Junod
c3348d1734 Merge pull request #675 from fredj/object-listen
ol.Object.{on|onOnce|un} type can also be an array of string
2013-04-30 06:35:54 -07:00
ahocevar
8fb8a718c3 Merge pull request #674 from ahocevar/getfeatureinfo
Getting feature information for vector layers. r=@twpayne,@fredj
2013-04-30 06:12:47 -07:00
Frederic Junod
6366bd05b3 ol.Object.{on|onOnce|un} type can also be an array of string 2013-04-30 15:03:52 +02:00
ahocevar
00777de581 Do not check for listeners, as suggested by @fredj 2013-04-30 14:45:47 +02:00
ahocevar
d2c81db06a Info box instead of tooltip as suggested by @fredj 2013-04-30 14:15:39 +02:00
ahocevar
58c8b07ab5 Get hit candidates from RTree, then refine result
Now we get exact hits also for lines and polygons.
2013-04-30 13:34:12 +02:00
ahocevar
cc1b70c74b Giving the map a getFeatureInfoForPixel method
This method is an entry point for getting feature information.
Renderers can use a hit canvas or defer to a layer (source) to
get matching features for a pixel.

For now this is only implemented for vector layers, and it uses
a bbox query because we cannot refine the result because of
missing geometry intersection functions yet.
2013-04-30 13:32:16 +02:00
Éric Lemoine
a0340faa63 Merge pull request #673 from elemoine/closure-no-deps
Always set CLOSURE_NO_DEPS to true
2013-04-30 03:30:31 -07:00
Tom Payne
7ed672752d Merge pull request #668 from twpayne/strip-debug-classes
Strip debug classes when compiling
2013-04-30 03:30:05 -07:00
Tom Payne
daa975d01f Prevent user's setting of max-width from infecting map
Thanks @ThomasG77.
2013-04-30 12:26:31 +02:00
Tom Payne
66d95316f1 Merge pull request #666 from twpayne/remove-unused-css-classes
Remove unused CSS classes
2013-04-30 02:33:50 -07:00
Tom Payne
09d245c54b Promote createTileCoordTransform into base class 2013-04-30 11:01:57 +02:00
Tom Payne
7a8d29f5e0 Clip tiles to extent in tile coordinate space 2013-04-30 10:30:50 +02:00
Frédéric Junod
28fcbbf1fe Merge pull request #672 from fredj/export-update-size
Export ol.Map.updateSize
2013-04-30 00:41:08 -07:00
Éric Lemoine
1281d9987a Add and export View2D.calculateExtent 2013-04-30 09:39:09 +02:00
Éric Lemoine
aa5a571ab1 Always set CLOSURE_NO_DEPS to true 2013-04-30 09:25:09 +02:00
Frederic Junod
a723b4e215 Export ol.Map.updateSize 2013-04-30 09:04:35 +02:00
Tom Payne
6976fd96e3 Refactor tile functions
* Add support for minZoom in XYZ tile grids and tile sources
* Factor out common tile coordinate transforms
2013-04-29 19:54:26 +02:00
Tom Payne
1ff8df8936 Log WebGL shader and program errors 2013-04-29 12:51:16 +02:00
Tom Payne
37ef03c956 Re-enable logging 2013-04-29 12:50:37 +02:00
Tom Payne
2447f09128 Merge pull request #670 from twpayne/fix-glsl-escaping
Don't escape HTML characters in shader generation
2013-04-29 02:22:19 -07:00
Tom Payne
14da0cfd11 Don't escape HTML characters in shader generation
This tells Mustache not to escape <, >, &, and " characters.
2013-04-29 11:18:49 +02:00
Tom Payne
ca7081bde3 Merge pull request #669 from twpayne/more-animations
Minor changes to the animation example
2013-04-29 02:15:14 -07:00
Tom Payne
390cc17161 Cosmetic clean-ups 2013-04-28 20:01:44 +02:00
Tom Payne
b666fc49b7 Add spiral to Madrid animation example 2013-04-28 20:01:25 +02:00
Tom Payne
cfa29b0022 Strip debug classes when compiling 2013-04-28 18:00:24 +02:00
Tom Payne
5bfef2805d Merge pull request #663 from twpayne/render-error-tiles-as-empty
Render error tiles as empty
2013-04-28 08:21:51 -07:00
Tom Payne
65a2aef4ed Merge pull request #658 from twpayne/ol-object-events
ol.Object events
2013-04-28 08:20:29 -07:00
Tom Payne
ef915e1cd0 Remove unused CSS classes
The classes ol-layers, ol-layer-image, and ol-layer-tile are not used.
2013-04-28 16:40:17 +02:00
Frédéric Junod
01d06d0a2e Merge pull request #662 from fredj/canvas-draw-image-perf
Possible canvas performance enhancement
2013-04-26 07:40:00 -07:00
Frederic Junod
b3e5ac2717 Optimize canvas renderer.
Only use setTransform when it's needed (ie. when the view is rotated)
2013-04-26 13:32:18 +02:00
Tom Payne
3643908427 Only set center once in mobile full screen example 2013-04-25 19:41:03 +02:00
Tom Payne
e8109919e9 Add ol.Object#onOnce 2013-04-25 19:41:03 +02:00
Tom Payne
09fe09e42b Add ol.Object#unByKey 2013-04-25 19:41:03 +02:00
Tom Payne
fa2582a2f1 Return listener key from ol.Object#on 2013-04-25 19:41:02 +02:00
Tom Payne
c576b2a34e Treat image tiles with a zero dimension as empty 2013-04-25 15:17:24 +02:00
Tom Payne
d8a4b19b54 Render error tiles as empty 2013-04-25 14:49:55 +02:00
Tom Payne
e7eb07197e Merge pull request #655 from twpayne/scale-tile-queue
Scale tile queue according to number of sources
2013-04-25 05:44:46 -07:00
Frédéric Junod
4828835292 Merge pull request #653 from fredj/background-color
Remove BACKGROUND_COLOR from ol.Map
2013-04-25 02:43:00 -07:00
Frederic Junod
a1af290d18 Add a background image to the example maps
image from http://subtlepatterns.com/
2013-04-24 17:52:43 +02:00
Frederic Junod
4094ace04b Remove BACKGROUND_COLOR from ol.Map
Let the map be transparent, the background color can be set with CSS.
2013-04-24 17:38:25 +02:00
Frédéric Junod
cec47dbfc3 Merge pull request #652 from fredj/ol.feature-jsdoc
Update ol.Feature jsdoc
2013-04-24 05:31:38 -07:00
Frederic Junod
6b74dcf75b Update ol.Feature jsdoc 2013-04-24 12:35:24 +02:00
Tom Payne
9defa59d2d Merge pull request #651 from twpayne/full-screen-drag-rotate-and-zoom
Show off
2013-04-23 16:39:51 -07:00
Tom Payne
bd0512fea7 Show off 2013-04-24 01:38:03 +02:00
Tom Payne
2b48f03e0f Merge pull request #650 from twpayne/fix-out-of-scope-variables
Fix out of scope variables in ol.Map
2013-04-23 14:27:33 -07:00
Tom Payne
51905b54a2 Fix out of scope variables in ol.Map 2013-04-23 22:47:22 +02:00
Tom Payne
43f313cb18 Scale tile queue according to number of sources 2013-04-23 22:18:51 +02:00
Tom Payne
db1ab50938 Merge pull request #639 from twpayne/fix-webgl-map-renderer
Bing Maps example is broken
2013-04-23 08:08:19 -07:00
Tom Payne
1a72e59c54 Fix stray return 2013-04-23 16:42:39 +02:00
Tom Payne
ed5433d290 Merge pull request #649 from twpayne/fix-canvas-tiles-webgl
Use negative frame index as frame marker
2013-04-23 07:16:52 -07:00
Tom Payne
bedfa5e2d3 Merge pull request #640 from twpayne/interaction-options
Interaction options
2013-04-23 07:11:56 -07:00
Éric Lemoine
5842d771fe Merge pull request #646 from elemoine/target
Make it possible to set map target after map creation
2013-04-23 06:33:30 -07:00
Tom Payne
4da61e8ae9 Configure ol.interaction.TouchRotate with options 2013-04-23 15:31:16 +02:00
Tom Payne
9e8d20aee4 Re-use ol.Kinetic object 2013-04-23 15:31:16 +02:00
Tom Payne
2dff59a4d4 Configure ol.interaction.TouchPan with options 2013-04-23 15:31:16 +02:00
Tom Payne
a36b4a0466 Configure ol.interaction.DragPan with options 2013-04-23 15:31:16 +02:00
Tom Payne
3b9699fbc8 Configure ol.interaction.DragZoom with options 2013-04-23 15:31:16 +02:00
Tom Payne
48d4554317 Configure ol.interaction.KeyboardZoom with options 2013-04-23 15:31:16 +02:00
Tom Payne
cc33727fad Configure ol.interaction.KeyboardPan with options 2013-04-23 15:31:16 +02:00
Tom Payne
d1b2e4e483 Add drag rotate and zoom example 2013-04-23 15:31:16 +02:00
Tom Payne
808de79d16 Export ol.interaction.DragRotateAndZoom 2013-04-23 15:31:15 +02:00
Tom Payne
76a9f80545 Update ol.interaction.DragRotateAndZoom 2013-04-23 15:31:15 +02:00
Tom Payne
75ac8a4847 Export ol.interaction.condition.* 2013-04-23 15:31:15 +02:00
Tom Payne
8d29bf3c20 Add ol.interaction.condition.always 2013-04-23 15:31:15 +02:00
Tom Payne
d90f292c71 Initialize all properties in constructor 2013-04-23 15:31:15 +02:00
Tom Payne
003ac5536e Configure ol.interaction.DragRotate with options 2013-04-23 15:31:15 +02:00
Tom Payne
ef17d4f3b8 Rename DblClickZoom to DoubleClickZoom 2013-04-23 15:31:15 +02:00
Tom Payne
eb9f6c027b Avoid duplicate property lookup 2013-04-23 15:29:17 +02:00
Tom Payne
f2836ea111 Configure ol.interaction.DblClickZoom with options 2013-04-23 15:29:17 +02:00
Tom Payne
a4d8e1c4d8 Correct property in ol.interaction.DefaultsOptions 2013-04-23 15:29:17 +02:00
Tom Payne
baf8cc49a1 Avoid generating long lines in exports 2013-04-23 15:29:17 +02:00
Tom Payne
a85363ac03 Use negative frame index as frame marker to avoid conflict with goog.getUid 2013-04-23 15:22:49 +02:00
Tom Payne
c78602ba7a Merge pull request #644 from twpayne/remove-fragile-test
Remove fragile test
2013-04-23 05:56:38 -07:00
Éric Lemoine
d3d0d1e007 Test isElement instead of isDef (thanks @fredj) 2013-04-23 14:44:36 +02:00
Tom Payne
6751c2640d Remove fragile test
The user animation test is sensitive to small timing differences and
randomly fails.  This randomly breaks the integration tests.
2013-04-23 14:24:16 +02:00
Tom Payne
b2987d3054 Merge pull request #643 from twpayne/fix-dispose
Fix dispose
2013-04-23 05:20:05 -07:00
Frédéric Junod
b5076091fa Merge pull request #647 from fredj/wmts.projection
Change ol.source.WMTSOptions.projection type to ol.ProjectionLike
2013-04-23 05:15:47 -07:00
Éric Lemoine
29e69d3833 Simplify teleport example 2013-04-23 14:05:11 +02:00
Éric Lemoine
11efafffd8 Make setTarget accept a string 2013-04-23 14:04:46 +02:00
Frédéric Junod
e9a5eff753 Merge pull request #645 from fredj/ol.object.changed
Remove unused ol.Object.prototype.changed
2013-04-23 04:52:13 -07:00
Frederic Junod
29137b5ad1 Change ol.source.WMTSOptions.projection type to ol.ProjectionLike
Same type as base class.
2013-04-23 13:34:37 +02:00
Frederic Junod
e3bec11d2e Remove unused ol.Object.prototype.changed 2013-04-23 11:06:42 +02:00
Éric Lemoine
8e8804caf1 Add a teleport map example 2013-04-23 10:42:18 +02:00
Éric Lemoine
2dfe36b588 Map target may be undefined 2013-04-23 10:42:18 +02:00
Éric Lemoine
7547b50bd8 Add map property "target" 2013-04-23 10:42:18 +02:00
ahocevar
f681a99ce0 Merge pull request #638 from ahocevar/kml-options
KML rendering in advanced compilation mode. r=@bartvde
2013-04-23 00:09:26 -07:00
Bart van den Eijnden
334b2276cf Merge pull request #641 from bartvde/kmlexample
Add AsyncStringFeatureParser and use plain (r=@ahocevar)
2013-04-22 23:35:21 -07:00
ahocevar
8515e30ad8 Making the linter happy
... although jsdoc files are none of the linter's business.
2013-04-22 22:47:13 +02:00
ahocevar
c16b941909 Exporting KML parser options
This is necessary because application developers need to be able
to configure the KML parser.
2013-04-22 22:37:20 +02:00
Frédéric Junod
0421ad71e8 Merge pull request #642 from fredj/geolocation-export
Fix ol.Geolocation and ol.GeolocationOptions export
2013-04-22 12:42:37 -07:00
Tom Payne
e686eff886 Fix use of dispose in ol.renderer.webgl.ImageLayer tests 2013-04-22 17:16:44 +02:00
Tom Payne
6c369ae907 Fix use of dispose in ol.Map tests 2013-04-22 17:16:44 +02:00
Tom Payne
71e06761f0 Fix use of dispose in ol.layer.Vector tests 2013-04-22 17:16:44 +02:00
Tom Payne
3c541045bb Fix use of dispose in ol.layer.Layer tests 2013-04-22 17:16:43 +02:00
Tom Payne
744f72355b Fix use of dispose in ol.control.ZoomSlider tests 2013-04-22 17:16:30 +02:00
Tom Payne
c2e1623529 Fix use of dispose in ol.control tests 2013-04-22 17:16:22 +02:00
Tom Payne
d8357ae932 Fix use of dispose in ol.parser.KML 2013-04-22 17:14:31 +02:00
Frederic Junod
abbbe3d41b Fix ol.Geolocation and ol.GeolocationOptions export 2013-04-22 16:53:11 +02:00
Bart van den Eijnden
feb6c4c2d7 Add AsyncStringFeatureParser and use plain
XMLHttpRequest in the KML example

Since the content-type on github.io is application/octet-stream we need
to implement an Async string based parser interface in the KML parser.
Also use plain XmlHttpRequest in the example instead of jQuery Ajax since
the vector-features example also uses that.
2013-04-22 16:45:33 +02:00
Tom Payne
d45a63ee5c Merge pull request #637 from twpayne/remove-unused-functions
Remove unused functions
2013-04-22 01:40:04 -07:00
Tom Payne
bc3dc0fd74 Merge pull request #636 from twpayne/cache-length
Cache array length in ol.control.Attribution
2013-04-22 01:34:20 -07:00
Tom Payne
4c42f4e1ba Remove ol.PixelBounds 2013-04-22 10:14:22 +02:00
Tom Payne
ee2e448220 Remove ol.tilegrid.TileGrid#getPixelBoundsForTileCoordAndResolution 2013-04-22 10:11:13 +02:00
Tom Payne
8264343e54 Cache array length in ol.control.Attribution 2013-04-22 10:05:21 +02:00
Éric Lemoine
fe1475105a Merge pull request #635 from elemoine/handletilechange
Remove unused function
2013-04-21 13:49:31 -07:00
Éric Lemoine
9d901d26b2 Merge pull request #634 from elemoine/missing-description
Add missing description for @return tag
2013-04-21 13:49:03 -07:00
Éric Lemoine
a5519c2645 Add missing description for @return tag 2013-04-21 21:51:14 +02:00
Éric Lemoine
4f1b7c70b8 Remove unused function 2013-04-21 21:50:03 +02:00
Tom Payne
e6f354ce7c Merge pull request #632 from twpayne/mobile-full-screen-example
Mobile full screen example
2013-04-21 09:46:48 -07:00
Tom Payne
ddb295cc77 Add full screen example for mobile devices 2013-04-20 16:56:31 +02:00
Tom Payne
be7228f78e Add options to ol.Geolocation constructor 2013-04-20 16:55:26 +02:00
Tom Payne
945d2f6f5d Merge pull request #631 from twpayne/dont-use-foreach-in-loops
Don't use forEach in loops
2013-04-20 03:02:13 -07:00
Tom Payne
ac557d4eca Merge pull request #567 from twpayne/no-events-in-renderers
No events in renderers
2013-04-20 02:52:32 -07:00
Tom Payne
b2cc0c9bd8 Use ii instead of len for array length cache for consistency 2013-04-20 11:34:49 +02:00
Tom Payne
c48b9c5118 Cache array length in ol.TileRange 2013-04-20 11:34:48 +02:00
Tom Payne
ac489c6938 Cache array length in ol.structs.Buffer 2013-04-20 11:34:48 +02:00
Tom Payne
fb0f1fb209 Cache array length in layer renderer 2013-04-20 11:34:48 +02:00
Tom Payne
879d9758c0 Cache array length in WebGL renderer 2013-04-20 11:34:48 +02:00
Tom Payne
72a83b99b7 Cache array length in DOM renderer 2013-04-20 11:34:48 +02:00
Tom Payne
68440e7e0f Cache array length in canvas renderer 2013-04-20 11:34:39 +02:00
Tom Payne
e9b0e2b0e8 Cache array length in ol.Map 2013-04-20 11:27:55 +02:00
Tom Payne
332fd250b4 Cache array length in ol.Collection 2013-04-20 11:27:44 +02:00
Tom Payne
f047e5f6bd Cache array length in ol.Attribution 2013-04-20 11:27:32 +02:00
Tom Payne
7979726327 Avoid creating an ol.Size object 2013-04-19 20:52:40 +02:00
Tom Payne
d964bbc605 Use for loop instead of forEach in WebGL tile layer renderer 2013-04-19 20:41:54 +02:00
Tom Payne
f5611d6cd6 Use for loop instead of forEach in WebGL map renderer 2013-04-19 20:29:24 +02:00
Tom Payne
388e530420 Use for loop instead of forEach in DOM map renderer 2013-04-19 20:22:20 +02:00
Tom Payne
fe5c8a97d4 Add ol.renderer.Map#getLayerRendererByKey 2013-04-19 20:22:01 +02:00
Tom Payne
37d3f7b4c1 Use for loop instead of forEach in canvas map renderer 2013-04-19 20:12:11 +02:00
Tom Payne
72767f5d17 Merge pull request #555 from twpayne/extent-as-array
ol.Extent as Array.<number>
2013-04-19 08:41:19 -07:00
Tom Payne
965776160f Merge pull request #569 from twpayne/define-properties-in-constructor
Define properties in constructor
2013-04-19 01:21:34 -07:00
Tom Payne
a642868cfa Port examples to new extents 2013-04-19 10:03:36 +02:00
Tom Payne
f81658f542 Port parsers to new extents 2013-04-19 10:03:36 +02:00
Tom Payne
953f9c2e7a Port ol.geom to new extents 2013-04-19 10:03:36 +02:00
Tom Payne
01168e805a Port ol.filter.ExtentFilter to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
a413f3046a Port interactions to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
1d4eaf6824 Port ol.structs.RTree to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
305089d84f Port ol.renderer.webgl to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
10d1be695d Port ol.renderer.dom to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
465e24cf4e Port ol.renderer.canvas to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
aff9f5dbf9 Port ol.source.SingleImageWMS to new extents 2013-04-19 10:03:35 +02:00
Tom Payne
583564e484 Port ol.source.StaticImage to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
559e85bc76 Port ol.source.TiledWMS to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
9708fb4ea6 Port ol.source.WMTS to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
10354cf607 Port ol.source.WMS to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
f0c812482f Port ol.source.TileJSON to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
e868954d9c Port ol.source.TileSource to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
c2ff8347d9 Port ol.source.BingMaps to new extents 2013-04-19 10:03:34 +02:00
Tom Payne
e50253e316 Port ol.projection to new extents 2013-04-19 09:32:12 +02:00
Tom Payne
9773314803 Port ol.View2D to new extents 2013-04-19 09:32:12 +02:00
Tom Payne
7d21bd8133 Port ol.Map to new extents 2013-04-19 09:32:12 +02:00
Tom Payne
ca8647c808 Port ol.tilegrid to new extents 2013-04-19 09:32:12 +02:00
Tom Payne
b4f7259c7f Port function types to new extents 2013-04-19 09:32:12 +02:00
Tom Payne
16f70ba1a0 Replace ol.Extent and ol.Rectangle with Array.<number> 2013-04-19 09:32:11 +02:00
Tom Payne
0da8b0ae7f Don't inherit ol.PixelBounds from ol.Rectangle 2013-04-19 09:32:11 +02:00
Tom Payne
1ad7765f2f Don't derive ol.TileRange from ol.Rectangle 2013-04-19 09:32:11 +02:00
Tom Payne
7d610bde7b Initialize all properties in constructor in interactions 2013-04-18 21:02:53 +02:00
Tom Payne
b24c46dd19 Initialize all properties in constructor in ol.Geolocation 2013-04-18 21:02:18 +02:00
Tom Payne
43cfc2a4cd Initialize all properties in constructor in controls 2013-04-18 21:01:58 +02:00
Tom Payne
d291d23092 ol.renderer.Layer no longer needs to inherit from ol.Object 2013-04-18 18:59:22 +02:00
Tom Payne
85a95a0036 Call render and requestRenderFrame directly instead of using changed events 2013-04-18 18:58:59 +02:00
Tom Payne
f274cc99f6 Don't call event handlers in constructor 2013-04-18 16:35:06 +02:00
652 changed files with 53469 additions and 8716 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@
/examples/*.html.png
/examples/example-list.js
/examples/example-list.xml
/node_modules/

View File

@@ -1,5 +1,6 @@
before_install:
- "sudo pip install http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz"
- "sudo pip install regex"
- "git clone --depth=50 https://github.com/jsdoc3/jsdoc build/jsdoc"
- "git clone https://code.google.com/p/glsl-unit/ build/glsl-unit"

View File

@@ -2,8 +2,8 @@
[![Travis CI Status](https://secure.travis-ci.org/openlayers/ol3.png)](http://travis-ci.org/#!/openlayers/ol3)
Welcome to OpenLayers 3!
Welcome to [OpenLayers 3](http://ol3js.org/)!
To see OpenLayers 3 in action you can look at the live examples on
http://openlayers.github.io/ol3/master/examples/. If you want to contribute
to OpenLayers 3 please read the [CONTRIBUTING](CONTRIBUTING.md) page.
Check out the [hosted examples](http://ol3js.org/en/master/examples/) or poke around the evolving [API docs](http://ol3js.org/en/master/apidoc/).
Please see our guide on [contributing](CONTRIBUTING.md) if you're interested in getting involved.

View File

@@ -1,8 +1,7 @@
{
"opts": {
"recurse": true,
"template": "doc/template",
"tutorials": "doc/tutorials"
"template": "apidoc/template"
},
"tags": {
"allowUnknownTags": true
@@ -13,8 +12,8 @@
},
"plugins": [
"plugins/markdown",
"doc/plugins/inheritdoc",
"doc/plugins/exports"
"apidoc/plugins/inheritdoc",
"apidoc/plugins/exports"
],
"markdown": {
"parser": "gfm"

View File

@@ -1,12 +1,14 @@
Finding your way round
----------------------
Finding your way around
-----------------------
See the class list to the right and especially take a look at {@link ol.Map} and {@link ol.layer.Layer} because those are the central objects.
In general every use of OpenLayers starts by initializing a map, then adding the required layers. Controls and interactions can be added to change the behavior of the map.
Projections
-----------
A {@link ol.Projection} defines which point on earth is represented by a pair of coordinates. Coordinates within OpenLayers can be used in various projections where some common projections are always supported, others can be used via Proj4js.
A {@link ol.proj.Projection} defines which point on earth is represented by a pair of coordinates.
Coordinates within OpenLayers can be used in various projections where some common projections are always supported,
others can be used via [Proj4js](http://trac.osgeo.org/proj4js/).
Maps and Layers
---------------
@@ -14,4 +16,5 @@ A map in OpenLayers is essentially a staple of layers that is viewed from the to
Contributing
------------
See CONTRIBUTING.md for instructions on building and tesing OpenLayers. The file does also describe how to commit your changes to OpenLayers.
See [CONTRIBUTING.md](https://github.com/openlayers/ol3/blob/master/CONTRIBUTING.md) for instructions
on building and testing OpenLayers. The file does also describes how to commit your changes to OpenLayers.

View File

@@ -21,13 +21,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 API Documentation - <?js= title ?></a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="/"><img src="../resources/logo.png"> OpenLayers 3</a>
</div>
</div>
</div>
@@ -47,6 +41,5 @@ allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></
</footer>
<script> prettyPrint(); </script>
<script src="../resources/social-links.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,7 +1,5 @@
#!/usr/bin/env python
from collections import defaultdict
from itertools import ifilter
from operator import attrgetter
from optparse import OptionParser
import re
@@ -92,7 +90,7 @@ class Class(Exportable):
lines.append(' */\n')
lines.append('%s = function(options) {\n' % (self.export_name(),))
lines.append(' /** @type {%s} */\n' % (self.object_literal.name,))
lines.append(' var arg;\n');
lines.append(' var arg = /** @type {%s} */ (options);\n' % (self.object_literal.name,));
lines.append(' if (goog.isDefAndNotNull(options)) {\n')
# FIXME: we modify the user's options object
lines.append(''.join(
@@ -103,15 +101,13 @@ class Class(Exportable):
{'o': o, 'base': b.name, 'ctor': k.export_name(),
'extern': ol.extern_name()} \
for o, ol, k, b in self.nested_options()))
lines.append(' arg = {')
lines.extend(','.join('\n %s: options.%s' % (key, key) for key in sorted(self.object_literal.prop_types.keys())))
lines.append('\n };\n')
lines.append(' } else {\n')
lines.append(' arg = /** @type {%s} */ (options);\n' % (self.object_literal.name,))
lines.append(' }\n')
lines.extend('\n'.join(' arg.%s = options.%s;' % (key, key) for key in sorted(self.object_literal.prop_types.keys())))
lines.append('\n }\n')
lines.append(' goog.base(this, arg);\n')
lines.append('};\n')
lines.append('goog.inherits(%sExport, %s);\n' % (self.name, self.name))
lines.append('goog.inherits(\n')
lines.append(' %sExport,\n' % (self.name,));
lines.append(' %s);\n' % (self.name,));
lines.append('goog.exportSymbol(\n')
lines.append(' \'%s\',\n' % (self.name,))
lines.append(' %s);\n' % (self.export_name(),))
@@ -122,11 +118,84 @@ class Class(Exportable):
return '%sExport' % self.name
class Function(Exportable):
def __init__(self, name, object_literal, return_type, objects):
Exportable.__init__(self, name)
self.object_literal = object_literal
self.return_type = return_type
self.objects = objects
__repr__ = simplerepr
def property_object_literal(self, object_literal, prop):
prop_object_literal = None
types = object_literal.prop_types[prop].split('|')
for t in types:
if t in self.objects:
o = self.objects[t]
if isinstance(o, ObjectLiteral):
if prop_object_literal:
raise RuntimeError('Multiple "literal" types found for '
'option %s.%s: %s, %s.' %
(object_literal.name, prop,
prop_object_literal.name, o.name))
prop_object_literal = o
return prop_object_literal
def recursive_export(self, lines, prop, object_literal, local_var=None, depth=1):
indent = ' ' * depth
if not local_var:
local_var = prop.split('.')[-1]
lines.append('%s/** @type {%s} */\n' % (indent, object_literal.name))
lines.append('%svar %s =\n' % (indent, local_var))
lines.append('%s /** @type {%s} */\n' % (indent, object_literal.name))
lines.append('%s (%s);\n' % (indent, prop))
lines.append('%sif (goog.isDefAndNotNull(%s)) {\n' % (indent, prop))
for key in sorted(object_literal.prop_types.keys()):
prop_object_literal = self.property_object_literal(object_literal, key)
if prop_object_literal:
lv = self.recursive_export(lines, '%s.%s' % (prop, key),
prop_object_literal, depth=depth + 1)
lines.append('%s %s.%s =\n%s %s;\n' %
(indent, local_var, key, indent, lv))
else:
lines.append('%s %s.%s =\n%s %s.%s;\n' %
(indent, local_var, key, indent, prop, key))
lines.append('%s}\n' % (indent,))
return local_var
def export(self):
lines = []
local_var = 'arg'
lines.append('\n\n')
lines.append('/**\n')
lines.append(' * @param {%s} options Options.\n' % (self.object_literal.extern_name(),))
if self.return_type:
lines.append(' * @return {%s} Return value.\n' % (self.return_type,))
lines.append(' */\n')
lines.append('%s = function(options) {\n' % (self.export_name(),))
self.recursive_export(lines, 'options', self.object_literal,
local_var=local_var)
if self.return_type:
lines.append(' return %s(%s);\n' % (self.name, local_var))
else:
lines.append(' %s(arg);\n' % (self.name,))
lines.append('};\n')
lines.append('goog.exportSymbol(\n')
lines.append(' \'%s\',\n' % (self.name,))
lines.append(' %s);\n' % (self.export_name(),))
return ''.join(lines)
def export_name(self):
return '%sExport' % self.name
class ObjectLiteral(Exportable):
def __init__(self, name):
def __init__(self, name, objects):
Exportable.__init__(self, name)
self.prop_types = {}
self.objects = objects
__repr__ = simplerepr
@@ -140,7 +209,12 @@ class ObjectLiteral(Exportable):
for prop in sorted(self.prop_types.keys()):
lines.append('\n\n')
lines.append('/**\n')
lines.append(' * @type {%s}\n' % (self.prop_types[prop],))
prop_types = self.prop_types[prop].split('|')
for i, t in enumerate(prop_types):
if t in self.objects and isinstance(self.objects[t], ObjectLiteral):
prop_types[i] = self.objects[t].extern_name()
prop_types = '|'.join(prop_types)
lines.append(' * @type {%s}\n' % (prop_types,))
lines.append(' */\n')
lines.append('%s.prototype.%s;\n' % (self.extern_name(), prop))
return ''.join(lines)
@@ -223,10 +297,10 @@ def main(argv):
name = m.group('name')
if name in objects:
raise RuntimeError(line) # Name already defined
object_literal = ObjectLiteral(name)
object_literal = ObjectLiteral(name, objects)
objects[name] = object_literal
continue
m = re.match(r'\*\s*@property\s*{(?P<type>.*)}\s*(?P<prop>\S+)', line)
m = re.match(r'\*\s*@property\s*{(?P<type>.*?)}\s*(?P<prop>\S+)', line)
if m:
assert object_literal is not None
prop = m.group('prop')
@@ -264,6 +338,23 @@ def main(argv):
objects[name] = symbol
symbol.props.add(prop)
continue
m = re.match(r'@exportFunction\s+(?P<name>\S+)(?:\s+(?P<object_literal_name>\S+))?(?:\s+(?P<return_type>\S+))?\Z', line)
if m:
name = m.group('name')
if name in objects:
raise RuntimeError(line) # Name already defined
object_literal_name = m.group('object_literal_name')
if object_literal_name not in objects:
raise RuntimeError(line)
object_literal = objects[object_literal_name]
if not isinstance(object_literal, ObjectLiteral):
raise RuntimeError(line)
return_type = m.group('return_type')
function = Function(name, object_literal, return_type, objects)
objects[name] = function
# The require should only be for the namespace, not the function
requires.add('.'.join(name.split('.')[0:-1]))
continue
m = re.match(r'@exportSymbol\s+(?P<name>\S+)(?:\s+(?P<export_as>\S+))?\Z', line)
if m:
name = m.group('name')
@@ -276,7 +367,7 @@ def main(argv):
components = m.group('name').split('.')
if re.match(r'[A-Z]', components[-1]):
requires.add(name)
elif len(components) > 2:
elif len(components) > 1:
requires.add('.'.join(components[:-1]))
continue
raise RuntimeError(line)

View File

@@ -65,12 +65,19 @@
}
}
// CLOSURE_NO_DEPS has an effect in "raw" and "whitespace" modes only (i.e.
// when COMPILED is false). In "raw" mode we use our own deps file
// (ol-deps.js), so we set CLOSURE_NO_DEPS to true to prevent Google
// Library's base.js script to load deps.js. In "whitespace" mode
// no deps file is needed at all, yet base.js will attempt to load deps.js
// if CLOSURE_NO_DEPS is not set to true.
window.CLOSURE_NO_DEPS = true;
var scriptId = encodeURIComponent(scriptParams.id);
document.write('<link rel="stylesheet" href="../build/ol.css" type="text/css">');
if (mode != 'raw') {
document.write('<scr' + 'ipt type="text/javascript" src="../build/' + oljs + '"></scr' + 'ipt>');
} else {
window.CLOSURE_NO_DEPS = true; // we've got our own deps file
document.write('<scr' + 'ipt type="text/javascript" src="../closure-library/closure/goog/base.js"></scr' + 'ipt>');
document.write('<scr' + 'ipt type="text/javascript" src="../build/ol-deps.js"></scr' + 'ipt>');
document.write('<scr' + 'ipt type="text/javascript" src="' + scriptId + '-require.js"></scr' + 'ipt>');

186
build.py
View File

@@ -5,7 +5,7 @@ import gzip
import json
import os
import os.path
import re
import regex as re
import shutil
import sys
@@ -72,7 +72,10 @@ if sys.platform == 'win32':
else:
variables.GIT = 'git'
variables.GJSLINT = 'gjslint'
variables.JAVA = 'java'
if sys.platform == 'darwin':
variables.JAVA = '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java'
else:
variables.JAVA = 'java'
variables.JAR = 'jar'
variables.JSDOC = 'jsdoc'
variables.NODE = 'node'
@@ -142,8 +145,8 @@ SRC = [path
if path.endswith('.js')
if path not in SHADER_SRC]
PLOVR_JAR = 'build/plovr-eba786b34df9.jar'
PLOVR_JAR_MD5 = '20eac8ccc4578676511cf7ccbfc65100'
PLOVR_JAR = 'build/plovr-81ed862.jar'
PLOVR_JAR_MD5 = '1c752daaf11ad6220b298e7d2ee2b87d'
PROJ4JS = 'build/proj4js/lib/proj4js-combined.js'
PROJ4JS_ZIP = 'build/proj4js-1.1.0.zip'
@@ -164,7 +167,7 @@ virtual('default', 'build')
virtual('integration-test', 'lint', 'build', 'build-all',
'test', 'build-examples', 'check-examples', 'doc')
'test', 'build-examples', 'check-examples', 'apidoc')
virtual('build', 'build/ol.css', 'build/ol.js',
@@ -309,8 +312,11 @@ def examples_star_json(name, match):
'../externs/bingmaps.js',
'../externs/bootstrap.js',
'../externs/geojson.js',
'../externs/topojson.js',
'../externs/oli.js',
'../externs/proj4js.js',
'../externs/tilejson.js',
'../externs/closure-compiler.js',
],
})
with open(t.name, 'w') as f:
@@ -332,8 +338,7 @@ def examples_star_combined_js(name, match):
return Target(name, action=action, dependencies=dependencies)
@target('serve', PLOVR_JAR, INTERNAL_SRC, 'build/test/requireall.js',
'examples')
@target('serve', PLOVR_JAR, 'test-deps', 'examples')
def serve(t):
t.run('%(JAVA)s', '-jar', PLOVR_JAR, 'serve', 'buildcfg/ol.json',
'buildcfg/ol-all.json', EXAMPLES_JSON, 'buildcfg/test.json')
@@ -345,19 +350,35 @@ def serve_precommit(t):
'buildcfg/ol-all.json', 'buildcfg/test.json')
virtual('lint', 'build/lint-timestamp', 'build/check-requires-timestamp',
'build/check-whitespace-timestamp')
virtual('lint', 'build/lint-timestamp', 'build/lint-generated-timestamp',
'build/check-requires-timestamp', 'build/check-whitespace-timestamp')
@target('build/lint-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, EXAMPLES_SRC,
SPEC, precious=True)
@target('build/lint-timestamp', SRC, EXAMPLES_SRC, SPEC, precious=True)
def build_lint_src_timestamp(t):
t.run('%(GJSLINT)s',
'--jslint_error=all',
'--strict',
t.newer(t.dependencies))
t.touch()
@target('build/lint-generated-timestamp', INTERNAL_SRC, EXTERNAL_SRC,
precious=True)
def build_lint_generated_timestamp(t):
limited_doc_files = [
path
for path in ifind('externs', 'build/src/external/externs')
if path.endswith('.js')]
t.run('%(GJSLINT)s', '--strict', '--limited_doc_files=%s' %
(','.join(limited_doc_files),), t.newer(t.dependencies))
t.run('%(GJSLINT)s',
'--jslint_error=all',
# ignore error for max line length (for these auto-generated sources)
'--disable=110',
# for a complete list of error codes to allow, see
# http://closure-linter.googlecode.com/svn/trunk/closure_linter/errors.py
'--limited_doc_files=%s' % (','.join(limited_doc_files),),
'--strict',
t.newer(t.dependencies))
t.touch()
@@ -439,17 +460,23 @@ def build_check_requires_timestamp(t):
self.children = {}
def _build_re(self, key):
if len(self.children) == 1:
if key == '*':
assert len(self.children) == 0
# We want to match `.doIt` but not `.SomeClass` or `.more.stuff`
return '(?=\\.[a-z]\\w*\\b(?!\\.))'
elif len(self.children) == 1:
child_key, child = next(self.children.iteritems())
child_re = '\\.' + child._build_re(child_key)
child_re = child._build_re(child_key)
if child_key != '*':
child_re = '\\.' + child_re
if self.present:
return key + '(' + child_re + ')?'
else:
return key + child_re
elif self.children:
children_re = '(?:\\.(?:' + '|'.join(
self.children[k]._build_re(k)
for k in sorted(self.children.keys())) + '))'
children_re = '(?:' + '|'.join(
('\\.' if k != '*' else '') + self.children[k]._build_re(k)
for k in sorted(self.children.keys())) + ')'
if self.present:
return key + children_re + '?'
else:
@@ -467,7 +494,14 @@ def build_check_requires_timestamp(t):
if component not in node.children:
node.children[component] = Node()
node = node.children[component]
node.present = True
if component[0].islower():
# We've arrived at a namespace provide like `ol.foo`.
# In this case, we want to match uses like `ol.foo.doIt()` but
# not match things like `new ol.foo.SomeClass()`.
# For this purpose, we use the special wildcard key for the child.
node.children['*'] = Node()
else:
node.present = True
provide_res = [child.build_re(key)
for key, child in root.children.iteritems()]
missing_count = 0
@@ -477,6 +511,7 @@ def build_check_requires_timestamp(t):
provides = set()
requires = set()
uses = set()
uses_linenos = {}
for lineno, line in _strip_comments(open(filename)):
m = re.match(r'goog.provide\(\'(.*)\'\);', line)
if m:
@@ -491,6 +526,7 @@ def build_check_requires_timestamp(t):
m = provide_re.search(line)
if m:
uses.add(m.group())
uses_linenos[m.group()] = lineno
line = line[:m.start()] + line[m.end():]
break
else:
@@ -504,9 +540,10 @@ def build_check_requires_timestamp(t):
uses.discard('ol.renderer.%s.Map' % (m.group(1),))
missing_requires = uses - requires - provides
if missing_requires:
t.info('%s: missing goog.requires: %s', filename, ', '.join(
sorted(missing_requires)))
missing_count += len(missing_requires)
for missing_require in sorted(missing_requires):
t.info("%s:%d missing goog.require('%s')" %
(filename, uses_linenos[missing_require], missing_require))
missing_count += 1
if unused_count or missing_count:
t.error('%d unused goog.requires, %d missing goog.requires' %
(unused_count, missing_count))
@@ -554,29 +591,15 @@ def plovr_jar(t):
t.info('downloaded %r', t.name)
@target('gh-pages', 'host-examples', 'doc', phony=True)
def gh_pages(t):
with t.tempdir() as tempdir:
t.run('%(GIT)s', 'clone', '--branch', 'gh-pages',
'git@github.com:openlayers/ol3.git', tempdir)
with t.chdir(tempdir):
t.rm_rf('%(BRANCH)s')
t.cp_r('build/gh-pages/%(BRANCH)s', tempdir + '/%(BRANCH)s')
with t.chdir(tempdir):
t.run('%(GIT)s', 'add', '--all', '%(BRANCH)s')
t.run('%(GIT)s', 'commit', '--message', 'Updated')
t.run('%(GIT)s', 'push', 'origin', 'gh-pages')
virtual('doc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables))
virtual('apidoc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables))
@target('build/jsdoc-%(BRANCH)s-timestamp' % vars(variables), 'host-resources',
'build/src/external/src/exports.js', 'build/src/external/src/types.js',
SRC, SHADER_SRC, ifind('doc/template'))
SRC, SHADER_SRC, ifind('apidoc/template'))
def jsdoc_BRANCH_timestamp(t):
t.run('%(JSDOC)s', '-c', 'doc/conf.json', 'src', 'doc/index.md',
'-d', 'build/gh-pages/%(BRANCH)s/apidoc')
t.run('%(JSDOC)s', '-c', 'apidoc/conf.json', 'src', 'apidoc/index.md',
'-d', 'build/hosted/%(BRANCH)s/apidoc')
t.touch()
@@ -614,15 +637,15 @@ def split_example_file(example, dst_dir):
@target('host-resources', phony=True)
def host_resources(t):
resources_dir = 'build/gh-pages/%(BRANCH)s/resources'
resources_dir = 'build/hosted/%(BRANCH)s/resources'
t.rm_rf(resources_dir)
t.cp_r('resources', resources_dir)
@target('host-examples', 'build', 'host-resources', 'examples', phony=True)
def host_examples(t):
examples_dir = 'build/gh-pages/%(BRANCH)s/examples'
build_dir = 'build/gh-pages/%(BRANCH)s/build'
examples_dir = 'build/hosted/%(BRANCH)s/examples'
build_dir = 'build/hosted/%(BRANCH)s/build'
t.rm_rf(examples_dir)
t.makedirs(examples_dir)
t.rm_rf(build_dir)
@@ -637,30 +660,27 @@ def host_examples(t):
t.cp('examples/index.html', 'examples/example-list.js',
'examples/example-list.xml', 'examples/Jugl.js',
'examples/jquery.min.js', examples_dir)
t.rm_rf('build/gh-pages/%(BRANCH)s/closure-library')
t.makedirs('build/gh-pages/%(BRANCH)s/closure-library')
with t.chdir('build/gh-pages/%(BRANCH)s/closure-library'):
t.rm_rf('build/hosted/%(BRANCH)s/closure-library')
t.makedirs('build/hosted/%(BRANCH)s/closure-library')
with t.chdir('build/hosted/%(BRANCH)s/closure-library'):
t.run('%(JAR)s', 'xf', '../../../../' + PLOVR_JAR, 'closure')
t.run('%(JAR)s', 'xf', '../../../../' + PLOVR_JAR, 'third_party')
t.rm_rf('build/gh-pages/%(BRANCH)s/ol')
t.makedirs('build/gh-pages/%(BRANCH)s/ol')
t.cp_r('src/ol', 'build/gh-pages/%(BRANCH)s/ol/ol')
t.rm_rf('build/hosted/%(BRANCH)s/ol')
t.makedirs('build/hosted/%(BRANCH)s/ol')
t.cp_r('src/ol', 'build/hosted/%(BRANCH)s/ol/ol')
t.run('%(PYTHON)s', 'bin/closure/depswriter.py',
'--root_with_prefix', 'src ../../../ol',
'--root', 'build/gh-pages/%(BRANCH)s/closure-library/closure/goog',
'--root_with_prefix', 'build/gh-pages/%(BRANCH)s/closure-library/'
'--root', 'build/hosted/%(BRANCH)s/closure-library/closure/goog',
'--root_with_prefix', 'build/hosted/%(BRANCH)s/closure-library/'
'third_party ../../third_party',
'--output_file', 'build/gh-pages/%(BRANCH)s/build/ol-deps.js')
'--output_file', 'build/hosted/%(BRANCH)s/build/ol-deps.js')
@target('check-examples', 'host-examples', phony=True)
def check_examples(t):
examples = ['build/gh-pages/%(BRANCH)s/' + e for e in EXAMPLES]
examples = ['build/hosted/%(BRANCH)s/' + e for e in EXAMPLES]
all_examples = \
[e + '?mode=raw' for e in examples] + \
[e + '?mode=whitespace' for e in examples] + \
[e + '?mode=simple' for e in examples] + \
examples
[e + '?mode=advanced' for e in examples]
for example in all_examples:
t.run('%(PHANTOMJS)s', 'bin/check-example.js', example)
@@ -682,9 +702,12 @@ def proj4js_zip(t):
t.info('downloaded %r', t.name)
@target('test', INTERNAL_SRC, PROJ4JS, 'build/test/requireall.js', phony=True)
virtual('test-deps', INTERNAL_SRC, PROJ4JS, 'build/test/requireall.js')
@target('test', 'test-deps', phony=True)
def test(t):
t.run('%(PHANTOMJS)s', 'test/mocha-phantomjs.coffee', 'test/ol.html')
t.run('%(PHANTOMJS)s', 'test/mocha-phantomjs.js', 'test/ol.html')
@target('fixme', phony=True)
@@ -732,5 +755,50 @@ def check_dependencies(t):
print 'For certain targets all above programs need to be present.'
@target('help')
def display_help(t):
print '''
build.py - The OpenLayers 3 build script.
Usage:
./build.py [options] [target] (on Unix-based machines)
<python-executable.exe> build.py [options] [target] (on Windows machines)
There is one option:
-c - Cleans up the repository from previous builds.
The most common targets are:
serve - Serves files through plovr, usually on port 9810.
lint - Runs gjslint on all sourcefiles to enforce specific syntax.
build - Builds singlefile versions of OpenLayers JavaScript and
CSS. This is also the default build target which runs when
no target is specified.
test - Runs the testsuite and displays the results.
check - Runs the lint-target, builds some OpenLayers files, and
then runs test. Many developers call this target often
while working on the code.
help - Shows this help.
Other less frequently used targets are:
apidoc - Builds the API-Documentation using JSDoc3.
integration-test - Builds all examples in various modes and usually tales a
long time to finish. This target calls the following
targets: lint, build, build-all, test, build-examples,
check-examples and apidoc.
reallyclean - Remove untracked files from the repository.
checkdeps - Checks whether all required development software is
installed on your machine.
fixme - Will print a list of parts of the code that are marked
with either TODO or FIXME.
todo - is an alias for the fixme-target
plovr - Fetches the required plovr.jar. Usually called by other
targets that depend on plovr.
If no target is given, the build-target will be executed.
The above list is not complete, please see the sourceode for not-mentioned and
only seldomly called targets.
'''
if __name__ == '__main__':
main()

View File

@@ -42,19 +42,66 @@
"//json.js",
"../externs/bingmaps.js",
"../externs/geojson.js",
"../externs/topojson.js",
"../externs/oli.js",
"../externs/proj4js.js",
"../externs/tilejson.js"
"../externs/tilejson.js",
"../externs/closure-compiler.js"
],
"level": "VERBOSE",
"mode": "ADVANCED",
"name-suffixes-to-strip": [
"logger",
"logger_"
],
"paths": [
"../build/src/internal/src",
"../src"
],
"treat-warnings-as-errors": false
"treat-warnings-as-errors": false,
"type-prefixes-to-strip": [
"goog.asserts",
"goog.debug.Console",
"goog.debug.DebugWindow",
"goog.debug.DevCss",
"goog.debug.DivConsole",
"goog.debug.EntryPointMonitor",
"goog.debug.ErrorHandler",
"goog.debug.ErrorReporter",
"goog.debug.FancyWindow",
"goog.debug.Formatter",
"goog.debug.FpsDisplay",
"goog.debug.GcDiagnostics",
"goog.debug.HtmlFormatter",
"goog.debug.LogBuffer",
"goog.debug.LogManager",
"goog.debug.LogRecord",
"goog.debug.Logger",
"goog.debug.RelativeTimeProvider",
"goog.debug.TextFormatter",
"goog.debug.Trace",
"goog.debug.catchErrors",
"goog.debug.deepExpose",
"goog.debug.enhanceError",
"goog.debug.entryPointRegistry",
"goog.debug.errorHandlerWeakDep",
"goog.debug.expose",
"goog.debug.exposeArray",
"goog.debug.exposeException",
"goog.debug.getFunctionName",
"goog.debug.getStacktrace",
"goog.debug.getStacktraceSimple",
"goog.debug.logRecordSerializer",
"goog.debug.makeWhitespaceVisible",
"goog.debug.normalizeErrorObject",
"goog.debug.reflect",
"goog.log"
]
}

View File

@@ -7,8 +7,11 @@
"../build/src/external/externs/types.js",
"../externs/bingmaps.js",
"../externs/geojson.js",
"../externs/topojson.js",
"../externs/oli.js",
"../externs/proj4js.js",
"../externs/tilejson.js"
"../externs/tilejson.js",
"../externs/closure-compiler.js"
],
"inherits": "base.json",

View File

@@ -16,8 +16,11 @@
"//json.js",
"../externs/bingmaps.js",
"../externs/geojson.js",
"../externs/topojson.js",
"../externs/oli.js",
"../externs/proj4js.js",
"../externs/tilejson.js"
"../externs/tilejson.js",
"../externs/closure-compiler.js"
],
"inherits": "ol.json",

View File

@@ -17,8 +17,11 @@
"//json.js",
"../externs/bingmaps.js",
"../externs/geojson.js",
"../externs/topojson.js",
"../externs/oli.js",
"../externs/proj4js.js",
"../externs/tilejson.js"
"../externs/tilejson.js",
"../externs/closure-compiler.js"
],
"inherits": "ol.json",

View File

@@ -17,8 +17,11 @@
"../build/src/external/externs/types.js",
"../externs/bingmaps.js",
"../externs/geojson.js",
"../externs/topojson.js",
"../externs/oli.js",
"../externs/proj4js.js",
"../externs/tilejson.js"
"../externs/tilejson.js",
"../externs/closure-compiler.js"
],
"inherits": "base.json",

View File

@@ -1,21 +1,27 @@
.ol-attribution {
position: absolute;
font-size: 10px;
text-align: right;
color: #eeeeee;
bottom: 0;
right: 0;
background: rgba(0,60,136,0.3);
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
padding: 2px 4px;
padding: 6px;
}
.ol-attribution a {
color: white;
text-decoration: none;
}
.ol-attribution ul {
margin: 0;
padding: 0;
font-size: 10px;
line-height: 12px;
}
.ol-attribution li {
display: inline;
list-style: none;
line-height: inherit;
}
.ol-attribution li:not(:last-child):after {
content: "\2003";
@@ -81,6 +87,13 @@ a.ol-full-screen-true:after {
display: inline;
list-style: none;
}
.ol-mouse-position {
top: 8px;
right: 8px;
position: absolute;
}
.ol-scale-line {
background: rgba(0,60,136,0.3);
border-radius: 4px;
@@ -189,3 +202,43 @@ a.ol-full-screen-true:after {
height: 20px;
width: 24px;
}
.ol-zoom-extent {
position: absolute;
background: rgba(255,255,255,0.4);
border-radius: 4px;
left: 8px;
padding: 2px;
top: 65px;
}
@media print {
.ol-zoom-extent {
display: none;
}
}
.ol-zoom-extent a {
display: block;
margin: 1px;
padding: 0;
color: white;
font-size: 16px;
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
font-weight: bold;
text-decoration: none;
text-align: center;
height: 22px;
width: 22px;
background-color: rgba(0, 60, 136, 0.5);
border-radius: 2px;
}
.ol-touch .ol-zoom-extent a {
font-size: 20px;
height: 30px;
width: 30px;
line-height: 26px;
}
.ol-zoom-extent a:hover {
background-color: rgba(0, 60, 136, 0.7);
}
.ol-zoom-extent a:after {
content: "E";
}

12
doc/index.hbs Normal file
View File

@@ -0,0 +1,12 @@
---
title: Documentation
layout: doc.hbs
---
# Documentation
If you're eager to get your first OpenLayers 3 map on a page, dive into the [quick start](quickstart.html).
For a more in-depth overview of OpenLayers 3 core concepts, check out the [tutorials](tutorials/).
Find additional reference material in the [API docs](../apidoc).

132
doc/quickstart.hbs Normal file
View File

@@ -0,0 +1,132 @@
---
title: Quick Start
layout: doc.hbs
---
# Quick Start
## Put a map on a page
Below you'll find a complete working example. Create a new file, copy in the contents below, and open in a browser:
```xml
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="http://ol3js.org/en/{{ latest }}/build/ol.css" type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="http://ol3js.org/en/{{ latest }}/build/ol.js" type="text/javascript"></script>
<title>OpenLayers 3 example</title>
</head>
<body>
<h2>My Map</h2>
<div id="map" class="map"></div>
<script type="text/javascript">
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
})
],
view: new ol.View2D({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
});
</script>
</body>
</html>
```
## Understanding what is going on
To include a map a web page you will need 3 things:
1. Include OpenLayers
2. `<div>` map container
3. JavaScript to create a simple map
### Include OpenLayers
```xml
<script src="http://ol3js.org/en/{{ latest }}/build/ol.js" type="text/javascript"></script>
```
The first part is to include the JavaScript library. For the purpose of this tutorial, here we simply point to the ol3js.org website to get the whole library. In a production environment, we would build a custom version of the library including only the module needed for our application.
### `<div>` to contain the map
```xml
<div id="map" class="map"></div>
```
The map in the application is contained in a [`<div>` HTML element](http://en.wikipedia.org/wiki/Span_and_div). Through this `<div>` the map properties like width, height and border can be controlled through CSS. Here's the CSS element used to make the map 400 pixels high and as wide as the browser window.
```xml
<style>
.map {
height: 400px; width: 100%;
}
</style>
```
### JavaScript to create a simple map
```js
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
})
],
view: new ol.View2D({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
});
```
With this JavaScript code, a map object is created with a MapQuest Open Aerial layer zoomed on the African East coast. Let's break this down:
The following line creates an OpenLayers `Map` object. Just by itself, this does nothing since there's no layers or interaction attached to it.
```js
var map = new ol.Map({ ... });
```
To attach the map object to the `<div>`, the map object takes a `target` into arguments. The value is the `id` of the `<div>`:
```js
target: 'map'
```
The `layers: [ ... ]` array is used to define the list of layers available in the map. The first and only layer right now is a tiled layer:
```js
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
})
]
```
Layers in OpenLayers 3 are defined with a type (Image, Tile or Vector) which contains a source. The source is the protocol used to get the map tiles. You can consult the list of [available layer sources here](/en/{{ latest }}/apidoc/ol.source.html)
The next part of the `Map` object is the `View`. The view allow to specify the center, resolution, and rotation of the map. Right now, only `View2D` is supported, but other views should be available at some point. The simplest way to define a view is to define a center point and a zoom level. Note that zoom level 0 is zoomed out.
```js
view: new ol.View2D({
center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
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.

View File

@@ -0,0 +1,73 @@
---
title: Basic Concepts
layout: doc.hbs
---
# Basic Concepts
## Map
The core component of OpenLayers 3 is the map (`ol.Map`). It is rendered to a `target` container (e.g. a `div` element on the web page that contains the map). All map properties can either be configured at construction time, or by using setter methods, e.g. `setTarget()`.
```xml
<div id="map" style="width: 100%, height: 400px"></div>
<script>
var map = new ol.Map({target: 'map'});
</script>
```
## View
`ol.Map` is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of an `ol.View` instance - typically an `ol.View2D` for 2D maps. The reason for this abstraction is the idea of instantly switching e.g. between a 2D and a tilted 3D view, without the need to maintain two copies of the `layers`.
```js
map.setView(new ol.View2D({
center: [0, 0],
zoom: 2
}));
```
An `ol.View2D` also has a `projection`. The projection determines the coordinate system of the `center` and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units.
The `zoom` option is a convenient way to specify the map resolution. The available zoom levels are determined by `maxZoom` (default: 28), `zoomFactor` (default: 2) and `maxResolution` (default is calculated in such a way that the projection's validity extent fits in a 256x256 pixel tile). Starting at zoom level 0 with a resolution of `maxResolution` units per pixel, subsequent zoom levels are calculated by dividing the previous zoom level's resolution by `zoomFactor`, until zoom level `maxZoom` is reached.
## Source
To get remote data for a layer, OpenLayers 3 uses `ol.source.Source` subclasses. These are available for free and commercial map tile services like OpenStreetMap or Bing, for OGC sources like WMS or WMTS, and for vector data in formats like GeoJSON or KML.
```js
var osmSource = new ol.source.OSM();
```
## Layer
A layer is a visual representation of data from a `source`. OpenLayers 3 has three basic types of layers: `ol.layer.Tile`, `ol.layer.Image` and `ol.layer.Vector`.
`ol.layer.Tile` is for layer sources that provide pre-rendered, tiled images in grids that are organized by zoom levels for specific resolutions.
`ol.layer.Image` is for server rendered images that are available for arbitrary extents and resolutions.
`ol.layer.Vector` is for vector data that is rendered client-side.
```js
var osmLayer = new ol.layer.Tile({source: osmSource});
map.addLayer(osmLayer);
```
## Putting it all together
The above snippets can be conflated to a self contained map configuration with view and layers:
```xml
<div id="map" style="width: 100%, height: 400px"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View2D({
center: [0, 0],
zoom: 2
}),
target: 'map'
});
</script>
```

8
doc/tutorials/index.hbs Normal file
View File

@@ -0,0 +1,8 @@
---
title: Tutorials
layout: doc.hbs
---
# Tutorials
We'll be putting together a more comprehensive set of tutorials here. For now, you can take a look at the [basic concepts](concepts.html) tutorial. Stay tuned for more!

View File

@@ -1,3 +0,0 @@
{
"title": "OpenLayers 3 Architecture"
}

View File

@@ -1,274 +0,0 @@
CLASS HIERARCHY
===============
```
goog.math.Coordinate // Simple 2D point
|
+- TileCoord
goog.math.Box
|
+- Extent // The extent of a single object in two dimensions, projection not stored
|
+- TileBounds // A range of tiles in two dimensions, integer coordinates, z not stored
Projection
goog.events.EventTarget
|
+- MVCObject
| |
| +- Camera
| |
| +- Control
| | |
| | +- ?
| |
| +- Layer
| | |
| | +- TileLayer
| | | |
| | | +- TMSTileLayer
| | | |
| | | +- WMTSTileLayer
| | | |
| | | +- XYZTileLayer / OSMTileLayer
| | |
| | +- VectorLayer
| | |
| | +- ImageLayer
| |
| +- LayerRenderer
| |
| +- LayerRendererOptions
| |
| +- Map
| |
| +- MapRenderer
| | |
| | +- HTMLMapRenderer
| | |
| | +- WebGLMapRenderer
| |
| +- MVCArray
| | |
| | +- ControlArray
| | |
| | +- LayerViewArray
|
| +- TileQueue
|
+- Tile
```
Layer renderer hierarchy
------------------------
```
goog.events.EventTarget
|
+- MVCObject
|
+- LayerRenderer
|
+- SingleTileLayerRenderer
| |
| +- HTMLSingleTileLayerRenderer
| |
| +- WebGLSingleTileLayerRenderer
|
+- TileLayerRenderer
| |
| +- HTMLTileLayerRenderer
| |
| +- WebGLTileLayerRenderer
|
+- VectorLayerRenderer
| |
| +- HTMLVectorLayerRenderer
| | |
| | +- SVGHTMLVectorLayerRenderer
| | |
| | +- Canvas2DHTMLVectorLayerRenderer
| | |
| | +- VMLHTMLVectorLayerRenderer
| |
| +- WebGLVectorLayerRenderer
```
OBJECT PROPERTIES AND METHODS
=============================
Notation:
- `property type` property with type, trailing ? indicates unsure, getters and setters are assumed to exist.
- `f(args) -> type` function taking args returning type.
- `f(args) -> type = something` f is a trivial wrapper around something.
- `fires 'x'` fires events of type 'x'.
Principles:
- All non-trivial objects inherit from `MVCObject`.
- All non-trivial collections are either `MVCArrays` or a child class thereof.
- Resolutions are `Array.<number>`, infinitely scalable resources (e.g. vectore layers) have resolutions == null.
```
MVCObject
as Google Maps MVCObject
freeze()
unfreeze()
TileCoord
clone() -> TileCoord
getHash() -> number
TileBounds
forEachTileCoord(z, function(tileCoord))
Tile
tileCoord TileCoord
url string
state UNLOADED | LOADING | LOADED
fires 'loaded' // when loaded
fires 'aborted' // when loading is aborted
Camera
position goog.math.Coordinate
resolution number
rotation number
Layer
projections Array.<Projection>
extent Extent
getResolutions() -> Array.<number>|null
fires 'change' // when data changes
LayerArray
getResolutions() -> Array.<number>|null
getMaxResolution() = this.getResolutions()[0] | null
LayerRendererOptions
layer Layer
visible boolean
opacity number
brightness number
color number
hue number
saturation number
Map
projection Projection
renderer Renderer
layers LayerArray
addLayer(layer) = layers.push(layer)
getExtent() -> Extent
getMaxResolution() = layers.getMaxResolution()
TileGrid
resolutions Array.<number>
extent ol.Extent
xEast boolean
ySouth boolean
origin(s) Coord|Array.<Coord>
tileSize goog.math.Size
forEachTileCoordChild(tileCoord, function(z, TileBounds))
forEachTileCoordParent(tileCoord, function(z, TileBounds))
getExtentTileBounds(z, extent) -> TileBounds
getTileCoord(coordinate) -> TileCoord
getTileCoordCenter(tileCoord) -> goog.math.Coordinate
getTileCoordExtent(tileCoord) -> ol.Extent
getTileCoordResolution(tileCoord) -> number
getZForResolution(resolution) -> number
TileLayer
tileGrid TileGrid
tileUrl function(tileCoord) -> string
getTileCoordUrl(tileCoord) -> string = this.tileUrl(tileCoord)
TileQueue
camera Camera // or maybe MVCArray.<Camera> ?
getTileCoordPriority(tileCoord) -> number // private
enqueueTile(Tile)
VectorLayer
forEachFeature(resolution, extent, projection, function(Feature))
Renderer
target HTMLDivElement
map Map
camera Camera
getCapabilities() -> Array.<string> // maybe ?
```
Questions:
- Store tile layer extent in TileLayer or in TileGrid? (not clear)
Two concepts: tile coordinate system range and and available data extent.
TileGrid extent is range (or validity extent) of the tile coordinate system.
TileLayer extent is the available data extent. A particular TileGrid may range
from 0,0 to 10,10. My cache may conform to that grid but I may only have tiles
ranging from 2,2 to 8,8. When you need to wrap multiple worlds, you pay
attention to the TileGrid extent. When you need to decide whether or not to
bother requesting a tile, you pay attention to the TileLayer extent.
- Who determines "best" resolution? (static function?)
Todo: if tile layer extent stored in TileLayer rather than TileGrid then extent
will occasionally need to be passed to TileGrid functions for cropping.
DESIGN ASSERTIONS
=================
Map
- A map has a renderer (the map renderer).
- A map has a camera.
- Multiple maps can share the same camera.
- A map has a layer list.
Layer
- A layer can have multiple projections (the supported projections).
- A layer advertizes the projections it supports.
- A layer returns no data if asked data for an unsupported projection.
LayerRendererOptions
- A layer renderer options object stores view-related states for a layer.
- Options include visibility, opacity, saturation, hue, etc.
- A layer renderer options object has a layer.
- Multiple layer renderer options can share the same layer.
- In other words a layer can be viewed in different manners.
Renderer
- The map renderer responds to events.
- The map renderer receives events from the camera.
- The map renderer creates layer renderers.
Control
- A control may listen to map events.
- A control may listen to camera events.
- A map navigation control acts on the camera.
MVC
- Types can be described in MVC terms.
- Models don't know what rendering means.
- Maps are models.
- Layers are models.
- Layer views are models (sorry!).
- Cameras are models.
- Layer lists are collections.
- Renderers are views.
- Controls are views or controllers or both.
- An attribution control is a view.
- A map navigation control is a controller.
- A zoom slider control is both a view and a controller.

60
examples/accessible.html Normal file
View File

@@ -0,0 +1,60 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Accessibility example</title>
<style>
a.accesskey {
color: #FFFFFF;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<a class="accesskey" onclick="document.getElementById('map').focus(); return false;" accesskey="1" href="">Go to map</a>
<div id="map" class="map" tabindex="0"></div>
<a class="zoom" accesskey="i" href="javascript: void map.getView().setZoom(map.getView().getZoom() + 1);">Zoom in</a>
<a class="zoom" accesskey="o" href="javascript: void map.getView().setZoom(map.getView().getZoom() - 1);">Zoom out</a>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Accessibility example</h4>
<p id="shortdesc">Example of an accessible map.</p>
<div id="docs">
<p>This page's <code>map</code> element has its <code>tabindex</code> attribute set to <code>"0"</code>. That makes is focusable. To focus the map element you can either navigate to it using the "tab" key, or use the <a href="http://en.wikipedia.org/wiki/Access_key">Access Key</a> "1" (alt+1 or ctrl+alt+1) which provides a direct access. When the <code>map</code> element is focused the + and - keys can be used to zoom in and out, and the arrow keys can be used to pan.</p>
<p>When clicked the "Zoom in" and "Zoom out" links below the map zoom the map in and out, respectively. You can navigate to the links using the "tab" key, and press the "enter" key to trigger the zooming action. The Access Keys "i" and "o" can also be used, as a direct access to the actions of "Zoom in" and "Zoom out" links.</p>
<p>See the source of the page to see how this done.</p>
</div>
<div id="tags">accessibility, tabindex</div>
</div>
</div>
</div>
<script src="loader.js?id=accessible" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

20
examples/accessible.js Normal file
View File

@@ -0,0 +1,20 @@
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -30,22 +25,27 @@
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<button id="rotate-left"><i class="icon-arrow-left"></i></button>
<button>Rotate</button>
<button id="rotate-right"><i class="icon-arrow-right"></i></button>
</div>
<button id="pan-to-london">Pan to London</button>
<button id="elastic-to-moscow">Elastic to Moscow</button>
<button id="bounce-to-istanbul">Bounce to Istanbul</button>
<button id="spin-to-rome">Spin to Rome</button>
<button id="fly-to-bern">Fly to Bern</button>
</div>
<div class="row-fluid">
<div class="span12">
<button id="rotate-left"><i class="icon-arrow-left"></i></button>
<button id="rotate-right"><i class="icon-arrow-right"></i></button>
<button id="pan-to-london">Pan to London</button>
<button id="elastic-to-moscow">Elastic to Moscow</button>
<button id="bounce-to-istanbul">Bounce to Istanbul</button>
<button id="spin-to-rome">Spin to Rome</button>
<button id="fly-to-bern">Fly to Bern</button>
<button id="spiral-to-madrid">Spiral to Madrid</button>
</div>
</div>
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Animation example</h4>
<p id="shortdesc">Example animations.</p>
<p id="shortdesc">Demonstrates animated pan, zoom, and rotation.</p>
<div id="docs">
<p>See the <a href="animation.js" target="_blank">animation.js source</a> to see how this is done.</p>
</div>
@@ -57,7 +57,7 @@
</div>
<script src="loader.js?id=animation" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -3,21 +3,17 @@ goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.animation');
goog.require('ol.easing');
goog.require('ol.layer.TileLayer');
goog.require('ol.projection');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
var london = ol.projection.transform(
[-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857');
var moscow = ol.projection.transform(
[37.6178, 55.7517], 'EPSG:4326', 'EPSG:3857');
var istanbul = ol.projection.transform(
[28.9744, 41.0128], 'EPSG:4326', 'EPSG:3857');
var rome = ol.projection.transform(
[12.5, 41.9], 'EPSG:4326', 'EPSG:3857');
var bern = ol.projection.transform(
[7.4458, 46.95], 'EPSG:4326', 'EPSG:3857');
var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857');
var moscow = ol.proj.transform([37.6178, 55.7517], 'EPSG:4326', 'EPSG:3857');
var istanbul = ol.proj.transform([28.9744, 41.0128], 'EPSG:4326', 'EPSG:3857');
var rome = ol.proj.transform([12.5, 41.9], 'EPSG:4326', 'EPSG:3857');
var bern = ol.proj.transform([7.4458, 46.95], 'EPSG:4326', 'EPSG:3857');
var madrid = ol.proj.transform([-3.683333, 40.4], 'EPSG:4326', 'EPSG:3857');
var view = new ol.View2D({
// the view's initial state
@@ -27,7 +23,7 @@ var view = new ol.View2D({
var map = new ol.Map({
layers: [
new ol.layer.TileLayer({
new ol.layer.Tile({
preload: 4,
source: new ol.source.OSM()
})
@@ -37,14 +33,13 @@ var map = new ol.Map({
view: view
});
var rotateLeft = document.getElementById('rotate-left');
rotateLeft.addEventListener('click', function() {
var rotateLeft = ol.animation.rotate({
duration: 2000,
rotation: -4 * Math.PI
});
map.addPreRenderFunction(rotateLeft);
map.beforeRender(rotateLeft);
}, false);
var rotateRight = document.getElementById('rotate-right');
rotateRight.addEventListener('click', function() {
@@ -52,7 +47,7 @@ rotateRight.addEventListener('click', function() {
duration: 2000,
rotation: 4 * Math.PI
});
map.addPreRenderFunction(rotateRight);
map.beforeRender(rotateRight);
}, false);
@@ -62,7 +57,7 @@ panToLondon.addEventListener('click', function() {
duration: 2000,
source: view.getCenter()
});
map.addPreRenderFunction(pan);
map.beforeRender(pan);
view.setCenter(london);
}, false);
@@ -73,7 +68,7 @@ elasticToMoscow.addEventListener('click', function() {
easing: ol.easing.elastic,
source: view.getCenter()
});
map.addPreRenderFunction(pan);
map.beforeRender(pan);
view.setCenter(moscow);
}, false);
@@ -84,7 +79,7 @@ bounceToIstanbul.addEventListener('click', function() {
easing: ol.easing.bounce,
source: view.getCenter()
});
map.addPreRenderFunction(pan);
map.beforeRender(pan);
view.setCenter(istanbul);
}, false);
@@ -102,7 +97,7 @@ spinToRome.addEventListener('click', function() {
rotation: 2 * Math.PI,
start: start
});
map.addPreRenderFunctions([pan, rotate]);
map.beforeRender(pan, rotate);
view.setCenter(rome);
}, false);
@@ -120,6 +115,29 @@ flyToBern.addEventListener('click', function() {
resolution: 4 * view.getResolution(),
start: start
});
map.addPreRenderFunctions([pan, bounce]);
map.beforeRender(pan, bounce);
view.setCenter(bern);
}, false);
var spiralToMadrid = document.getElementById('spiral-to-madrid');
spiralToMadrid.addEventListener('click', function() {
var duration = 2000;
var start = +new Date();
var pan = ol.animation.pan({
duration: duration,
source: view.getCenter(),
start: start
});
var bounce = ol.animation.bounce({
duration: duration,
resolution: 2 * view.getResolution(),
start: start
});
var rotate = ol.animation.rotate({
duration: duration,
rotation: -4 * Math.PI,
start: start
});
map.beforeRender(pan, bounce, rotate);
view.setCenter(madrid);
}, false);

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -37,9 +32,14 @@
<div class="span4">
<h4 id="title">Bind HTML input example</h4>
<p id="shortdesc">Bind an HTML input to an ol object.</p>
<p id="shortdesc">Demonstrates two-way binding of HTML input elements to OpenLayers objects.</p>
<div id="docs">
<p>See the <a href="bind-input.js" target="_blank">bind-input.js source</a> to see how this is done.</p>
<div id="no-webgl" class="alert alert-warning" style="display: none">
<h4>Warning!</h4>
A browser that supports <a href="http://get.webgl.org/">WebGL</a> is required to change the
<strong>hue</strong>, <strong>saturation</strong>, <strong>contrast</strong> and <strong>brightness</strong>.
</div>
</div>
<div id="tags">input, bind, openstreetmap</div>
</div>
@@ -54,13 +54,13 @@
<label>opacity</label>
<input id="opacity" type="range" min="0" max="1" step="0.01"/>
<label>hue</label>
<input id="hue" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<input id="hue" class="webgl" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
<label>saturation</label>
<input id="saturation" type="range" min="0" max="5" step="0.01"/>
<input id="saturation" class="webgl" type="range" min="0" max="5" step="0.01"/>
<label>contrast</label>
<input id="contrast" type="range" min="0" max="2" step="0.01"/>
<input id="contrast" class="webgl" type="range" min="0" max="2" step="0.01"/>
<label>brightness</label>
<input id="brightness" type="range" min="-1" max="1" step="0.01"/>
<input id="brightness" class="webgl" type="range" min="-1" max="1" step="0.01"/>
</fieldset>
</form>
</div>
@@ -71,7 +71,8 @@
<legend>View</legend>
<label>rotation</label>
<input id="rotation" type="range" min="-3.141592653589793" max="3.141592653589793" step="0.01"/>
</fieldset>
<label>resolution</label>
<input id="resolution" type="number" min="0" step="250"/>
</fieldset>
</form>
</div>
@@ -81,7 +82,7 @@
</div>
<script src="loader.js?id=bind-input" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -2,10 +2,24 @@ goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.dom.Input');
goog.require('ol.layer.TileLayer');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
goog.require('ol.webgl');
var layer = new ol.layer.TileLayer({
if (!ol.webgl.SUPPORTED) {
var inputs = document.getElementsByClassName('webgl');
for (var i = 0, len = inputs.length; i < len; i++) {
inputs[i].disabled = true;
}
var info = document.getElementById('no-webgl');
/**
* display warning message
*/
info.style.display = '';
}
var layer = new ol.layer.Tile({
source: new ol.source.OSM()
});
var map = new ol.Map({
@@ -22,20 +36,23 @@ var visible = new ol.dom.Input(document.getElementById('visible'));
visible.bindTo('checked', layer, 'visible');
var opacity = new ol.dom.Input(document.getElementById('opacity'));
opacity.bindTo('value', layer, 'opacity');
opacity.bindTo('valueAsNumber', layer, 'opacity');
var hue = new ol.dom.Input(document.getElementById('hue'));
hue.bindTo('value', layer, 'hue');
hue.bindTo('valueAsNumber', layer, 'hue');
var saturation = new ol.dom.Input(document.getElementById('saturation'));
saturation.bindTo('value', layer, 'saturation');
saturation.bindTo('valueAsNumber', layer, 'saturation');
var contrast = new ol.dom.Input(document.getElementById('contrast'));
contrast.bindTo('value', layer, 'contrast');
contrast.bindTo('valueAsNumber', layer, 'contrast');
var brightness = new ol.dom.Input(document.getElementById('brightness'));
brightness.bindTo('value', layer, 'brightness');
brightness.bindTo('valueAsNumber', layer, 'brightness');
var rotation = new ol.dom.Input(document.getElementById('rotation'));
rotation.bindTo('value', map.getView(), 'rotation');
rotation.bindTo('valueAsNumber', map.getView(), 'rotation');
var resolution = new ol.dom.Input(document.getElementById('resolution'));
resolution.bindTo('valueAsNumber', map.getView(), 'resolution');

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -41,7 +36,7 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Bing Maps example</h4>
<p id="shortdesc">Example of a Bing Maps layer.</p>
<div id="docs">
@@ -56,7 +51,7 @@
<script src="jquery.min.js" type="text/javascript"></script>
<script src="loader.js?id=bing-maps" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,19 +1,19 @@
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.projection');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.BingMaps');
var styles = ['Road', 'Aerial', 'AerialWithLabels'];
var layers = [];
for (var i = 0; i < styles.length; ++i) {
layers.push(new ol.layer.TileLayer({
layers.push(new ol.layer.Tile({
visible: false,
preload: Infinity,
source: new ol.source.BingMaps({
key: 'AlQLZ0-5yk301_ESrmNLma3LYxEKNSg7w-e_knuRfyYFtld-UFvXVs38NOulku3Q',
key: 'Ar33pRUvQOdESG8m_T15MUmNz__E1twPo42bFx9jvdDePhX0PNgAcEm44OVTS7tt',
style: styles[i]
})
}));
@@ -23,7 +23,7 @@ var map = new ol.Map({
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: ol.projection.transform([-123.1, 49.25], 'EPSG:4326', 'EPSG:3857'),
center: ol.proj.transform([-123.1, 49.25], 'EPSG:4326', 'EPSG:3857'),
zoom: 8
})
});

View File

@@ -4,23 +4,26 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Brightness/contrast example</title>
<style>
#reset-brightness {
min-width: 138px;
}
#reset-contrast {
min-width: 120px;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -30,6 +33,11 @@
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-error" 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="icon-plus"></i></button>
<button id="reset-brightness">Brightness</button>
@@ -45,7 +53,7 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Brightness/contrast example</h4>
<p id="shortdesc">Example of brightness/contrast control on the client (WebGL only).</p>
<div id="docs">
@@ -59,7 +67,7 @@
</div>
<script src="loader.js?id=brightness-contrast" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,46 +1,76 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuestOpenAerial');
goog.require('ol.webgl');
var layer = new ol.layer.TileLayer({
source: new ol.source.MapQuestOpenAerial()
});
function setResetBrightnessButtonHTML() {
resetBrightness.innerHTML = 'Brightness (' +
layer.getBrightness().toFixed(3) + ')';
}
var map = new ol.Map({
layers: [layer],
renderer: ol.RendererHint.WEBGL,
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
function setResetContrastButtonHTML() {
resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')';
}
var increaseBrightness = document.getElementById('increase-brightness');
increaseBrightness.addEventListener('click', function() {
layer.setBrightness(layer.getBrightness() + 0.125);
}, false);
var resetBrightness = document.getElementById('reset-brightness');
resetBrightness.addEventListener('click', function() {
layer.setBrightness(0);
}, false);
var decreaseBrightness = document.getElementById('decrease-brightness');
decreaseBrightness.addEventListener('click', function() {
layer.setBrightness(layer.getBrightness() - 0.125);
}, false);
if (!ol.webgl.SUPPORTED) {
var info = document.getElementById('no-webgl');
/**
* display error message
*/
info.style.display = '';
} else {
var layer = new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
});
var increaseContrast = document.getElementById('increase-contrast');
increaseContrast.addEventListener('click', function() {
layer.setContrast(layer.getContrast() + 0.125);
}, false);
var resetContrast = document.getElementById('reset-contrast');
resetContrast.addEventListener('click', function() {
layer.setContrast(1);
}, false);
var decreaseContrast = document.getElementById('decrease-contrast');
decreaseContrast.addEventListener('click', function() {
layer.setContrast(layer.getContrast() - 0.125);
}, false);
var map = new ol.Map({
layers: [layer],
renderer: ol.RendererHint.WEBGL,
target: 'map',
view: new ol.View2D({
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

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -35,10 +30,11 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Canvas tiles example</h4>
<p id="shortdesc">The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).</p>
<p id="shortdesc">Renders tiles with coordinates for debugging.</p>
<div id="docs">
<p>The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).</p>
<p>See the <a href="canvas-tiles.js" target="_blank">canvas-tiles.js source</a> to see how this is done.</p>
</div>
<div id="tags">layers, openstreetmap, canvas</div>
@@ -49,7 +45,7 @@
</div>
<script src="loader.js?id=canvas-tiles" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,20 +1,20 @@
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.projection');
goog.require('ol.source.DebugTileSource');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.OSM');
goog.require('ol.source.TileDebug');
goog.require('ol.tilegrid.XYZ');
var map = new ol.Map({
layers: [
new ol.layer.TileLayer({
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.TileLayer({
source: new ol.source.DebugTileSource({
new ol.layer.Tile({
source: new ol.source.TileDebug({
projection: 'EPSG:3857',
tileGrid: new ol.tilegrid.XYZ({
maxZoom: 22
@@ -25,7 +25,7 @@ var map = new ol.Map({
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: ol.projection.transform(
center: ol.proj.transform(
[-0.1275, 51.507222], 'EPSG:4326', 'EPSG:3857'),
zoom: 10
})

View File

@@ -0,0 +1,90 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<style type="text/css">
.rotate-north {
position: absolute;
top: 65px;
left: 8px;
background: rgba(255,255,255,0.4);
border-radius: 4px;
padding: 2px;
}
.ol-touch .rotate-north {
top: 80px;
}
.rotate-north a {
display: block;
color: white;
font-size: 16px;
font-family: 'Lucida Grande',Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif;
font-weight: bold;
margin: 1px;
text-decoration: none;
text-align: center;
border-radius: 2px;
height: 22px;
width: 22px;
background: rgba(0,60,136,0.5);
}
.ol-touch .rotate-north a {
font-size: 20px;
height: 30px;
width: 30px;
line-height: 26px;
}
.rotate-north a:hover {
background: rgba(0,60,136,0.7);
}
</style>
<title>ol3 custom controls example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Custom controls</h4>
<p id="shortdesc">This example shows how to create custom controls.</p>
<div id="docs">
<p>
This example creates a "rotate to north" button.
See the <a href="custom-controls.js" target="_blank">custom-controls.js
source</a> to see how this is done.
</p>
</div>
<div id="tags">
custom, control
</div>
</div>
</div>
</div>
<script src="loader.js?id=custom-controls" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,81 @@
goog.require('ol');
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.control');
goog.require('ol.control.Control');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
/**
* Define a namespace for the application.
*/
window.app = {};
var app = window.app;
//
// Define rotate to north control.
//
/**
* @constructor
* @extends {ol.control.Control}
* @param {Object=} opt_options Control options.
*/
app.RotateNorthControl = function(opt_options) {
var options = opt_options || {};
var anchor = document.createElement('a');
anchor.href = '#rotate-north';
anchor.innerHTML = 'N';
var this_ = this;
var handleRotateNorth = function(e) {
// prevent #rotate-north anchor from getting appended to the url
e.preventDefault();
this_.getMap().getView().getView2D().setRotation(0);
};
anchor.addEventListener('click', handleRotateNorth, false);
anchor.addEventListener('touchstart', handleRotateNorth, false);
var element = document.createElement('div');
element.className = 'rotate-north ol-unselectable';
element.appendChild(anchor);
ol.control.Control.call(this, {
element: element,
target: options.target
});
};
ol.inherits(app.RotateNorthControl, ol.control.Control);
//
// Create map, giving it a rotate to north control.
//
var map = new ol.Map({
controls: ol.control.defaults().extend([
new app.RotateNorthControl()
]),
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2,
rotation: 1
})
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1073
examples/data/gpx/yahoo.xml Normal file

File diff suppressed because it is too large Load Diff

BIN
examples/data/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,57 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Device-Orientation example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Device orientation example</h4>
<label class="checkbox" for="track">
<input id="track" type="checkbox"/>track changes
</label>
<p>&alpha; : <code id="alpha"></code></p>
<p>&beta; : <code id="beta"></code></p>
<p>&gamma; : <code id="gamma"></code></p>
<p>heading : <code id="heading"></code></p>
<p id="shortdesc">Listen to DeviceOrientation events</p>
<div id="docs">
<p>See the <a href="device-orientation.js" target="_blank">device-orientation.js source</a> to see how this is done.</p>
</div>
<div id="tags">orientation, openstreetmap</div>
</div>
</div>
</div>
<script src="loader.js?id=device-orientation" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,46 @@
goog.require('ol.DeviceOrientation');
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.dom.Input');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
var view = map.getView();
var deviceOrientation = new ol.DeviceOrientation();
var track = new ol.dom.Input(document.getElementById('track'));
track.bindTo('checked', deviceOrientation, 'tracking');
deviceOrientation.on('change', function(event) {
document.getElementById('alpha').innerHTML = event.target.getAlpha();
document.getElementById('beta').innerHTML = event.target.getBeta();
document.getElementById('gamma').innerHTML = event.target.getGamma();
document.getElementById('heading').innerHTML = event.target.getHeading();
});
// tilt the map
deviceOrientation.on(['change:beta', 'change:gamma'], function(event) {
var center = view.getCenter();
var resolution = view.getResolution();
var beta = event.target.getBeta() || 0;
var gamma = event.target.getGamma() || 0;
center[0] -= resolution * gamma * 25;
center[1] += resolution * beta * 25;
view.setCenter(center);
});

View File

@@ -0,0 +1,51 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Drag rotate and zoom example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Drag rotate and zoom example</h4>
<p id="shortdesc">A single interaction to drag, rotate, and zoom.</p>
<div id="docs">
<p><code>Shift</code> + Drag to rotate and zoom the map around its center.</p>
<p>See the <a href="drag-rotate-and-zoom.js" target="_blank">drag-rotate-and-zoom.js source</a> to see how this is done.</p>
</div>
<div id="tags">drag, rotate, zoom, interaction</div>
</div>
</div>
</div>
<script src="loader.js?id=drag-rotate-and-zoom" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,25 @@
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.interaction');
goog.require('ol.interaction.DragRotateAndZoom');
goog.require('ol.layer.Tile');
goog.require('ol.source.MapQuestOpenAerial');
var map = new ol.Map({
interactions: ol.interaction.defaults().extend([
new ol.interaction.DragRotateAndZoom()
]),
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
})
],
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -35,7 +30,7 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">EPSG:4326 example</h4>
<p id="shortdesc">Example of a map in EPSG:4326.</p>
<div id="docs">
@@ -49,7 +44,7 @@
</div>
<script src="loader.js?id=epsg-4326" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,16 +1,16 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.control');
goog.require('ol.control.ScaleLine');
goog.require('ol.control.ScaleLineUnits');
goog.require('ol.control.defaults');
goog.require('ol.layer.TileLayer');
goog.require('ol.source.TiledWMS');
goog.require('ol.layer.Tile');
goog.require('ol.source.TileWMS');
var layers = [
new ol.layer.TileLayer({
source: new ol.source.TiledWMS({
new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://vmap0.tiles.osgeo.org/wms/vmap0',
params: {
'VERSION': '1.1.1',
@@ -22,7 +22,7 @@ var layers = [
];
var map = new ol.Map({
controls: ol.control.defaults({}, [
controls: ol.control.defaults().extend([
new ol.control.ScaleLine({
units: ol.control.ScaleLineUnits.DEGREES
})

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -30,6 +25,10 @@
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-download" class="alert alert-error" style="display: none">
This example requires a browser that supports the
<a href="http://caniuse.com/#feat=download">link download</a> attribute.
</div>
<a id="export-jpeg" class="btn" download="map.jpeg"><i class="icon-download"></i> Export JPEG</a>
<a id="export-png" class="btn" download="map.png"><i class="icon-download"></i> Export PNG</a>
</div>
@@ -37,7 +36,7 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Export map example</h4>
<p id="shortdesc">Example of exporting a map as a JPEG or PNG image.</p>
<div id="docs">
@@ -51,7 +50,7 @@
</div>
<script src="loader.js?id=export-map" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,13 +1,13 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
var map = new ol.Map({
layers: [
new ol.layer.TileLayer({
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
@@ -20,11 +20,20 @@ var map = new ol.Map({
});
var exportJPEGElement = document.getElementById('export-jpeg');
exportJPEGElement.addEventListener('click', function(e) {
e.target.href = map.getRenderer().getCanvas().toDataURL('image/jpeg');
}, false);
var exportPNGElement = document.getElementById('export-png');
exportPNGElement.addEventListener('click', function(e) {
e.target.href = map.getRenderer().getCanvas().toDataURL('image/png');
}, false);
if ('download' in exportJPEGElement && 'download' in exportPNGElement) {
exportJPEGElement.addEventListener('click', function(e) {
e.target.href = map.getRenderer().getCanvas().toDataURL('image/jpeg');
}, false);
exportPNGElement.addEventListener('click', function(e) {
e.target.href = map.getRenderer().getCanvas().toDataURL('image/png');
}, false);
} else {
var info = document.getElementById('no-download');
/**
* display error message
*/
info.style.display = '';
}

View File

@@ -0,0 +1,63 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<style>
.map:-moz-full-screen {
height: 100%;
}
.map:-webkit-full-screen {
height: 100%;
}
.map:full-screen {
height: 100%;
}
</style>
<title>Full screen drag rotate and zoom example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Full screen drag rotate and zoom example</h4>
<p id="shortdesc">Example of drag rotate and zoom control with full screen effect.</p>
<div id="docs">
<p>Hold down <code>Shift</code> + drag to rotate and zoom. Click the button in the top right corner to go full screen. Then do the <code>Shift</code> + drag thing again.</p>
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
<p>See the <a href="full-screen-drag-rotate-and-zoom.js" target="_blank">full-screen-drag-rotate-and-zoom.js source</a> to see how this is done.</p>
</div>
<div id="tags">full-screen, drag, rotate, zoom, bing, bing-maps</div>
</div>
</div>
</div>
<script src="loader.js?id=full-screen-drag-rotate-and-zoom" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,35 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.control');
goog.require('ol.control.FullScreen');
goog.require('ol.interaction');
goog.require('ol.interaction.DragRotateAndZoom');
goog.require('ol.layer.Tile');
goog.require('ol.source.BingMaps');
var map = new ol.Map({
controls: ol.control.defaults().extend([
new ol.control.FullScreen()
]),
interactions: ol.interaction.defaults().extend([
new ol.interaction.DragRotateAndZoom()
]),
layers: [
new ol.layer.Tile({
source: new ol.source.BingMaps({
key: 'Ar33pRUvQOdESG8m_T15MUmNz__E1twPo42bFx9jvdDePhX0PNgAcEm44OVTS7tt',
style: 'Aerial'
})
})
],
// Use the canvas renderer because it's currently the fastest
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [-33519607, 5616436],
rotation: -Math.PI / 8,
zoom: 8
})
});

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -25,13 +26,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -46,11 +41,12 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Full screen control example</h4>
<p id="shortdesc">Example of a full screen control. Click the control in the top right corner to go full screen. Click it again to exit full screen.</p>
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
<p id="shortdesc">Example of a full screen control.</p>
<div id="docs">
<p>Click the control in the top right corner to go full screen. Click it again to exit full screen.</p>
<p>If there is no button on the map, your browser does not support the <a href="http://caniuse.com/#feat=fullscreen">Full Screen API</a>.</p>
<p>See the <a href="full-screen.js" target="_blank">full-screen.js source</a> to see how this is done.</p>
</div>
<div id="tags">full-screen, bing, bing-maps</div>
@@ -61,7 +57,7 @@
</div>
<script src="loader.js?id=full-screen" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,9 +1,9 @@
goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.control');
goog.require('ol.control.FullScreen');
goog.require('ol.control.defaults');
goog.require('ol.layer.TileLayer');
goog.require('ol.layer.Tile');
goog.require('ol.source.BingMaps');
@@ -13,13 +13,13 @@ var view = new ol.View2D({
});
var map = new ol.Map({
controls: ol.control.defaults({}, [
controls: ol.control.defaults().extend([
new ol.control.FullScreen()
]),
layers: [
new ol.layer.TileLayer({
new ol.layer.Tile({
source: new ol.source.BingMaps({
key: 'AlQLZ0-5yk301_ESrmNLma3LYxEKNSg7w-e_knuRfyYFtld-UFvXVs38NOulku3Q',
key: 'Ar33pRUvQOdESG8m_T15MUmNz__E1twPo42bFx9jvdDePhX0PNgAcEm44OVTS7tt',
style: 'Aerial'
})
})

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -12,6 +13,9 @@
font-size: 22px;
text-shadow: 2px 2px 3px #013;
}
.tooltip-inner {
white-space: nowrap;
}
</style>
<title>Geolocation example</title>
</head>
@@ -20,13 +24,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -41,24 +39,33 @@
<div class="row-fluid">
<div class="span4">
<div class="span8">
<h4 id="title">Geolocation example</h4>
<label class="checkbox" for="track">
<input id="track" type="checkbox"/>track position
</label>
<p>position accuracy : <code id="accuracy"></code></p>
<p>altitude : <code id="altitude"></code></p>
<p>altitude accuracy : <code id="altitudeAccuracy"></code></p>
<p>heading : <code id="heading"></code></p>
<p>speed : <code id="speed"></code></p>
<p id="shortdesc">Example of a geolocation map.</p>
<div id="docs">
<p>See the <a href="geolocation.js" target="_blank">geolocation.js source</a> to see how this is done.</p>
</div>
<button id="locate"><i class="icon-screenshot"></i> locate</button>
<div id="tags">geolocation, openstreetmap</div>
</div>
</div>
<div class="span4 pull-right">
<div id="info" class="alert alert-error" style="display: none;"></div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="loader.js?id=geolocation" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -3,13 +3,14 @@ goog.require('ol.Map');
goog.require('ol.Overlay');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.dom.Input');
goog.require('ol.layer.Tile');
goog.require('ol.source.OSM');
var map = new ol.Map({
layers: [
new ol.layer.TileLayer({
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
@@ -24,19 +25,31 @@ var map = new ol.Map({
var geolocation = new ol.Geolocation();
geolocation.bindTo('projection', map.getView());
var track = new ol.dom.Input(document.getElementById('track'));
track.bindTo('checked', geolocation, 'tracking');
geolocation.on('change', function() {
$('#accuracy').text(geolocation.getAccuracy() + ' [m]');
$('#altitude').text(geolocation.getAltitude() + ' [m]');
$('#altitudeAccuracy').text(geolocation.getAltitudeAccuracy() + ' [m]');
$('#heading').text(geolocation.getHeading() + ' [rad]');
$('#speed').text(geolocation.getSpeed() + ' [m/s]');
});
var marker = new ol.Overlay({
map: map,
element: /** @type {Element} */ ($('<i/>').addClass('icon-flag').get(0))
});
map.addOverlay(marker);
// bind the marker position to the device location.
marker.bindTo('position', geolocation);
geolocation.addEventListener('accuracy_changed', function() {
geolocation.on('change:accuracy', function() {
$(marker.getElement()).tooltip({
title: this.getAccuracy() + 'm from this point'
});
});
$('#locate').click(function() {
geolocation.setTracking(true);
geolocation.on('error', function(error) {
var info = document.getElementById('info');
info.innerHTML = error.message;
info.style.display = '';
});

View File

@@ -0,0 +1,55 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Get feature info example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span4">
<h4 id="title">GetFeatureInfo example</h4>
<p id="shortdesc">Example of a WMS layer and a vector layer, both configured to provide feature information on click.</p>
<div id="docs">
<p>See the <a href="getfeatureinfo.js" target="_blank">getfeatureinfo.js source</a> to see how this is done.</p>
</div>
<div id="tags">getfeatureinfo</div>
</div>
<div class="span4 offset4">
<div id="info" class="alert alert-success">
&nbsp;
</div>
</div>
</div>
</div>
<script src="loader.js?id=getfeatureinfo" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,56 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.GeoJSON');
goog.require('ol.source.TileWMS');
goog.require('ol.source.Vector');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var wms = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://demo.opengeo.org/geoserver/wms',
params: {'LAYERS': 'ne:ne'}
})
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.GeoJSON(),
url: 'data/countries.geojson'
}),
style: new ol.style.Style({
symbolizers: [
new ol.style.Stroke({
color: '#33cc66',
width: 2
})
]
}),
transformFeatureInfo: function(features) {
return features.length > 0 ?
features[0].getId() + ': ' + features[0].get('name') : '&nbsp;';
}
});
var map = new ol.Map({
layers: [wms, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 1
})
});
map.on('click', function(evt) {
map.getFeatureInfo({
pixel: evt.getPixel(),
success: function(featureInfoByLayer) {
document.getElementById('info').innerHTML = featureInfoByLayer.join('');
}
});
});

50
examples/gml.html Normal file
View File

@@ -0,0 +1,50 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>GML example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">GML example</h4>
<p id="shortdesc">Example of using the GML parser.</p>
<div id="docs">
<p>See the <a href="gml.js" target="_blank">gml.js source</a> to see how this is done.</p>
</div>
<div id="tags">GML</div>
</div>
</div>
</div>
<script src="loader.js?id=gml" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

43
examples/gml.js Normal file
View File

@@ -0,0 +1,43 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.ogc.GML_v3');
goog.require('ol.source.MapQuestOpenAerial');
goog.require('ol.source.Vector');
goog.require('ol.style.Fill');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var raster = new ol.layer.Tile({
source: new ol.source.MapQuestOpenAerial()
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.ogc.GML_v3(),
url: 'data/gml/topp-states-wfs.xml'
}),
style: new ol.style.Style({
symbolizers: [
new ol.style.Fill({
color: '#ffffff',
opacity: 0.25
}),
new ol.style.Stroke({
color: '#6666ff'
})
]
})
});
var map = new ol.Map({
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [-10997171, 4658434],
zoom: 4
})
});

54
examples/gpx.html Normal file
View File

@@ -0,0 +1,54 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>GPX example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
</div>
</div>
<div class="row-fluid">
<div class="span4">
<h4 id="title">GPX example</h4>
<p id="shortdesc">Example of using the GPX parser.</p>
<div id="docs">
<p>See the <a href="gpx.js" target="_blank">gpx.js source</a> to see how this is done.</p>
</div>
<div id="tags">GPX</div>
</div>
<div class="span4 offset4">
<div id="info" class="alert alert-success">
&nbsp;
</div>
</div>
</div>
</div>
<script src="loader.js?id=gpx" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

44
examples/gpx.js Normal file
View File

@@ -0,0 +1,44 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.GPX');
goog.require('ol.source.OSM');
goog.require('ol.source.Vector');
var raster = new ol.layer.Tile({
source: new ol.source.OSM()
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.GPX(),
url: 'data/gpx/yahoo.xml'
})
});
var map = new ol.Map({
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [-7916461.9312699, 5226343.9091441],
zoom: 11
})
});
map.on(['click', 'mousemove'], function(evt) {
map.getFeatures({
pixel: evt.getPixel(),
layers: [vector],
success: function(featuresByLayer) {
var features = featuresByLayer[0];
var info = [];
for (var i = 0, ii = features.length; i < ii; ++i) {
info.push(features[i].get('name') + ': ' + features[i].get('type'));
}
document.getElementById('info').innerHTML = info.join(', ') || '&nbsp;';
}
});
});

View File

@@ -4,23 +4,26 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Hue/saturation example</title>
<style>
#reset-hue {
min-width: 90px;
}
#reset-saturation {
min-width: 124px;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -30,6 +33,11 @@
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"></div>
<div id="no-webgl" class="alert alert-error" 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="icon-plus"></i></button>
<button id="reset-hue">Hue</button>
@@ -45,7 +53,7 @@
<div class="row-fluid">
<div class="span4">
<div class="span12">
<h4 id="title">Hue/saturation example</h4>
<p id="shortdesc">Example of hue/saturation control on the client (WebGL only).</p>
<div id="docs">
@@ -59,7 +67,7 @@
</div>
<script src="loader.js?id=hue-saturation" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,51 +1,80 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.projection');
goog.require('ol.layer.Tile');
goog.require('ol.proj');
goog.require('ol.source.BingMaps');
goog.require('ol.webgl');
var layer = new ol.layer.TileLayer({
source: new ol.source.BingMaps({
key: 'AlQLZ0-5yk301_ESrmNLma3LYxEKNSg7w-e_knuRfyYFtld-UFvXVs38NOulku3Q',
style: 'Aerial'
})
});
function setResetHueButtonHTML() {
resetHue.innerHTML = 'Hue (' + layer.getHue().toFixed(2) + ')';
}
var map = new ol.Map({
layers: [layer],
renderer: ol.RendererHint.WEBGL,
target: 'map',
view: new ol.View2D({
center: ol.projection.transform(
[-9.375, 51.483333], 'EPSG:4326', 'EPSG:3857'),
zoom: 15
})
});
function setResetSaturationButtonHTML() {
resetSaturation.innerHTML = 'Saturation (' +
layer.getSaturation().toFixed(2) + ')';
}
var increaseHue = document.getElementById('increase-hue');
increaseHue.addEventListener('click', function() {
layer.setHue(layer.getHue() + 0.25);
}, false);
var resetHue = document.getElementById('reset-hue');
resetHue.addEventListener('click', function() {
layer.setHue(0);
}, false);
var decreaseHue = document.getElementById('decrease-hue');
decreaseHue.addEventListener('click', function() {
layer.setHue(layer.getHue() - 0.25);
}, false);
if (!ol.webgl.SUPPORTED) {
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: 'Ar33pRUvQOdESG8m_T15MUmNz__E1twPo42bFx9jvdDePhX0PNgAcEm44OVTS7tt',
style: 'Aerial'
})
});
var increaseSaturation = document.getElementById('increase-saturation');
increaseSaturation.addEventListener('click', function() {
layer.setSaturation(layer.getSaturation() + 0.25);
}, false);
var resetSaturation = document.getElementById('reset-saturation');
resetSaturation.addEventListener('click', function() {
layer.setSaturation(1);
}, false);
var decreaseSaturation = document.getElementById('decrease-saturation');
decreaseSaturation.addEventListener('click', function() {
layer.setSaturation(layer.getSaturation() - 0.25);
}, false);
var map = new ol.Map({
layers: [layer],
renderer: ol.RendererHint.WEBGL,
target: 'map',
view: new ol.View2D({
center: ol.proj.transform([-9.375, 51.483333], 'EPSG:4326', 'EPSG:3857'),
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);
}

62
examples/icon.html Normal file
View File

@@ -0,0 +1,62 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Vector Icon Example</title>
<style>
#map {
position: relative;
}
#popup {
padding-bottom: 45px;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map">
<div id="popup"></div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Icon example</h4>
<p id="shortdesc">Example using an icon to symbolize a point.</p>
<div id="docs">
<p>See the <a href="icon.js" target="_blank">icon.js source</a> to see how this is done.</p>
</div>
<div id="tags">vector, style, icon, marker, popup</div>
</div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="loader.js?id=icon" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

92
examples/icon.js Normal file
View File

@@ -0,0 +1,92 @@
goog.require('ol.Map');
goog.require('ol.Overlay');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.GeoJSON');
goog.require('ol.source.TileJSON');
goog.require('ol.source.Vector');
goog.require('ol.style.Icon');
goog.require('ol.style.Style');
var raster = new ol.layer.Tile({
source: new ol.source.TileJSON({
url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
})
});
var data = {
type: 'FeatureCollection',
features: [{
type: 'Feature',
properties: {
name: 'Null Island',
population: 4000,
rainfall: 500
},
geometry: {
type: 'Point',
coordinates: [0, 0]
}
}]
};
var style = new ol.style.Style({
symbolizers: [
new ol.style.Icon({
url: 'data/icon.png',
yOffset: -22
})
]
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.GeoJSON(),
data: data
}),
style: style
});
var map = new ol.Map({
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 3
})
});
var element = document.getElementById('popup');
var popup = new ol.Overlay({
element: element
});
map.addOverlay(popup);
map.on('click', function(evt) {
map.getFeatures({
pixel: evt.getPixel(),
layers: [vector],
success: function(layerFeatures) {
var feature = layerFeatures[0][0];
if (feature) {
var geometry = feature.getGeometry();
var coord = geometry.getCoordinates();
popup.setPosition(coord);
$(element).popover({
'placement': 'top',
'html': true,
'content': feature.get('name')
});
$(element).popover('show');
} else {
$(element).popover('destroy');
}
}
});
});

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -19,6 +20,9 @@
.example:hover {
background-color: #ddd;
}
.navbar-search.pull-left {
padding: 5px;
}
::-webkit-scrollbar {
width: 8px;
@@ -174,17 +178,11 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
<form class="navbar-search pull-left">
<input name="q" type="text" id="keywords" class="search-query" placeholder="Search">
<span id="count"></span>
</form>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
</div>
</div>
</div>
@@ -208,8 +206,5 @@
</div>
</div>
<script src="../resources/social-links.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,75 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Earthquakes in KML</title>
<style>
#map {
position: relative;
}
#info {
position: absolute;
height: 1px;
width: 1px;
z-index: 100;
}
.tooltip.in {
opacity: 1;
filter: alpha(opacity=100);
}
.tooltip.top .tooltip-arrow {
border-top-color: white;
}
.tooltip-inner {
border: 2px solid white;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"><div id="info"></div></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Earthquakes in KML</h4>
<p id="shortdesc">Demonstrates the use of a Shape symbolizer to render earthquake locations.</p>
<div id="docs">
<p>
This example parses a KML file and renders the features as a vector layer. The layer is given a <code>ol.style.Style</code> that renders earthquake locations with a size relative to their magnitude. The style uses a <code>ol.style.Shape</code> symbolizer where the <code>size</code> comes from the <code>magnitude</code> attribute on the features.
</p>
<p>See the <a href="kml-earthquakes.js" target="_blank">kml-earthquakes.js source</a> to see how this is done.</p>
</div>
<div id="tags">KML, vector, style</div>
</div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="loader.js?id=kml-earthquakes" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -0,0 +1,83 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.expr');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.KML');
goog.require('ol.source.Stamen');
goog.require('ol.source.Vector');
goog.require('ol.style.Fill');
goog.require('ol.style.Shape');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var style = new ol.style.Style({
symbolizers: [
new ol.style.Shape({
size: ol.expr.parse('5 + 20 * (magnitude - 5)'),
fill: new ol.style.Fill({
color: '#ff9900',
opacity: 0.4
}),
stroke: new ol.style.Stroke({
color: '#ffcc00',
opacity: 0.2
})
})
]
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.KML({dimension: 2}),
url: 'data/kml/2012_Earthquakes_Mag5.kml'
}),
style: style
});
var raster = new ol.layer.Tile({
source: new ol.source.Stamen({
layer: 'toner'
})
});
var map = new ol.Map({
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
var info = $('#info');
info.tooltip({
animation: false,
trigger: 'manual'
});
map.on(['click', 'mousemove'], function(evt) {
var pixel = evt.getPixel();
info.css({
left: pixel[0] + 'px',
top: (pixel[1] - 15) + 'px'
});
map.getFeatures({
pixel: pixel,
layers: [vector],
success: function(layerFeatures) {
var feature = layerFeatures[0][0];
if (feature) {
info.tooltip('hide')
.attr('data-original-title', feature.get('name'))
.tooltip('fixTitle')
.tooltip('show');
} else {
info.tooltip('hide');
}
}
});
});

View File

@@ -0,0 +1,63 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<title>Timezones in KML</title>
<style>
#map {
position: relative;
}
#info {
position: absolute;
height: 1px;
width: 1px;
z-index: 100;
}
</style>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div id="map" class="map"><div id="info"></div></div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<h4 id="title">Timezones in KML</h4>
<p id="shortdesc">Demonstrates rendering timezones from KML.</p>
<div id="docs">
<p>This example parses a KML file and renders the features as a vector layer. The layer is given a <code>ol.style.Style</code> that fills timezones yellow with an opacity calculated based on the current offset to local noon.</p>
<p>See the <a href="kml-timezones.js" target="_blank">kml-timezones.js source</a> to see how this is done.</p>
</div>
<div id="tags">KML, vector, style</div>
</div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="../resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="loader.js?id=kml-timezones" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

105
examples/kml-timezones.js Normal file
View File

@@ -0,0 +1,105 @@
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.expr');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.KML');
goog.require('ol.source.Stamen');
goog.require('ol.source.Vector');
goog.require('ol.style.Fill');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
/**
* Register a function to be used in a symbolizer. Here we want the opacity
* of polygons to be based on the offset from local noon. For example, a
* timezone where it is currently noon would have an opacity of 0.75. And a
* timezone where it is currently midnight would have an opacity of 0. This
* doesn't account for daylight savings, so don't use it to plan your vacation.
*/
ol.expr.register('getOpacity', function() {
var feature = this;
var offset = 0;
var name = feature.get('name'); // e.g. GMT -08:30
var match = name.match(/([-+]\d{2}):(\d{2})$/);
if (match) {
var hours = parseInt(match[1], 10);
var minutes = parseInt(match[2], 10);
offset = 60 * hours + minutes;
}
var date = new Date();
var local = new Date(date.getTime() +
(date.getTimezoneOffset() + offset) * 60000);
// offset from local noon (in hours)
var delta = Math.abs(12 - local.getHours() + (local.getMinutes() / 60));
if (delta > 12) {
delta = 24 - delta;
}
return 0.75 * (1 - delta / 12);
});
var style = new ol.style.Style({
symbolizers: [
new ol.style.Fill({
color: '#ffff33',
opacity: ol.expr.parse('getOpacity()')
}),
new ol.style.Stroke({
color: '#ffffff'
})
]
});
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.KML({dimension: 2}),
url: 'data/kml/timezones.kml'
}),
style: style
});
var raster = new ol.layer.Tile({
source: new ol.source.Stamen({
layer: 'toner'
})
});
var map = new ol.Map({
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: [0, 0],
zoom: 2
})
});
var info = $('#info');
info.tooltip({
animation: false,
trigger: 'manual'
});
map.on(['click', 'mousemove'], function(evt) {
var pixel = evt.getPixel();
info.css({
left: pixel[0] + 'px',
top: (pixel[1] - 15) + 'px'
});
map.getFeatures({
pixel: pixel,
layers: [vector],
success: function(layerFeatures) {
var feature = layerFeatures[0][0];
if (feature) {
info.tooltip('hide')
.attr('data-original-title', feature.get('name'))
.tooltip('fixTitle')
.tooltip('show');
} else {
info.tooltip('hide');
}
}
});
});

View File

@@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../css/ol.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
@@ -14,13 +15,7 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./">OpenLayers 3 Examples</a>
<ul class="nav pull-right">
<li><iframe class="github-watch-button" src="http://ghbtns.com/github-btn.html?user=openlayers&repo=ol3&type=watch&count=true"
allowtransparency="true" frameborder="0" scrolling="0" height="20" width="90"></iframe></li>
<li><a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-hashtags="openlayers">&nbsp;</a></li>
<li><div class="g-plusone-wrapper"><div class="g-plusone" data-size="medium" data-annotation="none"></div></div></li>
</ul>
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
@@ -43,14 +38,18 @@
</div>
<div id="tags">KML</div>
</div>
<div class="span4 offset4">
<div id="info" class="alert alert-success">
&nbsp;
</div>
</div>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="loader.js?id=kml" type="text/javascript"></script>
<script src="../resources/social-links.js" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

View File

@@ -1,16 +1,14 @@
goog.require('ol.Collection');
goog.require('ol.Map');
goog.require('ol.RendererHint');
goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.parser.KML');
goog.require('ol.projection');
goog.require('ol.source.TiledWMS');
goog.require('ol.source.TileWMS');
goog.require('ol.source.Vector');
var raster = new ol.layer.TileLayer({
source: new ol.source.TiledWMS({
var raster = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://vmap0.tiles.osgeo.org/wms/vmap0',
crossOrigin: null,
params: {
@@ -21,30 +19,37 @@ var raster = new ol.layer.TileLayer({
})
});
var epsg4326 = ol.projection.get('EPSG:4326');
var vector = new ol.layer.Vector({
source: new ol.source.Vector({
projection: epsg4326
parser: new ol.parser.KML({
maxDepth: 1, dimension: 2, extractStyles: true, extractAttributes: true
}),
url: 'data/kml/lines.kml'
})
});
var map = new ol.Map({
layers: new ol.Collection([raster, vector]),
layers: [raster, vector],
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
projection: epsg4326,
projection: 'EPSG:4326',
center: [-112.169, 36.099],
zoom: 11
})
});
var kml = new ol.parser.KML({
maxDepth: 1, dimension: 2, extractStyles: true, extractAttributes: true});
$.ajax({
url: 'data/kml/lines.kml'
}).done(function(data) {
vector.parseFeatures(data, kml, epsg4326);
map.on(['click', 'mousemove'], function(evt) {
map.getFeatures({
pixel: evt.getPixel(),
layers: [vector],
success: function(featuresByLayer) {
var features = featuresByLayer[0];
var info = [];
for (var i = 0, ii = features.length; i < ii; ++i) {
info.push(features[i].get('name'));
}
document.getElementById('info').innerHTML = info.join(', ') || '&nbsp';
}
});
});

125
examples/layer-group.html Normal file
View File

@@ -0,0 +1,125 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<style>
#layertree li > span {
cursor: pointer;
}
</style>
<title>Layer group example</title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="./"><img src="../resources/logo.png"> OpenLayers 3 Examples</a>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span6">
<div id="map" class="map"></div>
<h4 id="title">Layer group example</h4>
<p id="shortdesc">Example of a map with layer group.</p>
<div id="docs">
<p>See the <a href="layer-group.js" target="_blank">layer-group.js source</a> to see how this is done.</p>
</div>
<div id="tags">tilejson, input, bind, group, layergroup</div>
</div>
<div id="layertree" class="span6">
<h5>Click on layer nodes below to change their properties.</h5>
<ul>
<li><span>OpenAerial layer</span>
<fieldset id="layer0">
<label class="checkbox" for="visible0">
<input id="visible0" class="visible" type="checkbox"/>visibility
</label>
<label>opacity</label>
<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>
</li>
<li><span>Layer group</span>
<fieldset id="layer1">
<label class="checkbox" for="visible1">
<input id="visible1" class="visible" type="checkbox"/>visibility
</label>
<label>opacity</label>
<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>
<ul>
<li><span>Food insecurity layer</span>
<fieldset id="layer10">
<label class="checkbox" for="visible10">
<input id="visible10" class="visible" type="checkbox"/>visibility
</label>
<label>opacity</label>
<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>
</li>
<li><span>World borders layer</span>
<fieldset id="layer11">
<label class="checkbox" for="visible11">
<input id="visible11" class="visible" type="checkbox"/>visibility
</label>
<label>opacity</label>
<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>
</li>
</ul>
</li>
</ul>
</div>
</div>
<script src="jquery.min.js" type="text/javascript"></script>
<script src="loader.js?id=layer-group" type="text/javascript"></script>
<script src="../resources/example-behaviour.js" type="text/javascript"></script>
</body>
</html>

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