diff --git a/openlayers/apidoc_config/Languages.txt b/openlayers/apidoc_config/Languages.txt
new file mode 100644
index 0000000000..42b197c21b
--- /dev/null
+++ b/openlayers/apidoc_config/Languages.txt
@@ -0,0 +1,113 @@
+Format: 1.52
+
+# This is the Natural Docs languages file for this project. If you change
+# anything here, it will apply to THIS PROJECT ONLY. If you'd like to change
+# something for all your projects, edit the Languages.txt in Natural Docs'
+# Config directory instead.
+
+
+# You can prevent certain file extensions from being scanned like this:
+# Ignore Extensions: [extension] [extension] ...
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Unlike other Natural Docs configuration files, in this file all comments
+# MUST be alone on a line. Some languages deal with the # character, so you
+# cannot put comments on the same line as content.
+#
+# Also, all lists are separated with spaces, not commas, again because some
+# languages may need to use them.
+#
+# Language: [name]
+# Alter Language: [name]
+# Defines a new language or alters an existing one. Its name can use any
+# characters. If any of the properties below have an add/replace form, you
+# must use that when using Alter Language.
+#
+# The language Shebang Script is special. It's entry is only used for
+# extensions, and files with those extensions have their shebang (#!) lines
+# read to determine the real language of the file. Extensionless files are
+# always treated this way.
+#
+# The language Text File is also special. It's treated as one big comment
+# so you can put Natural Docs content in them without special symbols. Also,
+# if you don't specify a package separator, ignored prefixes, or enum value
+# behavior, it will copy those settings from the language that is used most
+# in the source tree.
+#
+# Extensions: [extension] [extension] ...
+# [Add/Replace] Extensions: [extension] [extension] ...
+# Defines the file extensions of the language's source files. You can
+# redefine extensions found in the main languages file. You can use * to
+# mean any undefined extension.
+#
+# Shebang Strings: [string] [string] ...
+# [Add/Replace] Shebang Strings: [string] [string] ...
+# Defines a list of strings that can appear in the shebang (#!) line to
+# designate that it's part of the language. You can redefine strings found
+# in the main languages file.
+#
+# Ignore Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored Prefixes in Index: [prefix] [prefix] ...
+#
+# Ignore [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# Specifies prefixes that should be ignored when sorting symbols in an
+# index. Can be specified in general or for a specific topic type.
+#
+#------------------------------------------------------------------------------
+# For basic language support only:
+#
+# Line Comments: [symbol] [symbol] ...
+# Defines a space-separated list of symbols that are used for line comments,
+# if any.
+#
+# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ...
+# Defines a space-separated list of symbol pairs that are used for block
+# comments, if any.
+#
+# Package Separator: [symbol]
+# Defines the default package separator symbol. The default is a dot.
+#
+# [Topic Type] Prototype Enders: [symbol] [symbol] ...
+# When defined, Natural Docs will attempt to get a prototype from the code
+# immediately following the topic type. It stops when it reaches one of
+# these symbols. Use \n for line breaks.
+#
+# Line Extender: [symbol]
+# Defines the symbol that allows a prototype to span multiple lines if
+# normally a line break would end it.
+#
+# Enum Values: [global|under type|under parent]
+# Defines how enum values are referenced. The default is global.
+# global - Values are always global, referenced as 'value'.
+# under type - Values are under the enum type, referenced as
+# 'package.enum.value'.
+# under parent - Values are under the enum's parent, referenced as
+# 'package.value'.
+#
+# Perl Package: [perl package]
+# Specifies the Perl package used to fine-tune the language behavior in ways
+# too complex to do in this file.
+#
+#------------------------------------------------------------------------------
+# For full language support only:
+#
+# Full Language Support: [perl package]
+# Specifies the Perl package that has the parsing routines necessary for full
+# language support.
+#
+#-------------------------------------------------------------------------------
+
+# The following languages are defined in the main file, if you'd like to alter
+# them:
+#
+# Text File, Shebang Script, C/C++, C#, Java, JavaScript, Perl, Python,
+# PHP, SQL, Visual Basic, Pascal, Assembly, Ada, Tcl, Ruby, Makefile,
+# ActionScript, ColdFusion, R, Fortran
+
+# If you add a language that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# languages [at] naturaldocs [dot] org.
diff --git a/openlayers/apidoc_config/Menu.txt b/openlayers/apidoc_config/Menu.txt
new file mode 100644
index 0000000000..9d17464b31
--- /dev/null
+++ b/openlayers/apidoc_config/Menu.txt
@@ -0,0 +1,498 @@
+Format: 1.52
+
+
+Title: OpenLayers
+SubTitle: JavaScript Mapping Library
+
+# You can add a footer to your documentation like this:
+# Footer: [text]
+# If you want to add a copyright notice, this would be the place to do it.
+
+# You can add a timestamp to your documentation like one of these:
+# Timestamp: Generated on month day, year
+# Timestamp: Updated mm/dd/yyyy
+# Timestamp: Last updated mon day
+#
+# m - One or two digit month. January is "1"
+# mm - Always two digit month. January is "01"
+# mon - Short month word. January is "Jan"
+# month - Long month word. January is "January"
+# d - One or two digit day. 1 is "1"
+# dd - Always two digit day. 1 is "01"
+# day - Day with letter extension. 1 is "1st"
+# yy - Two digit year. 2006 is "06"
+# yyyy - Four digit year. 2006 is "2006"
+# year - Four digit year. 2006 is "2006"
+
+
+# --------------------------------------------------------------------------
+#
+# Cut and paste the lines below to change the order in which your files
+# appear on the menu. Don't worry about adding or removing files, Natural
+# Docs will take care of that.
+#
+# You can further organize the menu by grouping the entries. Add a
+# "Group: [name] {" line to start a group, and add a "}" to end it.
+#
+# You can add text and web links to the menu by adding "Text: [text]" and
+# "Link: [name] ([URL])" lines, respectively.
+#
+# The formatting and comments are auto-generated, so don't worry about
+# neatness when editing the file. Natural Docs will clean it up the next
+# time it is run. When working with groups, just deal with the braces and
+# forget about the indentation and comments.
+#
+# --------------------------------------------------------------------------
+
+
+Group: OpenLayers {
+
+ File: OpenLayers (no auto-title, OpenLayers.js)
+ File: Ajax (no auto-title, OpenLayers/Ajax.js)
+
+ Group: BaseTypes {
+
+ File: Base Types (no auto-title, OpenLayers/BaseTypes.js)
+ File: Bounds (no auto-title, OpenLayers/BaseTypes/Bounds.js)
+ File: Class (no auto-title, OpenLayers/BaseTypes/Class.js)
+ File: Date (no auto-title, OpenLayers/BaseTypes/Date.js)
+ File: Element (no auto-title, OpenLayers/BaseTypes/Element.js)
+ File: LonLat (no auto-title, OpenLayers/BaseTypes/LonLat.js)
+ File: Pixel (no auto-title, OpenLayers/BaseTypes/Pixel.js)
+ File: Size (no auto-title, OpenLayers/BaseTypes/Size.js)
+ } # Group: BaseTypes
+
+ File: Console (no auto-title, OpenLayers/Console.js)
+
+ Group: Control {
+
+ File: Control (no auto-title, OpenLayers/Control.js)
+ File: ArgParser (no auto-title, OpenLayers/Control/ArgParser.js)
+ File: Attribution (no auto-title, OpenLayers/Control/Attribution.js)
+ File: Button (no auto-title, OpenLayers/Control/Button.js)
+ File: DragFeature (no auto-title, OpenLayers/Control/DragFeature.js)
+ File: DragPan (no auto-title, OpenLayers/Control/DragPan.js)
+ File: DrawFeature (no auto-title, OpenLayers/Control/DrawFeature.js)
+ File: EditingToolbar (no auto-title, OpenLayers/Control/EditingToolbar.js)
+ File: Geolocate (no auto-title, OpenLayers/Control/Geolocate.js)
+ File: GetFeature (no auto-title, OpenLayers/Control/GetFeature.js)
+ File: Graticule (no auto-title, OpenLayers/Control/Graticule.js)
+ File: KeyboardDefaults (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
+ File: LayerSwitcher (no auto-title, OpenLayers/Control/LayerSwitcher.js)
+ File: Measure (no auto-title, OpenLayers/Control/Measure.js)
+ File: ModifyFeature (no auto-title, OpenLayers/Control/ModifyFeature.js)
+ File: MouseDefaults (no auto-title, OpenLayers/Control/MouseDefaults.js)
+ File: MousePosition (no auto-title, OpenLayers/Control/MousePosition.js)
+ File: MouseToolbar (no auto-title, OpenLayers/Control/MouseToolbar.js)
+ File: Navigation (no auto-title, OpenLayers/Control/Navigation.js)
+ File: NavigationHistory (no auto-title, OpenLayers/Control/NavigationHistory.js)
+ File: NavToolbar (no auto-title, OpenLayers/Control/NavToolbar.js)
+ File: OverviewMap (no auto-title, OpenLayers/Control/OverviewMap.js)
+ File: Pan (no auto-title, OpenLayers/Control/Pan.js)
+ File: Panel (no auto-title, OpenLayers/Control/Panel.js)
+ File: PanPanel (no auto-title, OpenLayers/Control/PanPanel.js)
+ File: PanZoom (no auto-title, OpenLayers/Control/PanZoom.js)
+ File: PanZoomBar (no auto-title, OpenLayers/Control/PanZoomBar.js)
+ File: Permalink (no auto-title, OpenLayers/Control/Permalink.js)
+ File: PinchZoom (no auto-title, OpenLayers/Control/PinchZoom.js)
+ File: Scale (no auto-title, OpenLayers/Control/Scale.js)
+ File: ScaleLine (no auto-title, OpenLayers/Control/ScaleLine.js)
+ File: SelectFeature (no auto-title, OpenLayers/Control/SelectFeature.js)
+ File: SLDSelect (no auto-title, OpenLayers/Control/SLDSelect.js)
+ File: Snapping (no auto-title, OpenLayers/Control/Snapping.js)
+ File: Split (no auto-title, OpenLayers/Control/Split.js)
+ File: TouchNavigation (no auto-title, OpenLayers/Control/TouchNavigation.js)
+ File: TransformFeature (no auto-title, OpenLayers/Control/TransformFeature.js)
+ File: WMSGetFeatureInfo (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
+ File: WMTSGetFeatureInfo (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
+ File: ZoomBox (no auto-title, OpenLayers/Control/ZoomBox.js)
+ File: ZoomIn (no auto-title, OpenLayers/Control/ZoomIn.js)
+ File: ZoomOut (no auto-title, OpenLayers/Control/ZoomOut.js)
+ File: ZoomPanel (no auto-title, OpenLayers/Control/ZoomPanel.js)
+ File: ZoomToMaxExtent (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
+ } # Group: Control
+
+ File: Events (no auto-title, OpenLayers/Events.js)
+
+ Group: Feature {
+
+ File: Feature (no auto-title, OpenLayers/Feature.js)
+ File: Vector (no auto-title, OpenLayers/Feature/Vector.js)
+ File: WFS (no auto-title, OpenLayers/Feature/WFS.js)
+ } # Group: Feature
+
+ Group: Filter {
+
+ File: Filter (no auto-title, OpenLayers/Filter.js)
+ File: Comparison (no auto-title, OpenLayers/Filter/Comparison.js)
+ File: FeatureId (no auto-title, OpenLayers/Filter/FeatureId.js)
+ File: Function (no auto-title, OpenLayers/Filter/Function.js)
+ File: Logical (no auto-title, OpenLayers/Filter/Logical.js)
+ File: Spatial (no auto-title, OpenLayers/Filter/Spatial.js)
+ } # Group: Filter
+
+ Group: Format {
+
+ File: Format (no auto-title, OpenLayers/Format.js)
+ File: ArcXML (no auto-title, OpenLayers/Format/ArcXML.js)
+ File: ArcXML.Features (no auto-title, OpenLayers/Format/ArcXML/Features.js)
+ File: Atom (no auto-title, OpenLayers/Format/Atom.js)
+ File: Context (no auto-title, OpenLayers/Format/Context.js)
+ File: CQL (no auto-title, OpenLayers/Format/CQL.js)
+ File: CSWGetDomain (no auto-title, OpenLayers/Format/CSWGetDomain.js)
+ File: CSWGetDomain.v2_0_2 (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
+ File: CSWGetRecords (no auto-title, OpenLayers/Format/CSWGetRecords.js)
+ File: CSWGetRecords.v2_0_2 (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
+
+ Group: Filter {
+
+ File: Filter (no auto-title, OpenLayers/Format/Filter.js)
+ File: v1 (no auto-title, OpenLayers/Format/Filter/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/Filter/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/Filter/v1_1_0.js)
+ } # Group: Filter
+
+ File: GeoJSON (no auto-title, OpenLayers/Format/GeoJSON.js)
+ File: GeoRSS (no auto-title, OpenLayers/Format/GeoRSS.js)
+
+ Group: GML {
+
+ File: GML (no auto-title, OpenLayers/Format/GML.js)
+ File: Base (no auto-title, OpenLayers/Format/GML/Base.js)
+ File: v2 (no auto-title, OpenLayers/Format/GML/v2.js)
+ File: v3 (no auto-title, OpenLayers/Format/GML/v3.js)
+ } # Group: GML
+
+ File: GPX (no auto-title, OpenLayers/Format/GPX.js)
+ File: JSON (no auto-title, OpenLayers/Format/JSON.js)
+ File: KML (no auto-title, OpenLayers/Format/KML.js)
+ File: OGCExceptionReport (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
+ File: OSM (no auto-title, OpenLayers/Format/OSM.js)
+ File: OWSCommon (no auto-title, OpenLayers/Format/OWSCommon.js)
+
+ Group: OWSCommon {
+
+ File: v1 (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
+ } # Group: OWSCommon
+
+ File: OWSContext (no auto-title, OpenLayers/Format/OWSContext.js)
+ File: OWSContext.v0_3_1 (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
+ File: QueryStringFilter (no auto-title, OpenLayers/Format/QueryStringFilter.js)
+
+ Group: SLD {
+
+ File: SLD (no auto-title, OpenLayers/Format/SLD.js)
+ File: v1 (no auto-title, OpenLayers/Format/SLD/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/SLD/v1_0_0.js)
+ } # Group: SLD
+
+ File: SOSCapabilities (no auto-title, OpenLayers/Format/SOSCapabilities.js)
+ File: SOSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
+ File: SOSGetFeatureOfInterest (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
+ File: SOSGetObservation (no auto-title, OpenLayers/Format/SOSGetObservation.js)
+ File: Text (no auto-title, OpenLayers/Format/Text.js)
+ File: WCSGetCoverage version 1.1.0 (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
+ File: WFS (no auto-title, OpenLayers/Format/WFS.js)
+
+ Group: WFSCapabilities {
+
+ File: WFSCapabilities (no auto-title, OpenLayers/Format/WFSCapabilities.js)
+ File: v1 (no auto-title, OpenLayers/Format/WFSCapabilities/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WFSCapabilities/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WFSCapabilities/v1_1_0.js)
+ } # Group: WFSCapabilities
+
+ File: WFSDescribeFeatureType (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
+
+ Group: WFST {
+
+ File: WFST (no auto-title, OpenLayers/Format/WFST.js)
+ File: v1 (no auto-title, OpenLayers/Format/WFST/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WFST/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WFST/v1_1_0.js)
+ } # Group: WFST
+
+ File: WKT (no auto-title, OpenLayers/Format/WKT.js)
+
+ Group: WMC {
+
+ File: WMC (no auto-title, OpenLayers/Format/WMC.js)
+ File: v1 (no auto-title, OpenLayers/Format/WMC/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WMC/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WMC/v1_1_0.js)
+ } # Group: WMC
+
+ Group: WMSCapabilities {
+
+ File: WMSCapabilities (no auto-title, OpenLayers/Format/WMSCapabilities.js)
+ File: v1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1.js)
+ File: v1_1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_0.js)
+ File: v1_1_1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_1.js)
+ File: v1_3 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_3.js)
+ File: v1_3_0 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_3_0.js)
+ File: WMSCapabilities/v1_1_1_WMSC (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js)
+ } # Group: WMSCapabilities
+
+ Group: WMSDescribeLayer {
+
+ File: WMSDescribeLayer (no auto-title, OpenLayers/Format/WMSDescribeLayer.js)
+ File: v1_1 (no auto-title, OpenLayers/Format/WMSDescribeLayer/v1_1.js)
+ } # Group: WMSDescribeLayer
+
+ File: WMSGetFeatureInfo (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
+ File: WMTSCapabilities (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
+ File: WMTSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
+ File: WPSCapabilities (no auto-title, OpenLayers/Format/WPSCapabilities.js)
+ File: WPSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
+ File: WPSDescribeProcess (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
+ File: WPSExecute version 1.0.0 (no auto-title, OpenLayers/Format/WPSExecute.js)
+ File: XLS (no auto-title, OpenLayers/Format/XLS.js)
+ File: XLS.v1 (no auto-title, OpenLayers/Format/XLS/v1.js)
+ File: XLS.v1_1_0 (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
+ File: XML (no auto-title, OpenLayers/Format/XML.js)
+ } # Group: Format
+
+ Group: Geometry {
+
+ File: Geometry (no auto-title, OpenLayers/Geometry.js)
+ File: Collection (no auto-title, OpenLayers/Geometry/Collection.js)
+ File: Curve (no auto-title, OpenLayers/Geometry/Curve.js)
+ File: LinearRing (no auto-title, OpenLayers/Geometry/LinearRing.js)
+ File: LineString (no auto-title, OpenLayers/Geometry/LineString.js)
+ File: MultiLineString (no auto-title, OpenLayers/Geometry/MultiLineString.js)
+ File: MultiPoint (no auto-title, OpenLayers/Geometry/MultiPoint.js)
+ File: MultiPolygon (no auto-title, OpenLayers/Geometry/MultiPolygon.js)
+ File: Point (no auto-title, OpenLayers/Geometry/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Geometry/Polygon.js)
+ File: Rectangle (no auto-title, OpenLayers/Geometry/Rectangle.js)
+ } # Group: Geometry
+
+ Group: Handler {
+
+ File: Handler (no auto-title, OpenLayers/Handler.js)
+ File: Box (no auto-title, OpenLayers/Handler/Box.js)
+ File: Click (no auto-title, OpenLayers/Handler/Click.js)
+ File: Drag (no auto-title, OpenLayers/Handler/Drag.js)
+ File: Feature (no auto-title, OpenLayers/Handler/Feature.js)
+ File: Hover (no auto-title, OpenLayers/Handler/Hover.js)
+ File: Keyboard (no auto-title, OpenLayers/Handler/Keyboard.js)
+ File: MouseWheel (no auto-title, OpenLayers/Handler/MouseWheel.js)
+ File: Path (no auto-title, OpenLayers/Handler/Path.js)
+ File: Pinch (no auto-title, OpenLayers/Handler/Pinch.js)
+ File: Point (no auto-title, OpenLayers/Handler/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Handler/Polygon.js)
+ File: RegularPolygon (no auto-title, OpenLayers/Handler/RegularPolygon.js)
+ } # Group: Handler
+
+ File: Icon (no auto-title, OpenLayers/Icon.js)
+ File: Kinetic (no auto-title, OpenLayers/Kinetic.js)
+
+ Group: Lang {
+
+ File: Lang (no auto-title, OpenLayers/Lang.js)
+ File: ar (no auto-title, OpenLayers/Lang/ar.js)
+ File: be-tarask (no auto-title, OpenLayers/Lang/be-tarask.js)
+ File: bg (no auto-title, OpenLayers/Lang/bg.js)
+ File: br (no auto-title, OpenLayers/Lang/br.js)
+ File: ca (no auto-title, OpenLayers/Lang/ca.js)
+ File: cs-CZ (no auto-title, OpenLayers/Lang/cs-CZ.js)
+ File: da-DK (no auto-title, OpenLayers/Lang/da-DK.js)
+ File: de (no auto-title, OpenLayers/Lang/de.js)
+ File: en (no auto-title, OpenLayers/Lang/en.js)
+ File: en-CA (no auto-title, OpenLayers/Lang/en-CA.js)
+ File: es (no auto-title, OpenLayers/Lang/es.js)
+ File: el (no auto-title, OpenLayers/Lang/el.js)
+ File: fi (no auto-title, OpenLayers/Lang/fi.js)
+ File: fr (no auto-title, OpenLayers/Lang/fr.js)
+ File: fur (no auto-title, OpenLayers/Lang/fur.js)
+ File: gl (no auto-title, OpenLayers/Lang/gl.js)
+ File: gsw (no auto-title, OpenLayers/Lang/gsw.js)
+ File: hr (no auto-title, OpenLayers/Lang/hr.js)
+ File: hsb (no auto-title, OpenLayers/Lang/hsb.js)
+ File: hu (no auto-title, OpenLayers/Lang/hu.js)
+ File: ia (no auto-title, OpenLayers/Lang/ia.js)
+ File: id (no auto-title, OpenLayers/Lang/id.js)
+ File: io (no auto-title, OpenLayers/Lang/io.js)
+ File: is (no auto-title, OpenLayers/Lang/is.js)
+ File: it (no auto-title, OpenLayers/Lang/it.js)
+ File: ja (no auto-title, OpenLayers/Lang/ja.js)
+ File: km (no auto-title, OpenLayers/Lang/km.js)
+ File: ksh (no auto-title, OpenLayers/Lang/ksh.js)
+ File: lt (no auto-title, OpenLayers/Lang/lt.js)
+ File: nds (no auto-title, OpenLayers/Lang/nds.js)
+ File: nb (no auto-title, OpenLayers/Lang/nb.js)
+ File: nl (no auto-title, OpenLayers/Lang/nl.js)
+ File: nn (no auto-title, OpenLayers/Lang/nn.js)
+ File: oc (no auto-title, OpenLayers/Lang/oc.js)
+ File: pt (no auto-title, OpenLayers/Lang/pt.js)
+ File: pt-BR (no auto-title, OpenLayers/Lang/pt-BR.js)
+ File: ru (no auto-title, OpenLayers/Lang/ru.js)
+ File: sk (no auto-title, OpenLayers/Lang/sk.js)
+ File: sv-SE (no auto-title, OpenLayers/Lang/sv-SE.js)
+ File: te (no auto-title, OpenLayers/Lang/te.js)
+ File: vi (no auto-title, OpenLayers/Lang/vi.js)
+ File: zh-CN (no auto-title, OpenLayers/Lang/zh-CN.js)
+ File: zh-TW (no auto-title, OpenLayers/Lang/zh-TW.js)
+ } # Group: Lang
+
+ Group: Layer {
+
+ File: Layer (no auto-title, OpenLayers/Layer.js)
+ File: ArcGISCache.js (no auto-title, OpenLayers/Layer/ArcGISCache.js)
+ File: ArcGIS93Rest (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
+ File: ArcIMS (no auto-title, OpenLayers/Layer/ArcIMS.js)
+ File: Bing (no auto-title, OpenLayers/Layer/Bing.js)
+ File: Boxes (no auto-title, OpenLayers/Layer/Boxes.js)
+ File: EventPane (no auto-title, OpenLayers/Layer/EventPane.js)
+ File: FixedZoomLevels (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
+ File: GeoRSS (no auto-title, OpenLayers/Layer/GeoRSS.js)
+ File: GML (no auto-title, OpenLayers/Layer/GML.js)
+ File: Google (no auto-title, OpenLayers/Layer/Google.js)
+ File: Google.v3 (no auto-title, OpenLayers/Layer/Google/v3.js)
+ File: GoogleNG (no auto-title, OpenLayers/Layer/GoogleNG.js)
+ File: Grid (no auto-title, OpenLayers/Layer/Grid.js)
+ File: HTTPRequest (no auto-title, OpenLayers/Layer/HTTPRequest.js)
+ File: Image (no auto-title, OpenLayers/Layer/Image.js)
+ File: KaMap (no auto-title, OpenLayers/Layer/KaMap.js)
+ File: KaMapCache (no auto-title, OpenLayers/Layer/KaMapCache.js)
+ File: MapGuide (no auto-title, OpenLayers/Layer/MapGuide.js)
+ File: MapServer (no auto-title, OpenLayers/Layer/MapServer.js)
+ File: MapServer.Untiled (no auto-title, OpenLayers/Layer/MapServer/Untiled.js)
+ File: Markers (no auto-title, OpenLayers/Layer/Markers.js)
+ File: MultiMap (no auto-title, OpenLayers/Layer/MultiMap.js)
+ File: PointGrid (no auto-title, OpenLayers/Layer/PointGrid.js)
+ File: PointTrack (no auto-title, OpenLayers/Layer/PointTrack.js)
+ File: SphericalMercator (no auto-title, OpenLayers/Layer/SphericalMercator.js)
+ File: Text (no auto-title, OpenLayers/Layer/Text.js)
+ File: TileCache (no auto-title, OpenLayers/Layer/TileCache.js)
+ File: TMS (no auto-title, OpenLayers/Layer/TMS.js)
+ File: Vector (no auto-title, OpenLayers/Layer/Vector.js)
+ File: Vector.RootContainer (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
+ File: VirtualEarth (no auto-title, OpenLayers/Layer/VirtualEarth.js)
+ File: WFS (no auto-title, OpenLayers/Layer/WFS.js)
+ File: WMS (no auto-title, OpenLayers/Layer/WMS.js)
+ File: WMS.Untiled (no auto-title, OpenLayers/Layer/WMS/Untiled.js)
+ File: WMS.Post (no auto-title, OpenLayers/Layer/WMS/Post.js)
+ File: WMTS (no auto-title, OpenLayers/Layer/WMTS.js)
+ File: WorldWind (no auto-title, OpenLayers/Layer/WorldWind.js)
+ File: XYZ (no auto-title, OpenLayers/Layer/XYZ.js)
+ File: Yahoo (no auto-title, OpenLayers/Layer/Yahoo.js)
+ File: Zoomify (no auto-title, OpenLayers/Layer/Zoomify.js)
+ } # Group: Layer
+
+ File: Map (no auto-title, OpenLayers/Map.js)
+
+ Group: Marker {
+
+ File: Marker (no auto-title, OpenLayers/Marker.js)
+ File: Box (no auto-title, OpenLayers/Marker/Box.js)
+ } # Group: Marker
+
+ Group: Popup {
+
+ File: Popup (no auto-title, OpenLayers/Popup.js)
+ File: Anchored (no auto-title, OpenLayers/Popup/Anchored.js)
+ File: AnchoredBubble (no auto-title, OpenLayers/Popup/AnchoredBubble.js)
+ File: Framed (no auto-title, OpenLayers/Popup/Framed.js)
+ File: FramedCloud (no auto-title, OpenLayers/Popup/FramedCloud.js)
+ } # Group: Popup
+
+ File: Projection (no auto-title, OpenLayers/Projection.js)
+
+ Group: Protocol {
+
+ File: Protocol (no auto-title, OpenLayers/Protocol.js)
+ File: HTTP (no auto-title, OpenLayers/Protocol/HTTP.js)
+
+ Group: SQL {
+
+ File: SQL (no auto-title, OpenLayers/Protocol/SQL.js)
+ File: Gears (no auto-title, OpenLayers/Protocol/SQL/Gears.js)
+ } # Group: SQL
+
+ Group: WFS {
+
+ File: WFS (no auto-title, OpenLayers/Protocol/WFS.js)
+ File: v1 (no auto-title, OpenLayers/Protocol/WFS/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Protocol/WFS/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Protocol/WFS/v1_1_0.js)
+ } # Group: WFS
+
+ File: Script (no auto-title, OpenLayers/Protocol/Script.js)
+ File: SOS.DEFAULTS (no auto-title, OpenLayers/Protocol/SOS.js)
+ File: SOS.v1_0_0 (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
+ } # Group: Protocol
+
+ Group: Renderer {
+
+ File: Renderer (no auto-title, OpenLayers/Renderer.js)
+ File: Canvas (no auto-title, OpenLayers/Renderer/Canvas.js)
+ File: ElementsIndexer (no auto-title, OpenLayers/Renderer/Elements.js)
+ File: NG (no auto-title, OpenLayers/Renderer/NG.js)
+ File: SVG (no auto-title, OpenLayers/Renderer/SVG.js)
+ File: SVG2 (no auto-title, OpenLayers/Renderer/SVG2.js)
+ File: VML (no auto-title, OpenLayers/Renderer/VML.js)
+ } # Group: Renderer
+
+ Group: Request {
+
+ File: Request (no auto-title, OpenLayers/Request.js)
+ File: XMLHttpRequest (no auto-title, OpenLayers/Request/XMLHttpRequest.js)
+ } # Group: Request
+
+ File: SingleFile.js (no auto-title, OpenLayers/SingleFile.js)
+ File: Rule (no auto-title, OpenLayers/Rule.js)
+
+ Group: Strategy {
+
+ File: Strategy (no auto-title, OpenLayers/Strategy.js)
+ File: BBOX (no auto-title, OpenLayers/Strategy/BBOX.js)
+ File: Cluster (no auto-title, OpenLayers/Strategy/Cluster.js)
+ File: Filter (no auto-title, OpenLayers/Strategy/Filter.js)
+ File: Fixed (no auto-title, OpenLayers/Strategy/Fixed.js)
+ File: Paging (no auto-title, OpenLayers/Strategy/Paging.js)
+ File: Refresh (no auto-title, OpenLayers/Strategy/Refresh.js)
+ File: Save (no auto-title, OpenLayers/Strategy/Save.js)
+ } # Group: Strategy
+
+ File: Style (no auto-title, OpenLayers/Style.js)
+ File: Style2 (no auto-title, OpenLayers/Style2.js)
+ File: StyleMap (no auto-title, OpenLayers/StyleMap.js)
+
+ Group: Symbolizer {
+
+ File: Symbolizer (no auto-title, OpenLayers/Symbolizer.js)
+ File: Line (no auto-title, OpenLayers/Symbolizer/Line.js)
+ File: Point (no auto-title, OpenLayers/Symbolizer/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Symbolizer/Polygon.js)
+ File: Raster (no auto-title, OpenLayers/Symbolizer/Raster.js)
+ File: Text (no auto-title, OpenLayers/Symbolizer/Text.js)
+ } # Group: Symbolizer
+
+ Group: Tile {
+
+ File: Tile (no auto-title, OpenLayers/Tile.js)
+ File: Google (no auto-title, OpenLayers/Tile/Google.js)
+ File: Image (no auto-title, OpenLayers/Tile/Image.js)
+ File: Image.IFrame (no auto-title, OpenLayers/Tile/Image/IFrame.js)
+ File: WFS (no auto-title, OpenLayers/Tile/WFS.js)
+ } # Group: Tile
+
+ File: Tween (no auto-title, OpenLayers/Tween.js)
+ File: Util (no auto-title, OpenLayers/Util.js)
+ } # Group: OpenLayers
+
+Group: Index {
+
+ Index: Everything
+ Class Index: Classes
+ Constant Index: Constants
+ Function Index: Functions
+ Property Index: Properties
+ File Index: Files
+ Constructor Index: Constructor
+ } # Group: Index
+
diff --git a/openlayers/apidoc_config/OL.css b/openlayers/apidoc_config/OL.css
new file mode 100644
index 0000000000..a397119822
--- /dev/null
+++ b/openlayers/apidoc_config/OL.css
@@ -0,0 +1,20 @@
+p {
+ text-indent: 0; margin-bottom: 1em;
+}
+
+.MGroup {
+ font-variant: normal;
+ margin: 0.4em 0 0em 10px
+}
+
+.MTitle {
+ font-variant: normal;
+}
+
+.CGroup .CTitle {
+ font-variant: normal;
+}
+
+.SGroup .SEntry {
+ font-variant: normal;
+}
\ No newline at end of file
diff --git a/openlayers/apidoc_config/Topics.txt b/openlayers/apidoc_config/Topics.txt
new file mode 100644
index 0000000000..125abab726
--- /dev/null
+++ b/openlayers/apidoc_config/Topics.txt
@@ -0,0 +1,105 @@
+Format: 1.52
+
+# This is the Natural Docs topics file for this project. If you change anything
+# here, it will apply to THIS PROJECT ONLY. If you'd like to change something
+# for all your projects, edit the Topics.txt in Natural Docs' Config directory
+# instead.
+
+
+Ignore Keywords:
+ function, functions
+ func, funcs
+ procedure, procedures
+ proc, procs
+ routine, routines
+ subroutine, subroutines
+ sub, subs
+ method, methods
+ callback, callbacks
+ property, properties
+ prop, props
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Topic Type: [name]
+# Alter Topic Type: [name]
+# Creates a new topic type or alters one from the main file. Each type gets
+# its own index and behavior settings. Its name can have letters, numbers,
+# spaces, and these charaters: - / . '
+#
+# Plural: [name]
+# Sets the plural name of the topic type, if different.
+#
+# Keywords:
+# [keyword]
+# [keyword], [plural keyword]
+# ...
+# Defines or adds to the list of keywords for the topic type. They may only
+# contain letters, numbers, and spaces and are not case sensitive. Plural
+# keywords are used for list topics. You can redefine keywords found in the
+# main topics file.
+#
+# Index: [yes|no]
+# Whether the topics get their own index. Defaults to yes. Everything is
+# included in the general index regardless of this setting.
+#
+# Scope: [normal|start|end|always global]
+# How the topics affects scope. Defaults to normal.
+# normal - Topics stay within the current scope.
+# start - Topics start a new scope for all the topics beneath it,
+# like class topics.
+# end - Topics reset the scope back to global for all the topics
+# beneath it.
+# always global - Topics are defined as global, but do not change the scope
+# for any other topics.
+#
+# Class Hierarchy: [yes|no]
+# Whether the topics are part of the class hierarchy. Defaults to no.
+#
+# Page Title If First: [yes|no]
+# Whether the topic's title becomes the page title if it's the first one in
+# a file. Defaults to no.
+#
+# Break Lists: [yes|no]
+# Whether list topics should be broken into individual topics in the output.
+# Defaults to no.
+#
+# Can Group With: [type], [type], ...
+# Defines a list of topic types that this one can possibly be grouped with.
+# Defaults to none.
+#-------------------------------------------------------------------------------
+
+# The following topics are defined in the main file, if you'd like to alter
+# their behavior or add keywords:
+#
+# Generic, Class, Interface, Section, File, Group, Function, Variable,
+# Property, Type, Constant, Enumeration, Event, Delegate, Macro,
+# Database, Database Table, Database View, Database Index, Database
+# Cursor, Database Trigger, Cookie, Build Target
+
+# If you add something that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# topics [at] naturaldocs [dot] org.
+
+
+Topic Type: Constructor
+
+ Class Hierarchy: Yes
+ Keywords:
+ constructor
+ initialize
+
+
+Alter Topic Type: Function
+
+ Add Keywords:
+ apimethod
+ apifunction
+
+
+Alter Topic Type: Property
+
+ Add Keywords:
+ apiproperty
diff --git a/openlayers/art/arrows.svg b/openlayers/art/arrows.svg
new file mode 100644
index 0000000000..d40712d1a7
--- /dev/null
+++ b/openlayers/art/arrows.svg
@@ -0,0 +1,127 @@
+
+
+
diff --git a/openlayers/art/layer-switcher-maximize.svg b/openlayers/art/layer-switcher-maximize.svg
new file mode 100644
index 0000000000..6b9f0d39b8
--- /dev/null
+++ b/openlayers/art/layer-switcher-maximize.svg
@@ -0,0 +1,128 @@
+
+
+
diff --git a/openlayers/art/layer-switcher-minimize.svg b/openlayers/art/layer-switcher-minimize.svg
new file mode 100644
index 0000000000..70fcb8cbae
--- /dev/null
+++ b/openlayers/art/layer-switcher-minimize.svg
@@ -0,0 +1,142 @@
+
+
+
diff --git a/openlayers/art/marker.svg b/openlayers/art/marker.svg
new file mode 100644
index 0000000000..9f0d8dc49a
--- /dev/null
+++ b/openlayers/art/marker.svg
@@ -0,0 +1,25 @@
+
+
+
+
+]>
+
diff --git a/openlayers/art/measuring-stick-off.svg b/openlayers/art/measuring-stick-off.svg
new file mode 100644
index 0000000000..2e47a2fbc5
--- /dev/null
+++ b/openlayers/art/measuring-stick-off.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
diff --git a/openlayers/art/measuring-stick-on.svg b/openlayers/art/measuring-stick-on.svg
new file mode 100644
index 0000000000..ca0c18c751
--- /dev/null
+++ b/openlayers/art/measuring-stick-on.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
diff --git a/openlayers/art/panning-hand-off.svg b/openlayers/art/panning-hand-off.svg
new file mode 100644
index 0000000000..bf2e40b102
--- /dev/null
+++ b/openlayers/art/panning-hand-off.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
diff --git a/openlayers/art/panning-hand-on.svg b/openlayers/art/panning-hand-on.svg
new file mode 100644
index 0000000000..139ce97218
--- /dev/null
+++ b/openlayers/art/panning-hand-on.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
diff --git a/openlayers/art/slider.svg b/openlayers/art/slider.svg
new file mode 100644
index 0000000000..9fa435d421
--- /dev/null
+++ b/openlayers/art/slider.svg
@@ -0,0 +1,71 @@
+
+
+
diff --git a/openlayers/art/zoom-world.svg b/openlayers/art/zoom-world.svg
new file mode 100644
index 0000000000..749e7c70c9
--- /dev/null
+++ b/openlayers/art/zoom-world.svg
@@ -0,0 +1,193 @@
+
+
+
diff --git a/openlayers/art/zoombar.svg b/openlayers/art/zoombar.svg
new file mode 100644
index 0000000000..a88ff36a91
--- /dev/null
+++ b/openlayers/art/zoombar.svg
@@ -0,0 +1,73 @@
+
+
+
diff --git a/openlayers/build/README.txt b/openlayers/build/README.txt
new file mode 100644
index 0000000000..ca8402c718
--- /dev/null
+++ b/openlayers/build/README.txt
@@ -0,0 +1,43 @@
+The OpenLayers build tool supports several different
+forms of compressing your javascript code, and a method
+of describing build profiles to create customized
+OpenLayers builds with only the components you need.
+
+When building a file, you can choose to build with several
+different compression options to the Python-based build.py
+script. The following is an example script:
+
+python build.py -c closure full OpenLayers-closure.js
+
+This script selects the 'closure' compression mechanism,
+uses a config file called 'full.cfg', and writes the output
+to OpenLayers-closure.js.
+
+The options available for compression are:
+
+ * closure
+ This requires you to have a closure-compiler.jar in your
+ tools directory. You can do this by fetching the compiler
+ from:
+
+ http://closure-compiler.googlecode.com/files/compiler-latest.zip
+
+ Then unzipping that file, and placing compiler.jar into tools
+ and renaming it closure-compiler.jar.
+
+ * closure_ws
+ This uses the closure compiler webservice. This will only work
+ for files source Javascript files which are under 1MB. (Note that
+ the default OpenLayers full build is not under 1MB.)
+
+ * jsmin
+ jsmin is the default compiler, and uses the Python-based
+ jsmin script to compress the Javascript.
+
+ * minimize
+ This is a simple whitespace removing Python script, designed
+ to fill in when other tools are unavailable.
+
+ * none
+ None will leave the Javascript uncompressed.
+
diff --git a/openlayers/build/build.py b/openlayers/build/build.py
new file mode 100755
index 0000000000..d91878146f
--- /dev/null
+++ b/openlayers/build/build.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+import sys
+sys.path.append("../tools")
+import mergejs
+import optparse
+
+def build(config_file = None, output_file = None, options = None):
+ have_compressor = []
+ try:
+ import jsmin
+ have_compressor.append("jsmin")
+ except ImportError:
+ print "No jsmin"
+ try:
+ import closure
+ have_compressor.append("closure")
+ except Exception, E:
+ print "No closure (%s)" % E
+ try:
+ import closure_ws
+ have_compressor.append("closure_ws")
+ except ImportError:
+ print "No closure_ws"
+
+ try:
+ import minimize
+ have_compressor.append("minimize")
+ except ImportError:
+ print "No minimize"
+
+ use_compressor = None
+ if options.compressor and options.compressor in have_compressor:
+ use_compressor = options.compressor
+
+ sourceDirectory = "../lib"
+ configFilename = "full.cfg"
+ outputFilename = "OpenLayers.js"
+
+ if config_file:
+ configFilename = config_file
+ extension = configFilename[-4:]
+
+ if extension != ".cfg":
+ configFilename = config_file + ".cfg"
+
+ if output_file:
+ outputFilename = output_file
+
+ print "Merging libraries."
+ merged = mergejs.run(sourceDirectory, None, configFilename)
+ print "Compressing using %s" % use_compressor
+ if use_compressor == "jsmin":
+ minimized = jsmin.jsmin(merged)
+ elif use_compressor == "minimize":
+ minimized = minimize.minimize(merged)
+ elif use_compressor == "closure_ws":
+ minimized = closure_ws.minimize(merged)
+ elif use_compressor == "closure":
+ minimized = closure.minimize(merged)
+ else: # fallback
+ minimized = merged
+ print "Adding license file."
+ minimized = file("license.txt").read() + minimized
+
+ print "Writing to %s." % outputFilename
+ file(outputFilename, "w").write(minimized)
+
+ print "Done."
+
+if __name__ == '__main__':
+ opt = optparse.OptionParser(usage="%s [options] [config_file] [output_file]\n Default config_file is 'full.cfg', Default output_file is 'OpenLayers.js'")
+ opt.add_option("-c", "--compressor", dest="compressor", help="compression method: one of 'jsmin', 'minimize', 'closure_ws', 'closure', or 'none'", default="jsmin")
+ (options, args) = opt.parse_args()
+ if not len(args):
+ build(options=options)
+ elif len(args) == 1:
+ build(args[0], options=options)
+ elif len(args) == 2:
+ build(args[0], args[1], options=options)
+ else:
+ print "Wrong number of arguments"
diff --git a/openlayers/build/buildUncompressed.py b/openlayers/build/buildUncompressed.py
new file mode 100755
index 0000000000..fd38aa74cd
--- /dev/null
+++ b/openlayers/build/buildUncompressed.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+import sys
+sys.path.append("../tools")
+
+import jsmin, mergejs
+
+sourceDirectory = "../lib"
+configFilename = "full.cfg"
+outputFilename = "OpenLayers.js"
+
+if len(sys.argv) > 1:
+ configFilename = sys.argv[1] + ".cfg"
+if len(sys.argv) > 2:
+ outputFilename = sys.argv[2]
+
+print "Merging libraries."
+merged = mergejs.run(sourceDirectory, None, configFilename)
+print "Adding license file."
+merged = file("license.txt").read() + merged
+
+print "Writing to %s." % outputFilename
+file(outputFilename, "w").write(merged)
+
+print "Done."
diff --git a/openlayers/build/full.cfg b/openlayers/build/full.cfg
new file mode 100644
index 0000000000..5ed2b7b71c
--- /dev/null
+++ b/openlayers/build/full.cfg
@@ -0,0 +1,13 @@
+# This is the full build with all files: this includes the vector-related files
+# like Renderers and Formats.
+
+[first]
+
+[last]
+
+[include]
+
+[exclude]
+Firebug
+OpenLayers.js
+OpenLayers/Lang
diff --git a/openlayers/build/library.cfg b/openlayers/build/library.cfg
new file mode 100644
index 0000000000..572cd5873c
--- /dev/null
+++ b/openlayers/build/library.cfg
@@ -0,0 +1,48 @@
+# This file includes the OpenLayers code to create a build for everything that
+# does not require vector support.
+
+[first]
+
+[last]
+
+[include]
+
+[exclude]
+Firebug
+OpenLayers.js
+OpenLayers/Format/GeoRSS.js
+OpenLayers/Format/GML.js
+OpenLayers/Format/WKT.js
+OpenLayers/Format/KML.js
+OpenLayers/Format/WFS.js
+OpenLayers/Format.js
+OpenLayers/Handler/Path.js
+OpenLayers/Handler/Point.js
+OpenLayers/Handler/Polygon.js
+OpenLayers/Handler/Select.js
+OpenLayers/Geometry/Collection.js
+OpenLayers/Geometry/Curve.js
+OpenLayers/Geometry/LinearRing.js
+OpenLayers/Geometry/LineString.js
+OpenLayers/Geometry/MultiLineString.js
+OpenLayers/Geometry/MultiPoint.js
+OpenLayers/Geometry/MultiPolygon.js
+OpenLayers/Geometry/Point.js
+OpenLayers/Geometry/Polygon.js
+OpenLayers/Geometry/Rectangle.js
+OpenLayers/Geometry/Surface.js
+OpenLayers/Geometry.js
+OpenLayers/Layer/GML.js
+OpenLayers/Layer/Vector.js
+OpenLayers/Control/DrawFeature.js
+OpenLayers/Control/EditingToolbar.js
+OpenLayers/Control/SelectFeature.js
+OpenLayers/Feature/Vector.js
+OpenLayers/Renderer
+OpenLayers/Renderer/Elements.js
+OpenLayers/Renderer/SVG.js
+OpenLayers/Renderer/VML.js
+OpenLayers/Renderer.js
+OpenLayers/Lang
+
+
diff --git a/openlayers/build/license.txt b/openlayers/build/license.txt
new file mode 100644
index 0000000000..ffb1fe13e6
--- /dev/null
+++ b/openlayers/build/license.txt
@@ -0,0 +1,125 @@
+/*
+
+ OpenLayers.js -- OpenLayers Map Viewer Library
+
+ Copyright 2005-2011 OpenLayers Contributors, released under the FreeBSD
+ license. Please see http://svn.openlayers.org/trunk/openlayers/license.txt
+ for the full text of the license.
+
+ Includes compressed code under the following licenses:
+
+ (For uncompressed versions of the code used please see the
+ OpenLayers SVN repository: )
+
+*/
+
+/* Contains portions of Prototype.js:
+ *
+ * Prototype JavaScript framework, version 1.4.0
+ * (c) 2005 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://prototype.conio.net/
+ *
+ *--------------------------------------------------------------------------*/
+
+/**
+*
+* Contains portions of Rico
+*
+* Copyright 2005 Sabre Airline Solutions
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you
+* may not use this file except in compliance with the License. You
+* may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+* implied. See the License for the specific language governing
+* permissions and limitations under the License.
+*
+**/
+
+/**
+ * Contains XMLHttpRequest.js
+ * Copyright 2007 Sergey Ilinsky (http://www.ilinsky.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+/**
+ * Contains portions of Gears
+ *
+ * Copyright 2007, Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of Google Inc. nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Sets up google.gears.*, which is *the only* supported way to access Gears.
+ *
+ * Circumvent this file at your own risk!
+ *
+ * In the future, Gears may automatically define google.gears.* without this
+ * file. Gears may use these objects to transparently fix bugs and compatibility
+ * issues. Applications that use the code below will continue to work seamlessly
+ * when that happens.
+ */
+
+/**
+ * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is
+ * Copyright (c) 2006, Yahoo! Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use of this software in source and binary forms, with or
+ * without modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Yahoo! Inc. nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission of Yahoo! Inc.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
\ No newline at end of file
diff --git a/openlayers/build/lite.cfg b/openlayers/build/lite.cfg
new file mode 100644
index 0000000000..d274e272c4
--- /dev/null
+++ b/openlayers/build/lite.cfg
@@ -0,0 +1,17 @@
+# This file includes a small subset of OpenLayers code, designed to be
+# integrated into another application. It includes only the Layer types
+# neccesary to create tiled or untiled WMS, and does not include any Controls.
+# This is the result of what was at the time called "Webmap.js" at the FOSS4G
+# Web Mapping BOF.
+
+[first]
+
+[last]
+
+[include]
+OpenLayers/Map.js
+OpenLayers/Layer/WMS.js
+
+[exclude]
+
+
diff --git a/openlayers/build/mobile.cfg b/openlayers/build/mobile.cfg
new file mode 100644
index 0000000000..7bf6afaf62
--- /dev/null
+++ b/openlayers/build/mobile.cfg
@@ -0,0 +1,36 @@
+[first]
+
+[last]
+
+[include]
+OpenLayers/Map.js
+OpenLayers/Kinetic.js
+OpenLayers/Projection.js
+OpenLayers/Layer/SphericalMercator.js
+OpenLayers/Layer/XYZ.js
+OpenLayers/Layer/Bing.js
+OpenLayers/Layer/WMS.js
+OpenLayers/Control/TouchNavigation.js
+OpenLayers/Control/Geolocate.js
+OpenLayers/Control/ZoomPanel.js
+OpenLayers/Control/Attribution.js
+OpenLayers/Control/SelectFeature.js
+OpenLayers/Control/DrawFeature.js
+OpenLayers/Control/ModifyFeature.js
+OpenLayers/Control/Panel.js
+OpenLayers/Handler/Point.js
+OpenLayers/Handler/Path.js
+OpenLayers/Handler/Polygon.js
+OpenLayers/Layer/Vector.js
+OpenLayers/Renderer/SVG.js
+OpenLayers/Renderer/Canvas.js
+OpenLayers/Format/GeoJSON.js
+OpenLayers/Format/KML.js
+OpenLayers/Protocol/HTTP.js
+OpenLayers/Protocol/WFS.js
+OpenLayers/Protocol/WFS/v1_0_0.js
+OpenLayers/Strategy/Fixed.js
+
+[exclude]
+
+
diff --git a/openlayers/build/tests.cfg b/openlayers/build/tests.cfg
new file mode 100644
index 0000000000..9e2237f7b1
--- /dev/null
+++ b/openlayers/build/tests.cfg
@@ -0,0 +1,10 @@
+# This build config is supposed to be used for the units tests with "mode=build"
+
+[first]
+
+[last]
+
+[include]
+
+[exclude]
+OpenLayers.js
diff --git a/openlayers/doc/authors.txt b/openlayers/doc/authors.txt
new file mode 100644
index 0000000000..dfcd9ff2fd
--- /dev/null
+++ b/openlayers/doc/authors.txt
@@ -0,0 +1,56 @@
+OpenLayers contributors:
+
+Antoine Abt
+Mike Adair
+Jeff Adams
+Seb Benthall
+Bruno Binet
+Stéphane Brunner
+Howard Butler
+Bertil Chaupis
+John Cole
+Tim Coulter
+Robert Coup
+Jeff Dege
+Roald de Wit
+Schuyler Erle
+Christian López Espínola
+John Frank
+Sean Gilles
+Pierre Giraud
+Ivan Grcic
+Andreas Hocevar
+Marc Jansen
+Ian Johnson
+Frédéric Junod
+Eric Lemoine
+Philip Lindsay
+Martijn van Oosterhout
+David Overstrom
+Corey Puffault
+Peter William Robins
+Gregers Rygg
+Tim Schaub
+Christopher Schmidt
+Cameron Shorter
+Pedro Simonetti
+Paul Spencer
+Paul Smith
+Glen Stampoultzis
+James Stembridge
+Erik Uzureau
+Bart van den Eijnden
+Ivan Willig
+Thomas Wood
+Bill Woodall
+Steve Woodbridge
+David Zwarg
+
+Some portions of OpenLayers are used under the Apache 2.0 license, available
+in doc/licenses/APACHE-2.0.txt.
+
+Some portions of OpenLayers are used under the MIT license, availabie in
+doc/licenses/MIT-LICENSE.txt.
+
+Some portions of OpenLayers are Copyright 2001 Robert Penner, and are used
+under the BSD license, available in doc/licenses/BSD-LICENSE.txt
diff --git a/openlayers/doc/customization b/openlayers/doc/customization
new file mode 100644
index 0000000000..f4b5b98aa9
--- /dev/null
+++ b/openlayers/doc/customization
@@ -0,0 +1,49 @@
+Customizing OpenLayers
+======================
+
+OpenLayers is designed to fit many needs -- fitting in alongside all kinds of
+various applications which are currently in use.
+
+Currently, OpenLayers supports a 'theme' option when creating a map. This
+theme option allows you to specify the location of a CSS theme which should
+be included.
+
+A default theme is available as an example in the theme/ directory: the setup
+is:
+
+ * theme/
+ * theme/default/
+ * theme/default/style.css
+ * theme/default/img/
+
+Currently, the OpenLayers code does not support class names, and therefore,
+it is not possible to control many aspects of OpenLayers code with CSS
+classes. However, with this framework in place, we expect to invest time
+to make existing features and new features use the CSS theming framework
+where apropriate.
+
+
+Class Naming
+============
+Elements should have class names which are descriptive of the Javascript
+class from which they come. For example, the main layer switcher element
+in the OpenLayers.Control.LayerSwitcher would be classed:
+
+ olControlLayerSwitcher
+
+This would allow users to add to their style.css class in their theme,
+changing, for example:
+
+::
+
+ .olControlLayerSwitcher input {
+ width:10px;
+ }
+
+Sub elements of a particular control can add to the class name:
+
+::
+
+ .olControlLayerSwitcherBaseLabel {
+ color: red;
+ }
diff --git a/openlayers/doc/licenses/APACHE-2.0.txt b/openlayers/doc/licenses/APACHE-2.0.txt
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/openlayers/doc/licenses/APACHE-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/openlayers/doc/licenses/BSD-LICENSE.txt b/openlayers/doc/licenses/BSD-LICENSE.txt
new file mode 100644
index 0000000000..aa321e6749
--- /dev/null
+++ b/openlayers/doc/licenses/BSD-LICENSE.txt
@@ -0,0 +1,28 @@
+Redistribution and use of this software in source and binary forms, with or
+without modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of Yahoo! Inc. nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of Yahoo! Inc.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/openlayers/doc/licenses/MIT-LICENSE.txt b/openlayers/doc/licenses/MIT-LICENSE.txt
new file mode 100644
index 0000000000..c9b44cb8aa
--- /dev/null
+++ b/openlayers/doc/licenses/MIT-LICENSE.txt
@@ -0,0 +1,18 @@
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/openlayers/doc/readme.txt b/openlayers/doc/readme.txt
new file mode 100644
index 0000000000..d02540af67
--- /dev/null
+++ b/openlayers/doc/readme.txt
@@ -0,0 +1,7 @@
+Automatically generated OpenLayers API documentation is online:
+
+ http://dev.openlayers.org/apidocs
+
+More information on documentation is available from:
+
+ http://trac.openlayers.org/wiki/Documentation
diff --git a/openlayers/doc/walkthru.html b/openlayers/doc/walkthru.html
new file mode 100644
index 0000000000..b135e63523
--- /dev/null
+++ b/openlayers/doc/walkthru.html
@@ -0,0 +1,96 @@
+
+
+OpenLayers examples walkthrough
+
+
+
+
+
+
+
diff --git a/openlayers/doc_config/Languages.txt b/openlayers/doc_config/Languages.txt
new file mode 100644
index 0000000000..42b197c21b
--- /dev/null
+++ b/openlayers/doc_config/Languages.txt
@@ -0,0 +1,113 @@
+Format: 1.52
+
+# This is the Natural Docs languages file for this project. If you change
+# anything here, it will apply to THIS PROJECT ONLY. If you'd like to change
+# something for all your projects, edit the Languages.txt in Natural Docs'
+# Config directory instead.
+
+
+# You can prevent certain file extensions from being scanned like this:
+# Ignore Extensions: [extension] [extension] ...
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Unlike other Natural Docs configuration files, in this file all comments
+# MUST be alone on a line. Some languages deal with the # character, so you
+# cannot put comments on the same line as content.
+#
+# Also, all lists are separated with spaces, not commas, again because some
+# languages may need to use them.
+#
+# Language: [name]
+# Alter Language: [name]
+# Defines a new language or alters an existing one. Its name can use any
+# characters. If any of the properties below have an add/replace form, you
+# must use that when using Alter Language.
+#
+# The language Shebang Script is special. It's entry is only used for
+# extensions, and files with those extensions have their shebang (#!) lines
+# read to determine the real language of the file. Extensionless files are
+# always treated this way.
+#
+# The language Text File is also special. It's treated as one big comment
+# so you can put Natural Docs content in them without special symbols. Also,
+# if you don't specify a package separator, ignored prefixes, or enum value
+# behavior, it will copy those settings from the language that is used most
+# in the source tree.
+#
+# Extensions: [extension] [extension] ...
+# [Add/Replace] Extensions: [extension] [extension] ...
+# Defines the file extensions of the language's source files. You can
+# redefine extensions found in the main languages file. You can use * to
+# mean any undefined extension.
+#
+# Shebang Strings: [string] [string] ...
+# [Add/Replace] Shebang Strings: [string] [string] ...
+# Defines a list of strings that can appear in the shebang (#!) line to
+# designate that it's part of the language. You can redefine strings found
+# in the main languages file.
+#
+# Ignore Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored Prefixes in Index: [prefix] [prefix] ...
+#
+# Ignore [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# Specifies prefixes that should be ignored when sorting symbols in an
+# index. Can be specified in general or for a specific topic type.
+#
+#------------------------------------------------------------------------------
+# For basic language support only:
+#
+# Line Comments: [symbol] [symbol] ...
+# Defines a space-separated list of symbols that are used for line comments,
+# if any.
+#
+# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ...
+# Defines a space-separated list of symbol pairs that are used for block
+# comments, if any.
+#
+# Package Separator: [symbol]
+# Defines the default package separator symbol. The default is a dot.
+#
+# [Topic Type] Prototype Enders: [symbol] [symbol] ...
+# When defined, Natural Docs will attempt to get a prototype from the code
+# immediately following the topic type. It stops when it reaches one of
+# these symbols. Use \n for line breaks.
+#
+# Line Extender: [symbol]
+# Defines the symbol that allows a prototype to span multiple lines if
+# normally a line break would end it.
+#
+# Enum Values: [global|under type|under parent]
+# Defines how enum values are referenced. The default is global.
+# global - Values are always global, referenced as 'value'.
+# under type - Values are under the enum type, referenced as
+# 'package.enum.value'.
+# under parent - Values are under the enum's parent, referenced as
+# 'package.value'.
+#
+# Perl Package: [perl package]
+# Specifies the Perl package used to fine-tune the language behavior in ways
+# too complex to do in this file.
+#
+#------------------------------------------------------------------------------
+# For full language support only:
+#
+# Full Language Support: [perl package]
+# Specifies the Perl package that has the parsing routines necessary for full
+# language support.
+#
+#-------------------------------------------------------------------------------
+
+# The following languages are defined in the main file, if you'd like to alter
+# them:
+#
+# Text File, Shebang Script, C/C++, C#, Java, JavaScript, Perl, Python,
+# PHP, SQL, Visual Basic, Pascal, Assembly, Ada, Tcl, Ruby, Makefile,
+# ActionScript, ColdFusion, R, Fortran
+
+# If you add a language that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# languages [at] naturaldocs [dot] org.
diff --git a/openlayers/doc_config/Menu.txt b/openlayers/doc_config/Menu.txt
new file mode 100644
index 0000000000..9d17464b31
--- /dev/null
+++ b/openlayers/doc_config/Menu.txt
@@ -0,0 +1,498 @@
+Format: 1.52
+
+
+Title: OpenLayers
+SubTitle: JavaScript Mapping Library
+
+# You can add a footer to your documentation like this:
+# Footer: [text]
+# If you want to add a copyright notice, this would be the place to do it.
+
+# You can add a timestamp to your documentation like one of these:
+# Timestamp: Generated on month day, year
+# Timestamp: Updated mm/dd/yyyy
+# Timestamp: Last updated mon day
+#
+# m - One or two digit month. January is "1"
+# mm - Always two digit month. January is "01"
+# mon - Short month word. January is "Jan"
+# month - Long month word. January is "January"
+# d - One or two digit day. 1 is "1"
+# dd - Always two digit day. 1 is "01"
+# day - Day with letter extension. 1 is "1st"
+# yy - Two digit year. 2006 is "06"
+# yyyy - Four digit year. 2006 is "2006"
+# year - Four digit year. 2006 is "2006"
+
+
+# --------------------------------------------------------------------------
+#
+# Cut and paste the lines below to change the order in which your files
+# appear on the menu. Don't worry about adding or removing files, Natural
+# Docs will take care of that.
+#
+# You can further organize the menu by grouping the entries. Add a
+# "Group: [name] {" line to start a group, and add a "}" to end it.
+#
+# You can add text and web links to the menu by adding "Text: [text]" and
+# "Link: [name] ([URL])" lines, respectively.
+#
+# The formatting and comments are auto-generated, so don't worry about
+# neatness when editing the file. Natural Docs will clean it up the next
+# time it is run. When working with groups, just deal with the braces and
+# forget about the indentation and comments.
+#
+# --------------------------------------------------------------------------
+
+
+Group: OpenLayers {
+
+ File: OpenLayers (no auto-title, OpenLayers.js)
+ File: Ajax (no auto-title, OpenLayers/Ajax.js)
+
+ Group: BaseTypes {
+
+ File: Base Types (no auto-title, OpenLayers/BaseTypes.js)
+ File: Bounds (no auto-title, OpenLayers/BaseTypes/Bounds.js)
+ File: Class (no auto-title, OpenLayers/BaseTypes/Class.js)
+ File: Date (no auto-title, OpenLayers/BaseTypes/Date.js)
+ File: Element (no auto-title, OpenLayers/BaseTypes/Element.js)
+ File: LonLat (no auto-title, OpenLayers/BaseTypes/LonLat.js)
+ File: Pixel (no auto-title, OpenLayers/BaseTypes/Pixel.js)
+ File: Size (no auto-title, OpenLayers/BaseTypes/Size.js)
+ } # Group: BaseTypes
+
+ File: Console (no auto-title, OpenLayers/Console.js)
+
+ Group: Control {
+
+ File: Control (no auto-title, OpenLayers/Control.js)
+ File: ArgParser (no auto-title, OpenLayers/Control/ArgParser.js)
+ File: Attribution (no auto-title, OpenLayers/Control/Attribution.js)
+ File: Button (no auto-title, OpenLayers/Control/Button.js)
+ File: DragFeature (no auto-title, OpenLayers/Control/DragFeature.js)
+ File: DragPan (no auto-title, OpenLayers/Control/DragPan.js)
+ File: DrawFeature (no auto-title, OpenLayers/Control/DrawFeature.js)
+ File: EditingToolbar (no auto-title, OpenLayers/Control/EditingToolbar.js)
+ File: Geolocate (no auto-title, OpenLayers/Control/Geolocate.js)
+ File: GetFeature (no auto-title, OpenLayers/Control/GetFeature.js)
+ File: Graticule (no auto-title, OpenLayers/Control/Graticule.js)
+ File: KeyboardDefaults (no auto-title, OpenLayers/Control/KeyboardDefaults.js)
+ File: LayerSwitcher (no auto-title, OpenLayers/Control/LayerSwitcher.js)
+ File: Measure (no auto-title, OpenLayers/Control/Measure.js)
+ File: ModifyFeature (no auto-title, OpenLayers/Control/ModifyFeature.js)
+ File: MouseDefaults (no auto-title, OpenLayers/Control/MouseDefaults.js)
+ File: MousePosition (no auto-title, OpenLayers/Control/MousePosition.js)
+ File: MouseToolbar (no auto-title, OpenLayers/Control/MouseToolbar.js)
+ File: Navigation (no auto-title, OpenLayers/Control/Navigation.js)
+ File: NavigationHistory (no auto-title, OpenLayers/Control/NavigationHistory.js)
+ File: NavToolbar (no auto-title, OpenLayers/Control/NavToolbar.js)
+ File: OverviewMap (no auto-title, OpenLayers/Control/OverviewMap.js)
+ File: Pan (no auto-title, OpenLayers/Control/Pan.js)
+ File: Panel (no auto-title, OpenLayers/Control/Panel.js)
+ File: PanPanel (no auto-title, OpenLayers/Control/PanPanel.js)
+ File: PanZoom (no auto-title, OpenLayers/Control/PanZoom.js)
+ File: PanZoomBar (no auto-title, OpenLayers/Control/PanZoomBar.js)
+ File: Permalink (no auto-title, OpenLayers/Control/Permalink.js)
+ File: PinchZoom (no auto-title, OpenLayers/Control/PinchZoom.js)
+ File: Scale (no auto-title, OpenLayers/Control/Scale.js)
+ File: ScaleLine (no auto-title, OpenLayers/Control/ScaleLine.js)
+ File: SelectFeature (no auto-title, OpenLayers/Control/SelectFeature.js)
+ File: SLDSelect (no auto-title, OpenLayers/Control/SLDSelect.js)
+ File: Snapping (no auto-title, OpenLayers/Control/Snapping.js)
+ File: Split (no auto-title, OpenLayers/Control/Split.js)
+ File: TouchNavigation (no auto-title, OpenLayers/Control/TouchNavigation.js)
+ File: TransformFeature (no auto-title, OpenLayers/Control/TransformFeature.js)
+ File: WMSGetFeatureInfo (no auto-title, OpenLayers/Control/WMSGetFeatureInfo.js)
+ File: WMTSGetFeatureInfo (no auto-title, OpenLayers/Control/WMTSGetFeatureInfo.js)
+ File: ZoomBox (no auto-title, OpenLayers/Control/ZoomBox.js)
+ File: ZoomIn (no auto-title, OpenLayers/Control/ZoomIn.js)
+ File: ZoomOut (no auto-title, OpenLayers/Control/ZoomOut.js)
+ File: ZoomPanel (no auto-title, OpenLayers/Control/ZoomPanel.js)
+ File: ZoomToMaxExtent (no auto-title, OpenLayers/Control/ZoomToMaxExtent.js)
+ } # Group: Control
+
+ File: Events (no auto-title, OpenLayers/Events.js)
+
+ Group: Feature {
+
+ File: Feature (no auto-title, OpenLayers/Feature.js)
+ File: Vector (no auto-title, OpenLayers/Feature/Vector.js)
+ File: WFS (no auto-title, OpenLayers/Feature/WFS.js)
+ } # Group: Feature
+
+ Group: Filter {
+
+ File: Filter (no auto-title, OpenLayers/Filter.js)
+ File: Comparison (no auto-title, OpenLayers/Filter/Comparison.js)
+ File: FeatureId (no auto-title, OpenLayers/Filter/FeatureId.js)
+ File: Function (no auto-title, OpenLayers/Filter/Function.js)
+ File: Logical (no auto-title, OpenLayers/Filter/Logical.js)
+ File: Spatial (no auto-title, OpenLayers/Filter/Spatial.js)
+ } # Group: Filter
+
+ Group: Format {
+
+ File: Format (no auto-title, OpenLayers/Format.js)
+ File: ArcXML (no auto-title, OpenLayers/Format/ArcXML.js)
+ File: ArcXML.Features (no auto-title, OpenLayers/Format/ArcXML/Features.js)
+ File: Atom (no auto-title, OpenLayers/Format/Atom.js)
+ File: Context (no auto-title, OpenLayers/Format/Context.js)
+ File: CQL (no auto-title, OpenLayers/Format/CQL.js)
+ File: CSWGetDomain (no auto-title, OpenLayers/Format/CSWGetDomain.js)
+ File: CSWGetDomain.v2_0_2 (no auto-title, OpenLayers/Format/CSWGetDomain/v2_0_2.js)
+ File: CSWGetRecords (no auto-title, OpenLayers/Format/CSWGetRecords.js)
+ File: CSWGetRecords.v2_0_2 (no auto-title, OpenLayers/Format/CSWGetRecords/v2_0_2.js)
+
+ Group: Filter {
+
+ File: Filter (no auto-title, OpenLayers/Format/Filter.js)
+ File: v1 (no auto-title, OpenLayers/Format/Filter/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/Filter/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/Filter/v1_1_0.js)
+ } # Group: Filter
+
+ File: GeoJSON (no auto-title, OpenLayers/Format/GeoJSON.js)
+ File: GeoRSS (no auto-title, OpenLayers/Format/GeoRSS.js)
+
+ Group: GML {
+
+ File: GML (no auto-title, OpenLayers/Format/GML.js)
+ File: Base (no auto-title, OpenLayers/Format/GML/Base.js)
+ File: v2 (no auto-title, OpenLayers/Format/GML/v2.js)
+ File: v3 (no auto-title, OpenLayers/Format/GML/v3.js)
+ } # Group: GML
+
+ File: GPX (no auto-title, OpenLayers/Format/GPX.js)
+ File: JSON (no auto-title, OpenLayers/Format/JSON.js)
+ File: KML (no auto-title, OpenLayers/Format/KML.js)
+ File: OGCExceptionReport (no auto-title, OpenLayers/Format/OGCExceptionReport.js)
+ File: OSM (no auto-title, OpenLayers/Format/OSM.js)
+ File: OWSCommon (no auto-title, OpenLayers/Format/OWSCommon.js)
+
+ Group: OWSCommon {
+
+ File: v1 (no auto-title, OpenLayers/Format/OWSCommon/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/OWSCommon/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/OWSCommon/v1_1_0.js)
+ } # Group: OWSCommon
+
+ File: OWSContext (no auto-title, OpenLayers/Format/OWSContext.js)
+ File: OWSContext.v0_3_1 (no auto-title, OpenLayers/Format/OWSContext/v0_3_1.js)
+ File: QueryStringFilter (no auto-title, OpenLayers/Format/QueryStringFilter.js)
+
+ Group: SLD {
+
+ File: SLD (no auto-title, OpenLayers/Format/SLD.js)
+ File: v1 (no auto-title, OpenLayers/Format/SLD/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/SLD/v1_0_0.js)
+ } # Group: SLD
+
+ File: SOSCapabilities (no auto-title, OpenLayers/Format/SOSCapabilities.js)
+ File: SOSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/SOSCapabilities/v1_0_0.js)
+ File: SOSGetFeatureOfInterest (no auto-title, OpenLayers/Format/SOSGetFeatureOfInterest.js)
+ File: SOSGetObservation (no auto-title, OpenLayers/Format/SOSGetObservation.js)
+ File: Text (no auto-title, OpenLayers/Format/Text.js)
+ File: WCSGetCoverage version 1.1.0 (no auto-title, OpenLayers/Format/WCSGetCoverage.js)
+ File: WFS (no auto-title, OpenLayers/Format/WFS.js)
+
+ Group: WFSCapabilities {
+
+ File: WFSCapabilities (no auto-title, OpenLayers/Format/WFSCapabilities.js)
+ File: v1 (no auto-title, OpenLayers/Format/WFSCapabilities/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WFSCapabilities/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WFSCapabilities/v1_1_0.js)
+ } # Group: WFSCapabilities
+
+ File: WFSDescribeFeatureType (no auto-title, OpenLayers/Format/WFSDescribeFeatureType.js)
+
+ Group: WFST {
+
+ File: WFST (no auto-title, OpenLayers/Format/WFST.js)
+ File: v1 (no auto-title, OpenLayers/Format/WFST/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WFST/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WFST/v1_1_0.js)
+ } # Group: WFST
+
+ File: WKT (no auto-title, OpenLayers/Format/WKT.js)
+
+ Group: WMC {
+
+ File: WMC (no auto-title, OpenLayers/Format/WMC.js)
+ File: v1 (no auto-title, OpenLayers/Format/WMC/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Format/WMC/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WMC/v1_1_0.js)
+ } # Group: WMC
+
+ Group: WMSCapabilities {
+
+ File: WMSCapabilities (no auto-title, OpenLayers/Format/WMSCapabilities.js)
+ File: v1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1.js)
+ File: v1_1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_0.js)
+ File: v1_1_1 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_1.js)
+ File: v1_3 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_3.js)
+ File: v1_3_0 (no auto-title, OpenLayers/Format/WMSCapabilities/v1_3_0.js)
+ File: WMSCapabilities/v1_1_1_WMSC (no auto-title, OpenLayers/Format/WMSCapabilities/v1_1_1_WMSC.js)
+ } # Group: WMSCapabilities
+
+ Group: WMSDescribeLayer {
+
+ File: WMSDescribeLayer (no auto-title, OpenLayers/Format/WMSDescribeLayer.js)
+ File: v1_1 (no auto-title, OpenLayers/Format/WMSDescribeLayer/v1_1.js)
+ } # Group: WMSDescribeLayer
+
+ File: WMSGetFeatureInfo (no auto-title, OpenLayers/Format/WMSGetFeatureInfo.js)
+ File: WMTSCapabilities (no auto-title, OpenLayers/Format/WMTSCapabilities.js)
+ File: WMTSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/WMTSCapabilities/v1_0_0.js)
+ File: WPSCapabilities (no auto-title, OpenLayers/Format/WPSCapabilities.js)
+ File: WPSCapabilities.v1_0_0 (no auto-title, OpenLayers/Format/WPSCapabilities/v1_0_0.js)
+ File: WPSDescribeProcess (no auto-title, OpenLayers/Format/WPSDescribeProcess.js)
+ File: WPSExecute version 1.0.0 (no auto-title, OpenLayers/Format/WPSExecute.js)
+ File: XLS (no auto-title, OpenLayers/Format/XLS.js)
+ File: XLS.v1 (no auto-title, OpenLayers/Format/XLS/v1.js)
+ File: XLS.v1_1_0 (no auto-title, OpenLayers/Format/XLS/v1_1_0.js)
+ File: XML (no auto-title, OpenLayers/Format/XML.js)
+ } # Group: Format
+
+ Group: Geometry {
+
+ File: Geometry (no auto-title, OpenLayers/Geometry.js)
+ File: Collection (no auto-title, OpenLayers/Geometry/Collection.js)
+ File: Curve (no auto-title, OpenLayers/Geometry/Curve.js)
+ File: LinearRing (no auto-title, OpenLayers/Geometry/LinearRing.js)
+ File: LineString (no auto-title, OpenLayers/Geometry/LineString.js)
+ File: MultiLineString (no auto-title, OpenLayers/Geometry/MultiLineString.js)
+ File: MultiPoint (no auto-title, OpenLayers/Geometry/MultiPoint.js)
+ File: MultiPolygon (no auto-title, OpenLayers/Geometry/MultiPolygon.js)
+ File: Point (no auto-title, OpenLayers/Geometry/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Geometry/Polygon.js)
+ File: Rectangle (no auto-title, OpenLayers/Geometry/Rectangle.js)
+ } # Group: Geometry
+
+ Group: Handler {
+
+ File: Handler (no auto-title, OpenLayers/Handler.js)
+ File: Box (no auto-title, OpenLayers/Handler/Box.js)
+ File: Click (no auto-title, OpenLayers/Handler/Click.js)
+ File: Drag (no auto-title, OpenLayers/Handler/Drag.js)
+ File: Feature (no auto-title, OpenLayers/Handler/Feature.js)
+ File: Hover (no auto-title, OpenLayers/Handler/Hover.js)
+ File: Keyboard (no auto-title, OpenLayers/Handler/Keyboard.js)
+ File: MouseWheel (no auto-title, OpenLayers/Handler/MouseWheel.js)
+ File: Path (no auto-title, OpenLayers/Handler/Path.js)
+ File: Pinch (no auto-title, OpenLayers/Handler/Pinch.js)
+ File: Point (no auto-title, OpenLayers/Handler/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Handler/Polygon.js)
+ File: RegularPolygon (no auto-title, OpenLayers/Handler/RegularPolygon.js)
+ } # Group: Handler
+
+ File: Icon (no auto-title, OpenLayers/Icon.js)
+ File: Kinetic (no auto-title, OpenLayers/Kinetic.js)
+
+ Group: Lang {
+
+ File: Lang (no auto-title, OpenLayers/Lang.js)
+ File: ar (no auto-title, OpenLayers/Lang/ar.js)
+ File: be-tarask (no auto-title, OpenLayers/Lang/be-tarask.js)
+ File: bg (no auto-title, OpenLayers/Lang/bg.js)
+ File: br (no auto-title, OpenLayers/Lang/br.js)
+ File: ca (no auto-title, OpenLayers/Lang/ca.js)
+ File: cs-CZ (no auto-title, OpenLayers/Lang/cs-CZ.js)
+ File: da-DK (no auto-title, OpenLayers/Lang/da-DK.js)
+ File: de (no auto-title, OpenLayers/Lang/de.js)
+ File: en (no auto-title, OpenLayers/Lang/en.js)
+ File: en-CA (no auto-title, OpenLayers/Lang/en-CA.js)
+ File: es (no auto-title, OpenLayers/Lang/es.js)
+ File: el (no auto-title, OpenLayers/Lang/el.js)
+ File: fi (no auto-title, OpenLayers/Lang/fi.js)
+ File: fr (no auto-title, OpenLayers/Lang/fr.js)
+ File: fur (no auto-title, OpenLayers/Lang/fur.js)
+ File: gl (no auto-title, OpenLayers/Lang/gl.js)
+ File: gsw (no auto-title, OpenLayers/Lang/gsw.js)
+ File: hr (no auto-title, OpenLayers/Lang/hr.js)
+ File: hsb (no auto-title, OpenLayers/Lang/hsb.js)
+ File: hu (no auto-title, OpenLayers/Lang/hu.js)
+ File: ia (no auto-title, OpenLayers/Lang/ia.js)
+ File: id (no auto-title, OpenLayers/Lang/id.js)
+ File: io (no auto-title, OpenLayers/Lang/io.js)
+ File: is (no auto-title, OpenLayers/Lang/is.js)
+ File: it (no auto-title, OpenLayers/Lang/it.js)
+ File: ja (no auto-title, OpenLayers/Lang/ja.js)
+ File: km (no auto-title, OpenLayers/Lang/km.js)
+ File: ksh (no auto-title, OpenLayers/Lang/ksh.js)
+ File: lt (no auto-title, OpenLayers/Lang/lt.js)
+ File: nds (no auto-title, OpenLayers/Lang/nds.js)
+ File: nb (no auto-title, OpenLayers/Lang/nb.js)
+ File: nl (no auto-title, OpenLayers/Lang/nl.js)
+ File: nn (no auto-title, OpenLayers/Lang/nn.js)
+ File: oc (no auto-title, OpenLayers/Lang/oc.js)
+ File: pt (no auto-title, OpenLayers/Lang/pt.js)
+ File: pt-BR (no auto-title, OpenLayers/Lang/pt-BR.js)
+ File: ru (no auto-title, OpenLayers/Lang/ru.js)
+ File: sk (no auto-title, OpenLayers/Lang/sk.js)
+ File: sv-SE (no auto-title, OpenLayers/Lang/sv-SE.js)
+ File: te (no auto-title, OpenLayers/Lang/te.js)
+ File: vi (no auto-title, OpenLayers/Lang/vi.js)
+ File: zh-CN (no auto-title, OpenLayers/Lang/zh-CN.js)
+ File: zh-TW (no auto-title, OpenLayers/Lang/zh-TW.js)
+ } # Group: Lang
+
+ Group: Layer {
+
+ File: Layer (no auto-title, OpenLayers/Layer.js)
+ File: ArcGISCache.js (no auto-title, OpenLayers/Layer/ArcGISCache.js)
+ File: ArcGIS93Rest (no auto-title, OpenLayers/Layer/ArcGIS93Rest.js)
+ File: ArcIMS (no auto-title, OpenLayers/Layer/ArcIMS.js)
+ File: Bing (no auto-title, OpenLayers/Layer/Bing.js)
+ File: Boxes (no auto-title, OpenLayers/Layer/Boxes.js)
+ File: EventPane (no auto-title, OpenLayers/Layer/EventPane.js)
+ File: FixedZoomLevels (no auto-title, OpenLayers/Layer/FixedZoomLevels.js)
+ File: GeoRSS (no auto-title, OpenLayers/Layer/GeoRSS.js)
+ File: GML (no auto-title, OpenLayers/Layer/GML.js)
+ File: Google (no auto-title, OpenLayers/Layer/Google.js)
+ File: Google.v3 (no auto-title, OpenLayers/Layer/Google/v3.js)
+ File: GoogleNG (no auto-title, OpenLayers/Layer/GoogleNG.js)
+ File: Grid (no auto-title, OpenLayers/Layer/Grid.js)
+ File: HTTPRequest (no auto-title, OpenLayers/Layer/HTTPRequest.js)
+ File: Image (no auto-title, OpenLayers/Layer/Image.js)
+ File: KaMap (no auto-title, OpenLayers/Layer/KaMap.js)
+ File: KaMapCache (no auto-title, OpenLayers/Layer/KaMapCache.js)
+ File: MapGuide (no auto-title, OpenLayers/Layer/MapGuide.js)
+ File: MapServer (no auto-title, OpenLayers/Layer/MapServer.js)
+ File: MapServer.Untiled (no auto-title, OpenLayers/Layer/MapServer/Untiled.js)
+ File: Markers (no auto-title, OpenLayers/Layer/Markers.js)
+ File: MultiMap (no auto-title, OpenLayers/Layer/MultiMap.js)
+ File: PointGrid (no auto-title, OpenLayers/Layer/PointGrid.js)
+ File: PointTrack (no auto-title, OpenLayers/Layer/PointTrack.js)
+ File: SphericalMercator (no auto-title, OpenLayers/Layer/SphericalMercator.js)
+ File: Text (no auto-title, OpenLayers/Layer/Text.js)
+ File: TileCache (no auto-title, OpenLayers/Layer/TileCache.js)
+ File: TMS (no auto-title, OpenLayers/Layer/TMS.js)
+ File: Vector (no auto-title, OpenLayers/Layer/Vector.js)
+ File: Vector.RootContainer (no auto-title, OpenLayers/Layer/Vector/RootContainer.js)
+ File: VirtualEarth (no auto-title, OpenLayers/Layer/VirtualEarth.js)
+ File: WFS (no auto-title, OpenLayers/Layer/WFS.js)
+ File: WMS (no auto-title, OpenLayers/Layer/WMS.js)
+ File: WMS.Untiled (no auto-title, OpenLayers/Layer/WMS/Untiled.js)
+ File: WMS.Post (no auto-title, OpenLayers/Layer/WMS/Post.js)
+ File: WMTS (no auto-title, OpenLayers/Layer/WMTS.js)
+ File: WorldWind (no auto-title, OpenLayers/Layer/WorldWind.js)
+ File: XYZ (no auto-title, OpenLayers/Layer/XYZ.js)
+ File: Yahoo (no auto-title, OpenLayers/Layer/Yahoo.js)
+ File: Zoomify (no auto-title, OpenLayers/Layer/Zoomify.js)
+ } # Group: Layer
+
+ File: Map (no auto-title, OpenLayers/Map.js)
+
+ Group: Marker {
+
+ File: Marker (no auto-title, OpenLayers/Marker.js)
+ File: Box (no auto-title, OpenLayers/Marker/Box.js)
+ } # Group: Marker
+
+ Group: Popup {
+
+ File: Popup (no auto-title, OpenLayers/Popup.js)
+ File: Anchored (no auto-title, OpenLayers/Popup/Anchored.js)
+ File: AnchoredBubble (no auto-title, OpenLayers/Popup/AnchoredBubble.js)
+ File: Framed (no auto-title, OpenLayers/Popup/Framed.js)
+ File: FramedCloud (no auto-title, OpenLayers/Popup/FramedCloud.js)
+ } # Group: Popup
+
+ File: Projection (no auto-title, OpenLayers/Projection.js)
+
+ Group: Protocol {
+
+ File: Protocol (no auto-title, OpenLayers/Protocol.js)
+ File: HTTP (no auto-title, OpenLayers/Protocol/HTTP.js)
+
+ Group: SQL {
+
+ File: SQL (no auto-title, OpenLayers/Protocol/SQL.js)
+ File: Gears (no auto-title, OpenLayers/Protocol/SQL/Gears.js)
+ } # Group: SQL
+
+ Group: WFS {
+
+ File: WFS (no auto-title, OpenLayers/Protocol/WFS.js)
+ File: v1 (no auto-title, OpenLayers/Protocol/WFS/v1.js)
+ File: v1_0_0 (no auto-title, OpenLayers/Protocol/WFS/v1_0_0.js)
+ File: v1_1_0 (no auto-title, OpenLayers/Protocol/WFS/v1_1_0.js)
+ } # Group: WFS
+
+ File: Script (no auto-title, OpenLayers/Protocol/Script.js)
+ File: SOS.DEFAULTS (no auto-title, OpenLayers/Protocol/SOS.js)
+ File: SOS.v1_0_0 (no auto-title, OpenLayers/Protocol/SOS/v1_0_0.js)
+ } # Group: Protocol
+
+ Group: Renderer {
+
+ File: Renderer (no auto-title, OpenLayers/Renderer.js)
+ File: Canvas (no auto-title, OpenLayers/Renderer/Canvas.js)
+ File: ElementsIndexer (no auto-title, OpenLayers/Renderer/Elements.js)
+ File: NG (no auto-title, OpenLayers/Renderer/NG.js)
+ File: SVG (no auto-title, OpenLayers/Renderer/SVG.js)
+ File: SVG2 (no auto-title, OpenLayers/Renderer/SVG2.js)
+ File: VML (no auto-title, OpenLayers/Renderer/VML.js)
+ } # Group: Renderer
+
+ Group: Request {
+
+ File: Request (no auto-title, OpenLayers/Request.js)
+ File: XMLHttpRequest (no auto-title, OpenLayers/Request/XMLHttpRequest.js)
+ } # Group: Request
+
+ File: SingleFile.js (no auto-title, OpenLayers/SingleFile.js)
+ File: Rule (no auto-title, OpenLayers/Rule.js)
+
+ Group: Strategy {
+
+ File: Strategy (no auto-title, OpenLayers/Strategy.js)
+ File: BBOX (no auto-title, OpenLayers/Strategy/BBOX.js)
+ File: Cluster (no auto-title, OpenLayers/Strategy/Cluster.js)
+ File: Filter (no auto-title, OpenLayers/Strategy/Filter.js)
+ File: Fixed (no auto-title, OpenLayers/Strategy/Fixed.js)
+ File: Paging (no auto-title, OpenLayers/Strategy/Paging.js)
+ File: Refresh (no auto-title, OpenLayers/Strategy/Refresh.js)
+ File: Save (no auto-title, OpenLayers/Strategy/Save.js)
+ } # Group: Strategy
+
+ File: Style (no auto-title, OpenLayers/Style.js)
+ File: Style2 (no auto-title, OpenLayers/Style2.js)
+ File: StyleMap (no auto-title, OpenLayers/StyleMap.js)
+
+ Group: Symbolizer {
+
+ File: Symbolizer (no auto-title, OpenLayers/Symbolizer.js)
+ File: Line (no auto-title, OpenLayers/Symbolizer/Line.js)
+ File: Point (no auto-title, OpenLayers/Symbolizer/Point.js)
+ File: Polygon (no auto-title, OpenLayers/Symbolizer/Polygon.js)
+ File: Raster (no auto-title, OpenLayers/Symbolizer/Raster.js)
+ File: Text (no auto-title, OpenLayers/Symbolizer/Text.js)
+ } # Group: Symbolizer
+
+ Group: Tile {
+
+ File: Tile (no auto-title, OpenLayers/Tile.js)
+ File: Google (no auto-title, OpenLayers/Tile/Google.js)
+ File: Image (no auto-title, OpenLayers/Tile/Image.js)
+ File: Image.IFrame (no auto-title, OpenLayers/Tile/Image/IFrame.js)
+ File: WFS (no auto-title, OpenLayers/Tile/WFS.js)
+ } # Group: Tile
+
+ File: Tween (no auto-title, OpenLayers/Tween.js)
+ File: Util (no auto-title, OpenLayers/Util.js)
+ } # Group: OpenLayers
+
+Group: Index {
+
+ Index: Everything
+ Class Index: Classes
+ Constant Index: Constants
+ Function Index: Functions
+ Property Index: Properties
+ File Index: Files
+ Constructor Index: Constructor
+ } # Group: Index
+
diff --git a/openlayers/doc_config/OL.css b/openlayers/doc_config/OL.css
new file mode 100644
index 0000000000..a397119822
--- /dev/null
+++ b/openlayers/doc_config/OL.css
@@ -0,0 +1,20 @@
+p {
+ text-indent: 0; margin-bottom: 1em;
+}
+
+.MGroup {
+ font-variant: normal;
+ margin: 0.4em 0 0em 10px
+}
+
+.MTitle {
+ font-variant: normal;
+}
+
+.CGroup .CTitle {
+ font-variant: normal;
+}
+
+.SGroup .SEntry {
+ font-variant: normal;
+}
\ No newline at end of file
diff --git a/openlayers/doc_config/Topics.txt b/openlayers/doc_config/Topics.txt
new file mode 100644
index 0000000000..087d348542
--- /dev/null
+++ b/openlayers/doc_config/Topics.txt
@@ -0,0 +1,102 @@
+Format: 1.52
+
+# This is the Natural Docs topics file for this project. If you change anything
+# here, it will apply to THIS PROJECT ONLY. If you'd like to change something
+# for all your projects, edit the Topics.txt in Natural Docs' Config directory
+# instead.
+
+
+# If you'd like to prevent keywords from being recognized by Natural Docs, you
+# can do it like this:
+# Ignore Keywords: [keyword], [keyword], ...
+#
+# Or you can use the list syntax like how they are defined:
+# Ignore Keywords:
+# [keyword]
+# [keyword], [plural keyword]
+# ...
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Topic Type: [name]
+# Alter Topic Type: [name]
+# Creates a new topic type or alters one from the main file. Each type gets
+# its own index and behavior settings. Its name can have letters, numbers,
+# spaces, and these charaters: - / . '
+#
+# Plural: [name]
+# Sets the plural name of the topic type, if different.
+#
+# Keywords:
+# [keyword]
+# [keyword], [plural keyword]
+# ...
+# Defines or adds to the list of keywords for the topic type. They may only
+# contain letters, numbers, and spaces and are not case sensitive. Plural
+# keywords are used for list topics. You can redefine keywords found in the
+# main topics file.
+#
+# Index: [yes|no]
+# Whether the topics get their own index. Defaults to yes. Everything is
+# included in the general index regardless of this setting.
+#
+# Scope: [normal|start|end|always global]
+# How the topics affects scope. Defaults to normal.
+# normal - Topics stay within the current scope.
+# start - Topics start a new scope for all the topics beneath it,
+# like class topics.
+# end - Topics reset the scope back to global for all the topics
+# beneath it.
+# always global - Topics are defined as global, but do not change the scope
+# for any other topics.
+#
+# Class Hierarchy: [yes|no]
+# Whether the topics are part of the class hierarchy. Defaults to no.
+#
+# Page Title If First: [yes|no]
+# Whether the topic's title becomes the page title if it's the first one in
+# a file. Defaults to no.
+#
+# Break Lists: [yes|no]
+# Whether list topics should be broken into individual topics in the output.
+# Defaults to no.
+#
+# Can Group With: [type], [type], ...
+# Defines a list of topic types that this one can possibly be grouped with.
+# Defaults to none.
+#-------------------------------------------------------------------------------
+
+# The following topics are defined in the main file, if you'd like to alter
+# their behavior or add keywords:
+#
+# Generic, Class, Interface, Section, File, Group, Function, Variable,
+# Property, Type, Constant, Enumeration, Event, Delegate, Macro,
+# Database, Database Table, Database View, Database Index, Database
+# Cursor, Database Trigger, Cookie, Build Target
+
+# If you add something that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# topics [at] naturaldocs [dot] org.
+
+
+Topic Type: Constructor
+
+ Class Hierarchy: Yes
+ Keywords:
+ constructor
+ initialize
+
+
+Alter Topic Type: Function
+
+ Add Keywords:
+ apimethod
+ apifunction
+
+
+Alter Topic Type: Property
+
+ Add Keywords:
+ apiproperty
diff --git a/openlayers/examples/Jugl.js b/openlayers/examples/Jugl.js
new file mode 100644
index 0000000000..4f81a275cb
--- /dev/null
+++ b/openlayers/examples/Jugl.js
@@ -0,0 +1,8 @@
+/*
+ * Jugl.js -- JavaScript Template Library
+ *
+ * Copyright 2007-2010 Tim Schaub
+ * Released under the MIT license. Please see
+ * http://github.com/tschaub/jugl/blob/master/license.txt for the full license.
+ */
+(function(){var f={prefix:"jugl",namespaceURI:null,loadTemplate:function(h){var i=function(l){var m,k,n=!l.status||(l.status>=200&&l.status<300);if(n){try{m=l.responseXML;k=new e(m.documentElement)}catch(j){m=document.createElement("div");m.innerHTML=l.responseText;k=new e(m.firstChild)}if(h.callback){h.callback.call(h.scope,k)}}else{if(h.failure){h.failure.call(h.scope,l)}}};d(h.url,i)}};var g=function(h,j){h=h||{};j=j||{};for(var i in j){h[i]=j[i]}return h};var a=function(l,o){var m,n,k,j,h;if(typeof(l)==="string"){m=document.getElementById(l);if(!m){throw Error("Element id not found: "+l)}l=m}if(typeof(o)==="string"){m=document.getElementById(o);if(!m){throw Error("Element id not found: "+o)}o=m}if(o.namespaceURI&&o.xml){n=document.createElement("div");n.innerHTML=o.xml;k=n.childNodes;for(j=0,h=k.length;j
+
+
+
+
+
+ OpenLayers KML Parser Example
+
+
+
+
+
+
KML Parser Example
+
+
+ KML, parsing, format
+
+
+
+ Demonstrate the operation of the KML parser.
+
+
+
+
+
+
This script reads data from a KML file and parses out the
+ coordinates, appending them to a HTML string with markup tags.
+ This markup is dumped to an element in the page.
+
+
+
diff --git a/openlayers/examples/SLDSelect.html b/openlayers/examples/SLDSelect.html
new file mode 100644
index 0000000000..ff07e319d1
--- /dev/null
+++ b/openlayers/examples/SLDSelect.html
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+ OpenLayers SLD based selection control
+
+
+
+
+
+
+
+
SLD based selection on WMS layers
+
+
+ sld, sldselect, styling, style
+
+
+
Using Styled Layer Descriptors to make a selection on WMS layers
+
+
+
+
+ This example uses the OpenLayers.Control.SLDSelect to select features in a WMS
+ layer. The features are highlighted using Styled Layer Descriptors (SLD). The
+ control supports point, box, line and polygon selection modes by configuring the
+ appriopriate handler.
+
+ Demonstrate the operation of the WMSDescribeLayer parser.
+
+
+
+
+
+
This script reads data from a file and parses out the coordinates,
+ appending them to a HTML string with markup tags. This markup is
+ dumped to an element in the page.
If access keys work for links in your browser, use:
+
+
i (zoom in)
+
o (zoom out)
+
n (pan north)
+
s (pan south)
+
e (pan east)
+
w (pan west)
+
+
+
+
+
+ This is an example of using alternate methods to control panning and zooming. This approach uses map.pan() and map.zoom(). You'll note that to pan, additional math is necessary along with map.size() in order to set the distance to pan.
+
+
+
diff --git a/openlayers/examples/all-overlays-google.html b/openlayers/examples/all-overlays-google.html
new file mode 100644
index 0000000000..55fa828acf
--- /dev/null
+++ b/openlayers/examples/all-overlays-google.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ OpenLayers All Overlays with Google and OSM
+
+
+
+
+
+
+
+
+
+ Using the allOverlays property on the map, the first layer added
+ must initially be visible. This example demonstrates the use of
+ a Google layer and an OSM layer treated as overlays.
+
+
+
diff --git a/openlayers/examples/all-overlays-google.js b/openlayers/examples/all-overlays-google.js
new file mode 100644
index 0000000000..f26d3fc80e
--- /dev/null
+++ b/openlayers/examples/all-overlays-google.js
@@ -0,0 +1,19 @@
+var map;
+
+function init() {
+
+ map = new OpenLayers.Map({
+ div: "map",
+ allOverlays: true
+ });
+
+ var osm = new OpenLayers.Layer.OSM();
+ var gmap = new OpenLayers.Layer.Google("Google Streets", {visibility: false});
+
+ // note that first layer must be visible
+ map.addLayers([osm, gmap]);
+
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+ map.zoomToMaxExtent();
+
+}
diff --git a/openlayers/examples/all-overlays.html b/openlayers/examples/all-overlays.html
new file mode 100644
index 0000000000..cecda0e79c
--- /dev/null
+++ b/openlayers/examples/all-overlays.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+ All Overlays Example
+
+
+
+
+
+
+
+
OpenLayers Overlays Only Example
+
+ overlay, baselayer
+
+
+ Demonstrates a map with overlays only.
+
+
+
+ To create a map that allows any draw order with all layer types
+ and lets you set the visibility of any layer independently, set
+ the allOverlays property on the map to true.
+
+
+
diff --git a/openlayers/examples/anchor-permalink.js b/openlayers/examples/anchor-permalink.js
new file mode 100644
index 0000000000..1ad29392ac
--- /dev/null
+++ b/openlayers/examples/anchor-permalink.js
@@ -0,0 +1,13 @@
+function init() {
+ var map = new OpenLayers.Map({
+ div: "map",
+ projection: new OpenLayers.Projection("EPSG:900913"),
+ displayProjection: new OpenLayers.Projection("EPSG:4326"),
+ layers: [
+ new OpenLayers.Layer.OSM()
+ ]
+ });
+ if (!map.getCenter()) map.zoomToMaxExtent();
+
+ map.addControl(new OpenLayers.Control.Permalink({anchor: true}));
+}
diff --git a/openlayers/examples/animated_panning.html b/openlayers/examples/animated_panning.html
new file mode 100644
index 0000000000..a07017cc8e
--- /dev/null
+++ b/openlayers/examples/animated_panning.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+ Animated Panning of the Map via map.panTo
+
+
+
+
+
+
+
map.panTo Example
+
+ panning, animation, effect, smooth, panMethod
+
+
Show animated panning effects in the map
+
+
+
This is an example of transition effects. If the new random center is in the current extent, the map will pan smoothly.
+ The random selection will continue until you press it again. Additionally, you can single click in the map to pan smoothly
+ to that area, or use the pan control to pan smoothly.
+
+
+
+
+
+
To turn off Animated Panning, create a map with an panMethod set to
+ null.
+
+
+
diff --git a/openlayers/examples/animator.js b/openlayers/examples/animator.js
new file mode 100644
index 0000000000..abe540377b
--- /dev/null
+++ b/openlayers/examples/animator.js
@@ -0,0 +1,670 @@
+/*
+ Animator.js 1.1.9
+
+ This library is released under the BSD license:
+
+ Copyright (c) 2006, Bernard Sumption. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. Redistributions in binary
+ form must reproduce the above copyright notice, this list of conditions and
+ the following disclaimer in the documentation and/or other materials
+ provided with the distribution. Neither the name BernieCode nor
+ the names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+*/
+
+
+// Applies a sequence of numbers between 0 and 1 to a number of subjects
+// construct - see setOptions for parameters
+function Animator(options) {
+ this.setOptions(options);
+ var _this = this;
+ this.timerDelegate = function(){_this.onTimerEvent()};
+ this.subjects = [];
+ this.target = 0;
+ this.state = 0;
+ this.lastTime = null;
+};
+Animator.prototype = {
+ // apply defaults
+ setOptions: function(options) {
+ this.options = Animator.applyDefaults({
+ interval: 20, // time between animation frames
+ duration: 400, // length of animation
+ onComplete: function(){},
+ onStep: function(){},
+ transition: Animator.tx.easeInOut
+ }, options);
+ },
+ // animate from the current state to provided value
+ seekTo: function(to) {
+ this.seekFromTo(this.state, to);
+ },
+ // animate from the current state to provided value
+ seekFromTo: function(from, to) {
+ this.target = Math.max(0, Math.min(1, to));
+ this.state = Math.max(0, Math.min(1, from));
+ this.lastTime = new Date().getTime();
+ if (!this.intervalId) {
+ this.intervalId = window.setInterval(this.timerDelegate, this.options.interval);
+ }
+ },
+ // animate from the current state to provided value
+ jumpTo: function(to) {
+ this.target = this.state = Math.max(0, Math.min(1, to));
+ this.propagate();
+ },
+ // seek to the opposite of the current target
+ toggle: function() {
+ this.seekTo(1 - this.target);
+ },
+ // add a function or an object with a method setState(state) that will be called with a number
+ // between 0 and 1 on each frame of the animation
+ addSubject: function(subject) {
+ this.subjects[this.subjects.length] = subject;
+ return this;
+ },
+ // remove all subjects
+ clearSubjects: function() {
+ this.subjects = [];
+ },
+ // forward the current state to the animation subjects
+ propagate: function() {
+ var value = this.options.transition(this.state);
+ for (var i=0; i= Math.abs(this.state - this.target)) {
+ this.state = this.target;
+ } else {
+ this.state += movement;
+ }
+
+ try {
+ this.propagate();
+ } finally {
+ this.options.onStep.call(this);
+ if (this.target == this.state) {
+ window.clearInterval(this.intervalId);
+ this.intervalId = null;
+ this.options.onComplete.call(this);
+ }
+ }
+ },
+ // shortcuts
+ play: function() {this.seekFromTo(0, 1)},
+ reverse: function() {this.seekFromTo(1, 0)},
+ // return a string describing this Animator, for debugging
+ inspect: function() {
+ var str = "#";
+ return str;
+ }
+}
+// merge the properties of two objects
+Animator.applyDefaults = function(defaults, prefs) {
+ prefs = prefs || {};
+ var prop, result = {};
+ for (prop in defaults) result[prop] = prefs[prop] !== undefined ? prefs[prop] : defaults[prop];
+ return result;
+}
+// make an array from any object
+Animator.makeArray = function(o) {
+ if (o == null) return [];
+ if (!o.length) return [o];
+ var result = [];
+ for (var i=0; i 20) return;
+ }
+ },
+ getStyle: function(state) {
+ state = this.from + ((this.to - this.from) * state);
+ if (this.property == 'filter') return "alpha(opacity=" + Math.round(state*100) + ")";
+ if (this.property == 'opacity') return state;
+ return Math.round(state) + this.units;
+ },
+ inspect: function() {
+ return "\t" + this.property + "(" + this.from + this.units + " to " + this.to + this.units + ")\n";
+ }
+}
+
+// animates a colour based style property between two hex values
+function ColorStyleSubject(els, property, from, to) {
+ this.els = Animator.makeArray(els);
+ this.property = Animator.camelize(property);
+ this.to = this.expandColor(to);
+ this.from = this.expandColor(from);
+ this.origFrom = from;
+ this.origTo = to;
+}
+
+ColorStyleSubject.prototype = {
+ // parse "#FFFF00" to [256, 256, 0]
+ expandColor: function(color) {
+ var hexColor, red, green, blue;
+ hexColor = ColorStyleSubject.parseColor(color);
+ if (hexColor) {
+ red = parseInt(hexColor.slice(1, 3), 16);
+ green = parseInt(hexColor.slice(3, 5), 16);
+ blue = parseInt(hexColor.slice(5, 7), 16);
+ return [red,green,blue]
+ }
+ if (window.DEBUG) {
+ alert("Invalid colour: '" + color + "'");
+ }
+ },
+ getValueForState: function(color, state) {
+ return Math.round(this.from[color] + ((this.to[color] - this.from[color]) * state));
+ },
+ setState: function(state) {
+ var color = '#'
+ + ColorStyleSubject.toColorPart(this.getValueForState(0, state))
+ + ColorStyleSubject.toColorPart(this.getValueForState(1, state))
+ + ColorStyleSubject.toColorPart(this.getValueForState(2, state));
+ for (var i=0; i 255) number = 255;
+ var digits = number.toString(16);
+ if (number < 16) return '0' + digits;
+ return digits;
+}
+ColorStyleSubject.parseColor.rgbRe = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i;
+ColorStyleSubject.parseColor.hexRe = /^\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
+
+// Animates discrete styles, i.e. ones that do not scale but have discrete values
+// that can't be interpolated
+function DiscreteStyleSubject(els, property, from, to, threshold) {
+ this.els = Animator.makeArray(els);
+ this.property = Animator.camelize(property);
+ this.from = from;
+ this.to = to;
+ this.threshold = threshold || 0.5;
+}
+
+DiscreteStyleSubject.prototype = {
+ setState: function(state) {
+ var j=0;
+ for (var i=0; i section ? 1 : 0);
+ }
+ if (this.options.rememberance) {
+ document.location.hash = this.rememberanceTexts[section];
+ }
+ }
+}
diff --git a/openlayers/examples/arcgis93rest.html b/openlayers/examples/arcgis93rest.html
new file mode 100644
index 0000000000..67a96da3fe
--- /dev/null
+++ b/openlayers/examples/arcgis93rest.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
ArcGIS Server 9.3 Rest API Example
+
+
+ ESRI, ArcGIS, REST, filter
+
+
+ Shows the basic use of openlayers using an ArcGIS Server 9.3 Rest API layer
+
+
+
+
+
+ This is an example of how to add an ArcGIS Server 9.3 Rest API layer to the OpenLayers window.
+
OpenLayers ArcGIS Cache Example (MapServer Access)
+
+
+ arcgis, arcgiscache, cache, tms
+
+
+
+ Demonstrates the basic initialization of the ArcGIS Cache layer using a prebuilt configuration, and standard tile access.
+
+
+
+
+
+
This example demonstrates using the ArcGISCache layer for
+ accessing ESRI's ArcGIS Server (AGS) Map Cache tiles through
+ an AGS MapServer. Toggle the visibility of the AGS layer to
+ demonstrate how the two maps are lined up correctly.
+
+
Notes on this layer
+
A few attempts have been made at this kind of layer before. See
+ here and
+ here.
+ A problem the users encounter is that the tiles seem to "jump around".
+ This is due to the fact that the max extent for the cached layer actually
+ changes at each zoom level due to the way these caches are constructed.
+ We have attempted to use the resolutions, tile size, and tile origin
+ from the cache meta data to make the appropriate changes to the max extent
+ of the tile to compensate for this behavior.
+ You will need to know:
+
+
Max Extent: The max extent of the layer
+
Resolutions: An array of resolutions, one for each zoom level
+
Tile Origin: The location of the tile origin for the cache in the upper left.
+
Tile Size: The size of each tile in the cache. Commonly 256 x 256
+
+
diff --git a/openlayers/examples/arcgiscache_direct.html b/openlayers/examples/arcgiscache_direct.html
new file mode 100644
index 0000000000..472a48014a
--- /dev/null
+++ b/openlayers/examples/arcgiscache_direct.html
@@ -0,0 +1,108 @@
+
+
+
+ ArcGIS Server Map Cache Example (Direct Access)
+
+
+
+
+
+
+
+
+
ArcGIS Server Map Cache Example (Direct Access)
+
+
+
+
+
+ Demonstrates the basic initialization of the ArcGIS Cache layer using a prebuilt configuration, and direct tile access from a file store.
+
+
+
+
+
+
This example demonstrates using the ArcGISCache layer for
+ accessing ESRI's ArcGIS Server (AGS) Map Cache tiles directly
+ via the folder structure and HTTP. Toggle the visibility of the AGS layer to
+ demonstrate how the two maps are lined up correctly.
+
+
Notes on this Layer
+
It's important that you set the correct values in your layer, and these
+ values will differ between tile sets. You can find these values for your
+ layer in conf.xml at the root of your cache.
+ (ie. http://serverx.esri.com/arcgiscache/dgaerials/Layers/conf.xml)
+
+
For fused map caches this is often http:ServerName/arcgiscache/MapServiceName/Layers
+ For individual layer caches this is often http:ServerName/arcgiscache/LayerName/Layers
OpenLayers ArcGIS Cache Example (Autoconfigure with JSONP)
+
+
+ arcgis, arcgiscache, cache, tms, jsonp
+
+
+
+ Demonstrates the basic initialization of the ArcGIS Cache layer by using the server capabilities object.
+
+
+
+
+
+
This example demonstrates using the ArcGISCache layer for
+ accessing ESRI's ArcGIS Server (AGS) Map Cache tiles normally through
+ a live AGS MapServer. Toggle the visibility of the overlay to
+ demonstrate how the two layers are lined up correctly.
+
+
Notes on this Layer
+
+ This method automatically configures the layer using the capabilities object
+ generated by the server itself. This page shows how to construct the url for the server capabilities object,
+ retrieve it using JSONP (and jQuery), and pass it in during construction. Note that in this case,
+ the layer is constructed before the map. This approach greatly simplifies the
+ configuration of your map, and works best when all your tiles / overlays are similarly laid out.
+ If you are using a live AGS map server for your layer, it can be helpful to check your
+ server configuration using this technique before trying one of the other examples for this layer.
+
+ Shows the advanced use of OpenLayers using a thematic ArcIMS layer
+
+
+
+
+
+
This is an example of how to add an ArcIMS layer to an OpenLayers map.
+
+
Following the ArcXML convention to create a thematic (or chloropleth) map,
+ a layer definition is created with a query and a renderer to select portions
+ of the map data, and change their representation in the generated map tiles.
+ Shows the use of the attribution layer option on a number of layer types.
+
+
+
+
+
+
This is an example of how to add an attribution block to the OpenLayers window. In order to use an
+ attribution block, an attribution parameter must be set in each layer that requires attribution. In
+ addition, an attribution control must be added to the map, though one is added to all OpenLayers Maps by default.
+ Be aware that this is a layer option: the options hash goes in
+ different places depending on the layer type you are using.
+ Vector layer with a Fixed strategy, HTTP protocol, and GML format.
+
+
+
+
The vector layer shown uses the Fixed strategy, the HTTP protocol,
+ and the GML format.
+ The Fixed strategy is a simple strategy that fetches features once
+ and never re-requests new data.
+ The HTTP protocol makes requests using HTTP verbs. It should be
+ constructed with a url that corresponds to a collection of features
+ (a resource on some server).
+ The GML format is used to serialize features.
+
+
+
diff --git a/openlayers/examples/bing-tiles-restrictedzoom.html b/openlayers/examples/bing-tiles-restrictedzoom.html
new file mode 100644
index 0000000000..992bd143ab
--- /dev/null
+++ b/openlayers/examples/bing-tiles-restrictedzoom.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+ Basic Bing Tiles with a Subset of Resolutions Example
+
+
+
+
+
+
Bing Tiles with a Subset of Resolutions Example
+
+
+ bing tiles restrictedMinZoom numZoomLevels
+
+
+
Use Bing with direct tile access
+
+
+
+
+
+ This example shows how to use the maxResolution and
+ numZoomLevels layer properties to restrict
+ the number of zoom levels displayed on the Bing layer.
+
+
+
+
+
diff --git a/openlayers/examples/browser.js b/openlayers/examples/browser.js
new file mode 100644
index 0000000000..a593ca64ab
--- /dev/null
+++ b/openlayers/examples/browser.js
@@ -0,0 +1,241 @@
+var isEventSupported = (function(undef) {
+
+ var TAGNAMES = {
+ 'select':'input',
+ 'change':'input',
+ 'submit':'form',
+ 'reset':'form',
+ 'error':'img',
+ 'load':'img',
+ 'abort':'img'
+ };
+
+ function isEventSupported(eventName, element) {
+ element = element || document.createElement(TAGNAMES[eventName] || 'div');
+ eventName = 'on' + eventName;
+
+ var isSupported = (eventName in element);
+
+ if (!isSupported) {
+ // if it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
+ if (!element.setAttribute) {
+ element = document.createElement('div');
+ }
+ if (element.setAttribute && element.removeAttribute) {
+ element.setAttribute(eventName, '');
+ isSupported = typeof element[eventName] == 'function';
+
+ // if property was created, "remove it" (by setting value to `undefined`)
+ if (typeof element[eventName] != 'undefined') {
+ element[eventName] = undef;
+ }
+ element.removeAttribute(eventName);
+ }
+ }
+
+ element = null;
+ return isSupported;
+ }
+
+ return isEventSupported;
+})();
+
+function divResult(category, name, element, div) {
+ div.innerHTML = div.innerHTML + category + " " + name + ": ";
+ div.innerHTML = div.innerHTML + (
+ isEventSupported(name, element)
+ ? 'true'
+ : 'false'
+ );
+ div.innerHTML = div.innerHTML + " ";
+}
+var counter = 1;
+
+function log(title, detail) {
+ var logDiv = document.getElementById("log");
+ idString = "'id" + counter + "'";
+ var newlink = document.createElement('a');
+ newlink.setAttribute('href', "javascript:toggle_visibility(" + idString + ")");
+ newlink.innerHTML = counter + ". " + title;
+ var br1 = document.createElement('br');
+ logDiv.appendChild(newlink);
+ logDiv.appendChild(br1);
+
+ var childDiv = document.createElement('div');
+ childDiv.setAttribute("id", idString.replace("'", "").replace("'", ""));
+ childDiv.setAttribute("style", 'display: none; margin-left : 5px;');
+ childDiv.innerHTML = detail;
+ var br2 = document.createElement('br');
+ logDiv.appendChild(childDiv);
+
+ counter = counter + 1;
+}
+
+function inspect(obj) {
+ if (typeof obj === "undefined") {
+ return "undefined";
+ }
+ var _props = [];
+
+ for (var i in obj) {
+ _props.push(i + " : " + obj[i]);
+ }
+ return " {" + _props.join(", ") + "} ";
+}
+
+function click(e) {
+ if (document.getElementById("clickID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function dblclick(e) {
+ if (document.getElementById("dblclickID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function mousedown(e) {
+ if (document.getElementById("mousedownID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function mouseup(e) {
+ if (document.getElementById("mouseupID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function mouseover(e) {
+ if (document.getElementById("mouseoverID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function mousemove(e) {
+ if (document.getElementById("mousemoveID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function mouseout(e) {
+ if (document.getElementById("mouseoutID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function touchstart(e) {
+ if (document.getElementById("touchstartID").checked) {
+ var box = document.getElementById("box");
+ var result = inspect(e);
+ for (var i = 0; i < e.touches.length; i++) {
+ result = result + " Touches nr." + i + " " + inspect(e.touches[i]);
+ }
+ log(e.type, result);
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function touchend(e) {
+ if (document.getElementById("touchendID").checked) {
+ var box = document.getElementById("box");
+ var result = inspect(e);
+ for (var i = 0; i < e.touches.length; i++) {
+ result = result + " Touches nr." + i + " " + inspect(e.touches[i]);
+ }
+ log(e.type, result);
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function touchmove(e) {
+ if (document.getElementById("touchmoveID").checked) {
+ var targetEvent = e.touches.item(0);
+ var box = document.getElementById("box");
+ box.style.left = targetEvent.clientX + "px";
+ box.style.top = targetEvent.clientY + "px";
+ var result = inspect(e);
+ for (var i = 0; i < e.touches.length; i++) {
+ result = result + " Touches nr." + i + " " + inspect(e.touches[i]);
+ }
+ log(e.type, result);
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function touchcancel(e) {
+ if (document.getElementById("touchcancelID").checked) {
+ var box = document.getElementById("box");
+ var result = inspect(e);
+ for (var i = 0; i < e.touches.length; i++) {
+ result = result + " Touches nr." + i + " " + inspect(e.touches[i]);
+ }
+ log(e.type, result);
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function gesturestart(e) {
+ if (document.getElementById("gesturestartID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function gesturechange(e) {
+ if (document.getElementById("gesturechangeID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function gestureend(e) {
+ if (document.getElementById("gestureendID").checked) {
+ var box = document.getElementById("box");
+ log(e.type, inspect(e));
+ if (e.preventDefault) e.preventDefault();
+ }
+ return false;
+}
+
+function toggle_visibility(id) {
+ var e = document.getElementById(id);
+ if (e.style.display == 'block') {
+ e.style.display = 'none';
+ } else {
+ e.style.display = 'block';
+ }
+}
+
+
+
diff --git a/openlayers/examples/buffer.html b/openlayers/examples/buffer.html
new file mode 100644
index 0000000000..03beb123e7
--- /dev/null
+++ b/openlayers/examples/buffer.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ OpenLayers Buffer Example
+
+
+
+
+
+
+
Buffer Example
+
+
+ buffer, performance, tile
+
+
+
+ This example shows the use of the buffer layer option for any layer that inherits from OpenLayers.Layer.Grid.
+
+
+
+
+
+ Use the buffer property to control how many tiles are included
+ outside the visible map area. Default is 2.
+
+
+
diff --git a/openlayers/examples/canvas-hit-detection.html b/openlayers/examples/canvas-hit-detection.html
new file mode 100644
index 0000000000..5148b70633
--- /dev/null
+++ b/openlayers/examples/canvas-hit-detection.html
@@ -0,0 +1,31 @@
+
+
+
+ OpenLayers Canvas Hit Detection Example
+
+
+
+
+
+
+
+
+
Feature Hit Detection with Canvas
+
+ Demonstrates detection of feature hits with the canvas renderer.
+
+
+
+
+ Click on the features above to see them selected. This example
+ uses the Canvas renderer so it only works on browsers where
+ canvas is supported.
+
+
+
+
diff --git a/openlayers/examples/canvas-inspector.js b/openlayers/examples/canvas-inspector.js
new file mode 100644
index 0000000000..064b4d5b56
--- /dev/null
+++ b/openlayers/examples/canvas-inspector.js
@@ -0,0 +1,91 @@
+
+var features = [
+
+ new OpenLayers.Feature.Vector(
+ OpenLayers.Geometry.fromWKT(
+ "LINESTRING(-90 90, 90 -90)"
+ ),
+ {color: "#0f0000"}
+ ),
+
+ new OpenLayers.Feature.Vector(
+ OpenLayers.Geometry.fromWKT(
+ "LINESTRING(100 50, -100 -50)"
+ ),
+ {color: "#00ff00"}
+ )
+
+];
+
+var layer = new OpenLayers.Layer.Vector(null, {
+ styleMap: new OpenLayers.StyleMap({
+ strokeWidth: 3,
+ strokeColor: "${color}"
+ }),
+ isBaseLayer: true,
+ renderers: ["Canvas"],
+ rendererOptions: {hitDetection: true}
+});
+layer.addFeatures(features);
+
+var map = new OpenLayers.Map({
+ div: "map",
+ layers: [layer],
+ center: new OpenLayers.LonLat(0, 0),
+ zoom: 0
+});
+
+var xOff = 2, yOff = 2;
+
+var rows = 1 + (2 * yOff);
+var cols = 1 + (2 * xOff);
+
+var template = new jugl.Template("template");
+template.process({
+ clone: true,
+ parent: "inspector",
+ context: {
+ rows: rows,
+ cols: cols
+ }
+});
+
+function isDark(r, g, b, a) {
+ a = a / 255;
+ var da = 1 - a;
+ // convert color values to decimal (assume white background)
+ r = (a * r / 255) + da;
+ g = (a * g / 255) + da;
+ b = (a * b / 255) + da;
+ // use w3C brightness measure
+ var brightness = (r * 0.299) + (g * 0.587) + (b * 0.144);
+ return brightness < 0.5;
+}
+
+var context = layer.renderer.canvas; //layer.renderer.hitContext;
+var size = map.getSize();
+map.events.on({
+ mousemove: function(event) {
+ var x = event.xy.x - 1; // TODO: fix this elsewhere
+ var y = event.xy.y;
+ if ((x >= xOff) && (x < size.w - xOff) && (y >= yOff) && (y < size.h - yOff)) {
+ var data = context.getImageData(x - xOff, y - yOff, rows, cols).data;
+ var offset, red, green, blue, alpha, cell;
+ for (var i=0; iG: " + green + " B: " + blue + " A: " + alpha;
+ cell.style.backgroundColor = "rgba(" + red + ", " + green + ", " + blue + ", " + (alpha / 255) + ")";
+ cell.style.color = isDark(red, green, blue, alpha) ? "#ffffff" : "#000000";
+ }
+ }
+ }
+ }
+});
+
+
diff --git a/openlayers/examples/canvas.html b/openlayers/examples/canvas.html
new file mode 100644
index 0000000000..06beef8d25
--- /dev/null
+++ b/openlayers/examples/canvas.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ Canvas Renderer Example
+
+
+
+
+
+
+
+
Canvas Renderer Example
+
+ canvas, renderer, advanced,
+
+
+ Demonstrates the use of the canvas renderer with a vector layer.
+
+
+
+
+ This example shows a vector layer that uses the Canvas renderer
+ where available. The order of the renderers given in the layer
+ options is used to locate the first available renderer.
+
+
+
diff --git a/openlayers/examples/canvas.js b/openlayers/examples/canvas.js
new file mode 100644
index 0000000000..6440c39a11
--- /dev/null
+++ b/openlayers/examples/canvas.js
@@ -0,0 +1,62 @@
+var map, layer, styleMap;
+OpenLayers.ProxyHost = "proxy.cgi?url=";
+
+function init() {
+ map = new OpenLayers.Map({
+ div: "map",
+ projection: new OpenLayers.Projection("EPSG:900913"),
+ displayProjection: new OpenLayers.Projection("EPSG:4326"),
+ units: "m",
+ maxResolution: 156543.0339,
+ maxExtent: new OpenLayers.Bounds(
+ -20037508, -20037508, 20037508, 20037508
+ )
+ });
+
+ var g = new OpenLayers.Layer.Google("Google Layer", {
+ sphericalMercator: true
+ });
+ map.addLayers([g]);
+
+ // prepare to style the data
+ styleMap = new OpenLayers.StyleMap({
+ strokeColor: "black",
+ strokeWidth: 2,
+ strokeOpacity: 0.5,
+ fillOpacity: 0.2
+ });
+
+ // create a color table for state FIPS code
+ var colors = ["red", "orange", "yellow", "green", "blue", "purple"];
+ var code, fips = {};
+ for(var i=1; i<=66; ++i) {
+ code = "0" + i;
+ code = code.substring(code.length - 2);
+ fips[code] = {fillColor: colors[i % colors.length]};
+ }
+ // add unique value rules with your color lookup
+ styleMap.addUniqueValueRules("default", "STATE_FIPS", fips);
+
+ // create a vector layer using the canvas renderer (where available)
+ var wfs = new OpenLayers.Layer.Vector("States", {
+ strategies: [new OpenLayers.Strategy.BBOX()],
+ protocol: new OpenLayers.Protocol.WFS({
+ version: "1.1.0",
+ srsName: "EPSG:900913",
+ url: "http://v2.suite.opengeo.org/geoserver/wfs",
+ featureType: "states",
+ featureNS: "http://usa.opengeo.org"
+ }),
+ styleMap: styleMap,
+ renderers: ["Canvas", "SVG", "VML"]
+ });
+ map.addLayer(wfs);
+
+ // if you want to use Geographic coords, transform to ESPG:900913
+ var ddBounds = new OpenLayers.Bounds(
+ -73.839111,40.287907,-68.214111,44.441624
+ );
+ map.zoomToExtent(
+ ddBounds.transform(map.displayProjection, map.getProjectionObject())
+ );
+}
diff --git a/openlayers/examples/click-handler.html b/openlayers/examples/click-handler.html
new file mode 100644
index 0000000000..d0bd9d444c
--- /dev/null
+++ b/openlayers/examples/click-handler.html
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+ OpenLayers Click Handler Example
+
+
+
+
+
+
+
+
+
+
Click Handler Example
+
+
+
+ event, events, propagation, advanced
+
+
+
+ This example shows the use of the click handler.
+
+
+
+
+ The click handler can be used to gain more flexibility over handling
+ click events. The handler can be constructed with options to handle
+ only single click events, to handle single and double-click events,
+ to ignore clicks that include a drag, and to stop propagation of
+ single and/or double-click events. A single click is a click that
+ is not followed by another click for more than 300ms. This delay
+ is configured with the delay property.
+
+
+ The options to stop single and double clicks have to do with
+ stopping event propagation on the map events listener queue
+ (not stopping events from cascading to other elements). The
+ ability to stop an event from propagating has to do with the
+ order in which listeners are registered. With stopSingle or
+ stopDouble true, a click handler will stop propagation to all
+ listeners that were registered (or all handlers that were
+ activated) before the click handler was activated. So, for
+ example, activating a click handler with stopDouble true after
+ the navigation control is active will stop double-clicks from
+ zooming in.
+
+
+
+
+
Controls with click handlers (toggle on/off to clear output)
+ This example shows the use of the click handler and
+ getLonLatFromViewPortPx functions to trigger events on mouse click.
+
+
+
+
+
+
Using the Click handler allows you to (for example) catch clicks
+ without catching double clicks, something that standard browser
+ events don't do for you. (Try double clicking: you'll zoom in,
+ whereas using the browser click event, you would just get two
+ alerts.) This example click control shows you how to use it.
+
+
+
+
diff --git a/openlayers/examples/cql-format.js b/openlayers/examples/cql-format.js
new file mode 100644
index 0000000000..2119b1aaa2
--- /dev/null
+++ b/openlayers/examples/cql-format.js
@@ -0,0 +1,61 @@
+
+// use a CQL parser for easy filter creation
+var format = new OpenLayers.Format.CQL();
+
+// this rule will get a filter from the CQL text in the form
+var rule = new OpenLayers.Rule({
+ // We could also set a filter here. E.g.
+ // filter: format.read("STATE_ABBR >= 'B' AND STATE_ABBR <= 'O'"),
+ symbolizer: {
+ fillColor: "#ff0000",
+ strokeColor: "#ffcccc",
+ fillOpacity: "0.5"
+ }
+});
+
+var states = new OpenLayers.Layer.Vector("States", {
+ styleMap: new OpenLayers.StyleMap({
+ "default": new OpenLayers.Style(null, {rules: [rule]})
+ })
+});
+
+var map = new OpenLayers.Map({
+ div: "map",
+ layers: [
+ new OpenLayers.Layer.WMS(
+ "OpenLayers WMS",
+ "http://maps.opengeo.org/geowebcache/service/wms",
+ {layers: "openstreetmap", format: "image/png"}
+ ),
+ states
+ ],
+ center: new OpenLayers.LonLat(-101, 39),
+ zoom: 3
+});
+
+// called when features are fetched
+function loadFeatures(data) {
+ var features = new OpenLayers.Format.GeoJSON().read(data);
+ states.addFeatures(features);
+};
+
+// update filter and redraw when form is submitted
+var cql = document.getElementById("cql");
+var output = document.getElementById("output");
+function updateFilter() {
+ var filter;
+ try {
+ filter = format.read(cql.value);
+ } catch (err) {
+ output.value = err.message;
+ }
+ if (filter) {
+ output.value = "";
+ rule.filter = filter;
+ states.redraw();
+ }
+ return false;
+}
+updateFilter();
+var form = document.getElementById("cql_form");
+form.onsubmit = updateFilter;
diff --git a/openlayers/examples/cross-origin.html b/openlayers/examples/cross-origin.html
new file mode 100644
index 0000000000..246047ad4b
--- /dev/null
+++ b/openlayers/examples/cross-origin.html
@@ -0,0 +1,36 @@
+
+
+
+ OpenLayers Script Protocol Example
+
+
+
+
+
+
+
+
+
Script Protocol
+
+ protocol, script, cross origin, advanced
+
+
+ Demonstrates the use of a script protocol for making feature requests
+ cross origin.
+
+
+
+
+ In cases where a service returns serialized features and accepts
+ a named callback (e.g. http://example.com/features.json?callback=foo),
+ the script protocol can be used to read features without being
+ restricted by the same origin policy.
+
+
+ View the cross-origin.js
+ source to see how this is done
+
+ Demonstrate the addition of a rectangle to the OpenLayers window.
+
+
+
+
+
+
The control allows you to draw a rectangle, that reports its coordinates
+ after creation. Hold down the shift key on your keyboard and draw a
+ rectangle with the mouse.
+ Demonstrate changing CSS styles on controls in the OpenLayers window.
+
+
+
+
+
+
If you care to modify the style of any OpenLayers element, include
+ the default stylesheet as a link and declare any style modifications
+ below that link. These style declarations can be in other linked
+ stylesheets or in style tags. In addition, construct your map with
+ options that include {theme: null}. This will disable the default
+ method of loading the stylesheet and allow you to declare style rules
+ in your own linked stylesheets or style tags.
+
This example shows how to declare the font family, size, and color
+ for the mouse position. Note that only the style keys that you want to
+ modify (change from the default) need to be specified.
+ Demonstrate console calls to a Firebug console. Requires Firefox. Mostly for developers.
+
+
+
+
To run OpenLayers in debug mode, include the following script
+ tag before the tag that loads OpenLayers:
+
+
<script src="../lib/Firebug/firebug.js"></script>
+
+
The path to firebug.js must be relative to your
+ html file. With this script included calls to OpenLayers.Console
+ will be displayed in the Firebug console. For browsers without
+ the Firebug extension, the script creates a Firebug Lite console.
+ This console can be opened by hitting F12 or Ctrl+Shift+L
+ (Command+Shift+L on a Mac). If you want the Firebug Lite console
+ to be open when the page loads, add debug="true" to the opening
+ html tag of your page. Open the console and click on the links below
+ to see console calls.
+ The DrawFeature control can be used to digitize donut polygons.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To digitize holes in polygons, hold down the Alt
+ key and draw over an existing polygon. By default, the
+ Shift key triggers freehand drawing. Use a
+ combination of the Shift and Alt keys
+ to digitize holes in freehand mode.
+
+ point, line, linestring, polygon, digitizing, geometry, draw, drag
+
+
+
+ Demonstrate on-screen digitizing tools for point, line, and polygon creation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
With the point drawing control active, click on the map to add a point.
+
With the line drawing control active, click on the map to add the points that make up your line.
+ Double-click to finish drawing.
+
With the polygon drawing control active, click on the map to add the points that make up your
+ polygon. Double-click to finish drawing.
+
With any drawing control active, paning the map can still be achieved. Drag the map as
+ usual for that.
+
Hold down the shift key while drawing to activate freehand mode. While drawing lines or polygons
+ in freehand mode, hold the mouse down and a point will be added with every mouse movement.
+ Demonstrates the use of undo & redo methods while drawing.
+
+
+
+
+
+ Use Ctrl-Z or ⌘-Z to undo while drawing.
+ Use Ctrl-Y or ⌘-Y to redo what you have
+ undone. Use Esc to cancel the current sketch.
+
+ The control.undo method works on the current
+ sketch, removing the most recently added point.
+ The control.redo method adds back items that were
+ removed from an undo. To fully erase a sketch, call the
+ control.cancel method.
+
The vector layer shown uses the BBOX strategy, the HTTP protocol,
+ and the Text format.
+ This setup appends "?bbox=west,south,east,north" to every
+ request. This allows you to configure the location as something
+ like 'textfile.php', and take the '?bbox=' parameter to select
+ data from a database or the like.
+
There is nothing about this example that limits it to text files;
+ you can do the same thing with KML, GeoJSON, etc.
+
This is an alternative to something like the OpenStreetMap "Dynamic POI" example. The Layer is a standard vector layer, and interaction can be
+ configured via the SelectFeature control, as you can see in the
+ latter half of the code, which allows you to open a popup when
+ a feature is selected.
+ The control.insertXY method inserts a point at the given
+ map coordinates (x, y) immediately prior to the most recent point
+ (under the mouse).
+ The control.insertDeltaXY method inserts a point at
+ the given offset values (dx, dy) from the previously added point.
+ The control.insertDirectionLength method inserts a
+ point at offset direction and length from the previously added point.
+ Direction is measured counter-clockwise from the positive x-axis.
+ The control.insertDeflectionLength method inserts a
+ point at offset deflection and length from the previously added point.
+ Deflection is measured counter-clockwise from the previous line
+ segment.
+ The control.finishSketch method completes the current
+ sketch without adding the point under the user's mouse. This
+ allows a sketch to be finished without a double-click.
+ The control.cancel method discards the current
+ sketch and leaves the control active.
+ The control.insertXY method may be called before
+ any points are digitized manually. The other methods have no
+ effect until at least one point has been added to the sketch.
+
+ Demonstrates the filter strategy for limiting features passed to the layer.
+
+
+
+
+
+
+
+
+ This example uses a filter strategy to limit the features that are passed
+ to a layer. Features bound for this layer have a when attribute
+ with date values. A filter strategy is constructed with a between filter
+ that limits the span of dates shown. A simple animation cycles through
+ the domain of the when values, calling setFilter
+ on the strategy with an updated filter.
+
+ Shows the use of a map with fractional (or non-discrete) zoom levels.
+
+
+
+
+
+ (zoom: )
+
+
+
+ Setting the map.fractionalZoom property to true allows zooming to
+ an arbitrary level (between the min and max resolutions). This
+ can be demonstrated by shift-dragging a box to zoom to an arbitrary
+ extent.
+
+ Demonstrate a map that fill the entire browser window.
+
+
+
+
This example uses CSS to define the dimensions of the map element in order to fill the screen.
+ When the user resizes the window, the map size changes correspondingly. No scroll bars!
The displayed GeoRSS feed has a <media:thumbnail/>
+ property for each item. An extended createFeatureFromItem()
+ function is used to add this attribute to the attributes hash of each
+ feature read in by OpenLayers.Format.GeoRSS. The example is
+ configured with a style to render each item with its thumbnail image.
+ Also, to show how rules work, we defined a rule that if the title of an
+ rss item contains "powder", it will be rendered larger than the others.
+ Display a couple of locally cached georss feeds on an a basemap.
+
+
+
+
+
+
This demo uses the OpenLayers GeoRSS parser, which supports GeoRSS Simple and W3C GeoRSS. Only points are
+ currently supported. The OpenLayers GeoRSS parser will automatically connect an information bubble to the map
+ markers, similar to Google maps. In addition, the parser can use custom PNG icons for markers. A sample GeoRSS
+ file (georss.xml) is included.
+
+
+
+
The above input box allows the input of a URL to a GeoRSS feed. This feed can be local to the HTML page —
+ for example, entering 'georss.xml' will work by default, because there is a local file in the directory called
+ georss.xml — or, with a properly set up ProxyHost variable (as is used here), it will be able to load any
+ HTTP URL which contains GeoRSS and display it. Anything else will simply have no effect.
+
+
+
diff --git a/openlayers/examples/georss.xml b/openlayers/examples/georss.xml
new file mode 100644
index 0000000000..fecf77aeac
--- /dev/null
+++ b/openlayers/examples/georss.xml
@@ -0,0 +1,378 @@
+
+
+
+This is an RSS file. Copy the URL into your aggregator of choice. If you don't know what this means and want to learn more, please see: http://platial.typepad.com/news/2006/04/really_simple_t.html for more info.
+http://platial.com
+Crschmidt's Places At Platial
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+http://platial.com/place/90306
+Knitting Room
+Address: 2 lake St, Arlington, MA Tags: knitting, yarn, pins and needles, handspun, hand dyed, novelty yarn, fancy, simple, young, hip, friendly, needles, addy, cute hats
Map this on Platial Grab this on Platial ]]>
+42.405696 -71.142197
+crschmidt
+2006-06-08T17:35:01.942452+00:00
+
+
+http://platial.com/place/67230
+Knitting Room
+Address: 2 lake St, Arlington, MA Tags: knitting, yarn, pins and needles, handspun, hand dyed, novelty yarn, fancy, simple, young, hip, friendly, needles, addy, cute hats
Map this on Platial Grab this on Platial ]]>
+42.405524 -71.142273
+crschmidt
+2006-04-24T11:35:26.733857+00:00
+
+
+http://platial.com/place/65645
+â ¢¢â¢Â£ËøÅ
+Address: 151 Erie St., Cambridge, MA Tags: platial graffiti
Map this on Platial Grab this on Platial ]]>
+42.352455 -71.110210
+crschmidt
+2006-04-20T08:56:12.696224+00:00
+
+
+http://platial.com/place/62200
+Allen Hall
+Address: 1301 W Gregory Dr, Urbana, IL Tags: dorm, uiuc, college
Map this on Platial Grab this on Platial ]]>
+40.104172 -88.220623
+crschmidt
+2006-04-14T08:01:01.872873+00:00
+
+
+http://platial.com/place/28232
+Bagby Hot Springs, OR
+Tags: 20s, rosalie, romance, childhood, hike, camping, soak, relax, beautiful, hot springs, bathhouse, favorite, popular, crowded, organized, honeymoon tub, plumbing made from hollowed out trees, hot springs, mt hood, notorious car break in spot, rash, bacteria
Map this on Platial Grab this on Platial ]]>
+44.936000 -122.173000
+crschmidt
+2006-01-03T23:10:18.553063+00:00
+
+
+http://platial.com/place/43666
+Shooting Location for "The Field of Dreams" Film
+Address: Dyersville, Iowa Tags: iowa, baseball, movie locations, field of dreams, kevin costner, costner, dyersville, kinsella, james earl jones, chicago black sox, shoeless joe, joe jackson, famous farms, film, movie, cinema, shooting location
Map this on Platial Grab this on Platial ]]>
+42.481213 -91.111679
+echinodermata
+2006-03-23T11:40:17.654061+00:00
+
+
+http://platial.com/place/28394
+Moffetts (Bonneville) Hot Springs, WA
+Tags: soak, hot springs, relax, nature
Map this on Platial Grab this on Platial ]]>
+45.658000 -121.962000
+crschmidt
+2006-01-03T23:16:27.329816+00:00
+
+
+http://platial.com/place/28251
+Austin Hot Springs, OR
+Tags: soak, hot springs, relax, nature, popular, crowded
Map this on Platial Grab this on Platial ]]>
+45.021000 -122.009000
+crschmidt
+2006-01-03T23:11:04.489886+00:00
+
+
+http://platial.com/place/28392
+Rock Creek Hot Springs, WA
+Tags: soak, hot springs, relax, nature
Map this on Platial Grab this on Platial ]]>
+45.723000 -121.927000
+crschmidt
+2006-01-03T23:16:22.636855+00:00
+
+
+http://platial.com/place/28391
+St. Martins (Wind River) Hot Springs, WA
+Tags: hot springs, soak, relax, nature, wonderful
Map this on Platial Grab this on Platial ]]>
+45.728000 -121.800000
+crschmidt
+2006-01-03T23:16:20.383244+00:00
+
+
+http://platial.com/place/28231
+Breitenbush Hot Springs, OR
+Tags: hot springs, resort, relax, nature, beautiful, http:www.breitenbush.com, soaking
Map this on Platial Grab this on Platial ]]>
+44.782000 -121.975000
+crschmidt
+2006-01-03T23:10:16.529195+00:00
+
+
+http://platial.com/place/28393
+Collins Hot Springs, WA
+Tags: portland, nice, hot springs, soak
Map this on Platial Grab this on Platial ]]>
+45.701000 -121.728000
+crschmidt
+2006-01-03T23:16:24.648745+00:00
+
+
+http://platial.com/place/31685
+Darwin's Ltd.
+Address: 148 Mount Auburn St, Cambridge, MA Tags: coffee, beer, sandwiches, freewifi
Map this on Platial Grab this on Platial ]]>
+42.373974 -71.125053
+crschmidt
+2006-01-10T09:24:08.152985+00:00
+
+
+http://platial.com/place/28596
+Huckleberry Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.115000 -110.684000
+crschmidt
+2006-01-03T23:24:32.283094+00:00
+
+
+http://platial.com/place/28595
+South Entrance Hot Springs, WY
+
Map this on Platial Grab this on Platial ]]>
+44.142000 -110.656000
+crschmidt
+2006-01-03T23:24:30.279497+00:00
+
+
+http://platial.com/place/28594
+Crawfish Creek Hot Springs, WY
+
Map this on Platial Grab this on Platial ]]>
+44.157000 -110.699000
+crschmidt
+2006-01-03T23:24:28.280271+00:00
+
+
+http://platial.com/place/28593
+Crawfish Creek Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.165000 -110.723000
+crschmidt
+2006-01-03T23:24:20.364077+00:00
+
+
+http://platial.com/place/28592
+Snake Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.169000 -110.583000
+crschmidt
+2006-01-03T23:24:12.234974+00:00
+
+
+http://platial.com/place/28591
+Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.187000 -110.726000
+crschmidt
+2006-01-03T23:24:10.027857+00:00
+
+
+http://platial.com/place/28590
+Hot Springs on Upper Snake River, WY
+ Map this on Platial Grab this on Platial ]]>
+44.204000 -110.486000
+crschmidt
+2006-01-03T23:24:07.79658+00:00
+
+
+http://platial.com/place/28589
+Hot Springs on lewis Lake, WY
+ Map this on Platial Grab this on Platial ]]>
+44.276000 -110.636000
+crschmidt
+2006-01-03T23:24:05.683418+00:00
+
+
+http://platial.com/place/28588
+Rustic Geyser, WY
+ Map this on Platial Grab this on Platial ]]>
+44.282000 -110.506000
+crschmidt
+2006-01-03T23:24:03.66329+00:00
+
+
+http://platial.com/place/28587
+Bechler River Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.285000 -110.900000
+crschmidt
+2006-01-03T23:24:01.611442+00:00
+
+
+http://platial.com/place/28586
+Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.290000 -110.504000
+crschmidt
+2006-01-03T23:23:59.658699+00:00
+
+
+http://platial.com/place/28585
+Heart Lake Geyser Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.299000 -110.517000
+crschmidt
+2006-01-03T23:23:57.181801+00:00
+
+
+http://platial.com/place/28584
+Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.307000 -110.526000
+crschmidt
+2006-01-03T23:23:55.240485+00:00
+
+
+http://platial.com/place/28583
+Hot Springs on lewis Lake, WY
+ Map this on Platial Grab this on Platial ]]>
+44.309000 -110.654000
+crschmidt
+2006-01-03T23:23:53.22295+00:00
+
+
+http://platial.com/place/28582
+Shoshone Geyser Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.354000 -110.800000
+crschmidt
+2006-01-03T23:23:51.179049+00:00
+
+
+http://platial.com/place/28581
+Hot Springs on Continental Divide, WY
+ Map this on Platial Grab this on Platial ]]>
+44.401000 -110.936000
+crschmidt
+2006-01-03T23:23:49.077176+00:00
+
+
+http://platial.com/place/28580
+Hot Springs on Upper Firehole River, WY
+ Map this on Platial Grab this on Platial ]]>
+44.404000 -110.824000
+crschmidt
+2006-01-03T23:23:47.054664+00:00
+
+
+http://platial.com/place/28579
+Summit Lake Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.410000 -110.953000
+crschmidt
+2006-01-03T23:23:45.039394+00:00
+
+
+http://platial.com/place/28578
+Lone Star Geyser Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.414000 -110.817000
+crschmidt
+2006-01-03T23:23:42.938808+00:00
+
+
+http://platial.com/place/28577
+West. Thumb Geyser Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.417000 -110.570000
+crschmidt
+2006-01-03T23:23:40.90238+00:00
+
+
+http://platial.com/place/28576
+Lone Star Geyser, WY
+ Map this on Platial Grab this on Platial ]]>
+44.418000 -110.805000
+crschmidt
+2006-01-03T23:23:38.844625+00:00
+
+
+http://platial.com/place/28575
+Smoke Jumper Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.421000 -110.952000
+crschmidt
+2006-01-03T23:23:36.818513+00:00
+
+
+http://platial.com/place/28574
+West. Thumb Geyser Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.422000 -110.574000
+crschmidt
+2006-01-03T23:23:34.767729+00:00
+
+
+http://platial.com/place/28573
+Potts Hot Spring Basin, WY
+ Map this on Platial Grab this on Platial ]]>
+44.433000 -110.581000
+crschmidt
+2006-01-03T23:23:32.749915+00:00
+
+
+http://platial.com/place/28572
+Hot Springs, WY
+ Map this on Platial Grab this on Platial ]]>
+44.433000 -110.813000
+crschmidt
+2006-01-03T23:23:30.829745+00:00
+
+
+http://platial.com/place/28571
+Hot Springs on Continental Divide, WY
+ Map this on Platial Grab this on Platial ]]>
+44.438000 -110.977000
+crschmidt
+2006-01-03T23:23:28.730401+00:00
+
+
+http://platial.com/place/28570
+SouthEastern Group, WY
+ Map this on Platial Grab this on Platial ]]>
+44.459000 -110.817000
+crschmidt
+2006-01-03T23:23:26.706763+00:00
+
+
diff --git a/openlayers/examples/getfeature-wfs.html b/openlayers/examples/getfeature-wfs.html
new file mode 100644
index 0000000000..0f2096ffa2
--- /dev/null
+++ b/openlayers/examples/getfeature-wfs.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+ WFS: GetFeature Example (GeoServer)
+
+
+
+
+
WFS GetFeature Example (GeoServer)
+
+
+WFS, GetFeature
+
+
+
+ Shows how to use the GetFeature control to select features from a WMS layer.
+
+
+
+
+
+
+ Click or drag a box to select features, use the Shift key to add
+ features to the selection, use the Ctrl key to toggle a feature's
+ selected status. Note that this control also has a hover option, which
+ is enabled in this example. This gives you a visual feedback by loading
+ the feature underneath the mouse pointer from the WFS, but causes a lot
+ of GetFeature requests to be issued.
+
+
+
+
\ No newline at end of file
diff --git a/openlayers/examples/getfeatureinfo-control.html b/openlayers/examples/getfeatureinfo-control.html
new file mode 100644
index 0000000000..96993ff326
--- /dev/null
+++ b/openlayers/examples/getfeatureinfo-control.html
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+ OpenLayers WMS Feature Info Example (GeoServer)
+
+
+
+
+
+
+
+
Feature Info Example
+
+
+ WMS, GetFeatureInfo
+
+
+
+ Demonstrates the WMSGetFeatureInfo control for fetching information about a position from WMS (via GetFeatureInfo request).
+
+ Demonstrates the WMSGetFeatureInfo control for fetching information
+ about a position from WMS (via GetFeatureInfo request). Results
+ are displayed in a popup.
+
+ Demonstrate use of tiles from the Google Maps v3 API.
+
+
+
+
+ If you use OpenLayers.Layer.GoogleNG, the getTile method of the
+ GMaps v3 API's MapType is used to load tiles. This allows for
+ better integration than interacting with a whole map generated
+ by a google.maps.Map instance, as done with
+ OpenLayers.Layer.Google. See the
+ google-ng.js source
+ to see how this is done.
+
+
+
+
diff --git a/openlayers/examples/google-ng.js b/openlayers/examples/google-ng.js
new file mode 100644
index 0000000000..fa2ba35b25
--- /dev/null
+++ b/openlayers/examples/google-ng.js
@@ -0,0 +1,28 @@
+var map;
+
+function init() {
+ map = new OpenLayers.Map('map');
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+ var gphy = new OpenLayers.Layer.GoogleNG(
+ {type: google.maps.MapTypeId.TERRAIN}
+ );
+ var gmap = new OpenLayers.Layer.GoogleNG(
+ // ROADMAP, the default
+ );
+ var ghyb = new OpenLayers.Layer.GoogleNG(
+ {type: google.maps.MapTypeId.HYBRID}
+ );
+ var gsat = new OpenLayers.Layer.GoogleNG(
+ {type: google.maps.MapTypeId.SATELLITE}
+ );
+
+ map.addLayers([gphy, gmap, ghyb, gsat]);
+
+ // GoogleNG uses EPSG:900913 as projection, so we have to
+ // transform our coordinates
+ map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ map.getProjectionObject()
+ ), 5);
+}
diff --git a/openlayers/examples/google-reproject.html b/openlayers/examples/google-reproject.html
new file mode 100644
index 0000000000..1606e6e0ef
--- /dev/null
+++ b/openlayers/examples/google-reproject.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+ OpenLayers Google with Overlay Example
+
+
+
+
+
+
+
+
+
Google with Overlay Example
+
+
+ Google, overlay, mercator, reproject, cleanup
+
+
+
+ Demonstrate a Google basemap used with boundary overlay layer.
+
+
+
+
+
+
An overlay in a Geographic projection can be stretched to somewhat
+ line up with Google tiles (in a Mercator projection). Results get
+ worse farther from the equator. Use the "reproject" option on a
+ layer to get this behavior. Use the sphericalMercator option on
+ a Google layer to get proper overlays (with other layers in
+ Spherical Mercator).
+ Demonstrate use the Google Maps v3 API with allOverlays set to true on the map.
+
+
+
+
+ You can also use Google layers as overlays, e.g. in a map with
+ allOverlays set to true. Note some of the layers disappear as
+ you zoom in to levels that are not supported by all layers. See the
+ google-v3-alloverlays.js source
+ to see how this is done.
+
+
+
+
diff --git a/openlayers/examples/google-v3-alloverlays.js b/openlayers/examples/google-v3-alloverlays.js
new file mode 100644
index 0000000000..e2e4da43a3
--- /dev/null
+++ b/openlayers/examples/google-v3-alloverlays.js
@@ -0,0 +1,35 @@
+var map;
+
+function init() {
+ map = new OpenLayers.Map('map', {allOverlays: true});
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+ // the SATELLITE layer has all 22 zoom level, so we add it first to
+ // become the internal base layer that determines the zoom levels of the
+ // map.
+ var gsat = new OpenLayers.Layer.Google(
+ "Google Satellite",
+ {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
+ );
+ var gphy = new OpenLayers.Layer.Google(
+ "Google Physical",
+ {type: google.maps.MapTypeId.TERRAIN, visibility: false}
+ );
+ var gmap = new OpenLayers.Layer.Google(
+ "Google Streets", // the default
+ {numZoomLevels: 20, visibility: false}
+ );
+ var ghyb = new OpenLayers.Layer.Google(
+ "Google Hybrid",
+ {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 22, visibility: false}
+ );
+
+ map.addLayers([gsat, gphy, gmap, ghyb]);
+
+ // Google.v3 uses EPSG:900913 as projection, so we have to
+ // transform our coordinates
+ map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ map.getProjectionObject()
+ ), 5);
+}
diff --git a/openlayers/examples/google-v3.html b/openlayers/examples/google-v3.html
new file mode 100644
index 0000000000..c074bb62f5
--- /dev/null
+++ b/openlayers/examples/google-v3.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ OpenLayers Google (v3) Layer Example
+
+
+
+
+
+
+
+
+
Google (v3) Layer Example
+
+ Google, api key, apikey
+
+
+ Demonstrate use the Google Maps v3 API.
+
+
+
+
Animated
+ zoom (if supported by GMaps on your device)
+
+ If you use the Google Maps v3 API with a Google layer, you don't
+ need to include an API key. This layer only works in the
+ spherical mercator projection. See the
+ google-v3.js source
+ to see how this is done.
+
+ In order to position the Google attribution div in the default
+ location, you must include the extra theme/default/google.css
+ stylesheet.
+
+
+
+
diff --git a/openlayers/examples/google-v3.js b/openlayers/examples/google-v3.js
new file mode 100644
index 0000000000..4d4cd205df
--- /dev/null
+++ b/openlayers/examples/google-v3.js
@@ -0,0 +1,40 @@
+var map;
+
+function init() {
+ map = new OpenLayers.Map('map');
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+ var gphy = new OpenLayers.Layer.Google(
+ "Google Physical",
+ {type: google.maps.MapTypeId.TERRAIN}
+ );
+ var gmap = new OpenLayers.Layer.Google(
+ "Google Streets", // the default
+ {numZoomLevels: 20}
+ );
+ var ghyb = new OpenLayers.Layer.Google(
+ "Google Hybrid",
+ {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20}
+ );
+ var gsat = new OpenLayers.Layer.Google(
+ "Google Satellite",
+ {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
+ );
+
+ map.addLayers([gphy, gmap, ghyb, gsat]);
+
+ // Google.v3 uses EPSG:900913 as projection, so we have to
+ // transform our coordinates
+ map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ map.getProjectionObject()
+ ), 5);
+
+ // add behavior to html
+ var animate = document.getElementById("animate");
+ animate.onclick = function() {
+ for (var i=map.layers.length-1; i>=0; --i) {
+ map.layers[i].animationEnabled = this.checked;
+ }
+ };
+}
diff --git a/openlayers/examples/google.html b/openlayers/examples/google.html
new file mode 100644
index 0000000000..e6e20b26eb
--- /dev/null
+++ b/openlayers/examples/google.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ OpenLayers Google Layer Example
+
+
+
+
+
+
+
+
+
+
Google Layer Example
+
+
+ Google
+
+
+
+ Demonstrate use of the various types of Google layers.
+
+
+
+
+
+
+ For best performance, you must be using a version of the Google Maps
+ API which is v2.93 or higher. In order to use this version of the API,
+ it is best to simply set your application to use the string "v=2" in
+ the request, rather than tying your application to an explicit version.
+
+ In order to position the Google attribution div in the default location,
+ you must include the extra theme/default/google.css stylesheet.
+ OpenLayers supports well-known names for a few graphics. You
+ can use the names "star", "cross",
+ "x", "square", "triangle", and
+ "circle" as value for the graphicName property of a
+ symbolizer.
+
+
+ The named symbols "lightning", "rectangle"
+ and "church" are user defined.
+
+
+ See graphic-name.js
+ for the source code of this example.
+
+
+
+
diff --git a/openlayers/examples/graphic-name.js b/openlayers/examples/graphic-name.js
new file mode 100644
index 0000000000..9349ed28b6
--- /dev/null
+++ b/openlayers/examples/graphic-name.js
@@ -0,0 +1,62 @@
+// user custom graphicname
+OpenLayers.Renderer.symbol.lightning = [0, 0, 4, 2, 6, 0, 10, 5, 6, 3, 4, 5, 0, 0];
+OpenLayers.Renderer.symbol.rectangle = [0, 0, 4, 0, 4, 10, 0, 10, 0, 0];
+OpenLayers.Renderer.symbol.church = [4, 0, 6, 0, 6, 4, 10, 4, 10, 6, 6, 6, 6, 14, 4, 14, 4, 6, 0, 6, 0, 4, 4, 4, 4, 0];
+var map;
+
+function init(){
+ map = new OpenLayers.Map('map', {
+ controls: []
+ });
+
+ // list of well-known graphic names
+ var graphics = ["star", "cross", "x", "square", "triangle", "circle", "lightning", "rectangle", "church"];
+
+ // Create one feature for each well known graphic.
+ // Give features a type attribute with the graphic name.
+ var num = graphics.length;
+ var slot = map.maxExtent.getWidth() / num;
+ var features = Array(num);
+ for (var i = 0; i < graphics.length; ++i) {
+ lon = map.maxExtent.left + (i * slot) + (slot / 2);
+ features[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(map.maxExtent.left + (i * slot) + (slot / 2), 0), {
+ type: graphics[i]
+ });
+ }
+
+ // Create a style map for painting the features.
+ // The graphicName property of the symbolizer is evaluated using
+ // the type attribute on each feature (set above).
+ var styles = new OpenLayers.StyleMap({
+ "default": {
+ graphicName: "${type}",
+ pointRadius: 10,
+ strokeColor: "fuchsia",
+ strokeWidth: 2,
+ fillColor: "lime",
+ fillOpacity: 0.6
+ },
+ "select": {
+ pointRadius: 20,
+ fillOpacity: 1,
+ rotation: 45
+ }
+ });
+
+ // Create a vector layer and give it your style map.
+ var layer = new OpenLayers.Layer.Vector("Graphics", {
+ styleMap: styles,
+ isBaseLayer: true
+ });
+ layer.addFeatures(features);
+ map.addLayer(layer);
+
+ // Create a select feature control and add it to the map.
+ var select = new OpenLayers.Control.SelectFeature(layer, {
+ hover: true
+ });
+ map.addControl(select);
+ select.activate();
+
+ map.zoomToMaxExtent();
+}
diff --git a/openlayers/examples/graticule.html b/openlayers/examples/graticule.html
new file mode 100644
index 0000000000..6f993ac9e7
--- /dev/null
+++ b/openlayers/examples/graticule.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+ OpenLayers Graticule Example
+
+
+
+
+
+
+
+
+
+
Graticule Example
+
+
+ graticule, grid
+
+
+
+ Adds a Graticule control to the map to display a grid of
+ latitude and longitude.
+
+ Demonstrates map tiling artifacts, and OpenLayer's facility for correcting this distortion.
+
+
+
+
+
+
+ When you render tiles with certain types of symbols, there are artifacts
+ at tile edges that make symbology not look continuous. In the center of
+ the above map (when it first loads), the large orange road is split
+ vertically by a tile. Open the layer switcher and change to the layer
+ with a 15 pixel gutter to see how the symbology looks nicer.
+
+
+
+
diff --git a/openlayers/examples/highlight-feature.html b/openlayers/examples/highlight-feature.html
new file mode 100644
index 0000000000..73cae24e0f
--- /dev/null
+++ b/openlayers/examples/highlight-feature.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ SelectFeature Control for Select and Highlight
+
+
+
+
+
+
+
+
+
+
+ This example shows the use of the hover handler.
+
+
+
+
+ The hover handler is to be used to emulate mouseovers on
+ objects on the map that aren't DOM elements. For example
+ one can use the hover hander to send WMS/GetFeatureInfo
+ requests as the user moves the mouse over the map.
+
+
+ The "delay" option specifies the number of milliseconds
+ before the event is considered a hover. Default is 500
+ milliseconds.
+
+
+ The "pixelTolerance" option specifies the maximum number
+ of pixels between mousemoves for an event to be
+ considered a hover. Default is null, which means no
+ pixel tolerance.
+
+
+ The "stopMove" option specifies whether other mousemove
+ listeners registered before the hover handler listener must
+ be notified on mousemoves or not. Default is false (meaning
+ that the other mousemove listeners will be notified on
+ mousemove).
+
+
+
+
+
Controls with hover handlers (toggle on/off to clear output)
+ Demonstrate a single non-tiled image as a selectable base layer.
+
+
+
+
+
+
+ The "City Lights" layer above is created from a single web accessible
+ image. If you construct it without any resolution related options,
+ the layer will be given a single resolution based on the extent/size.
+ Otherwise, it behaves much like a regular layer. This is primarily
+ intended to be used in an overview map - where another layer type
+ might not make a good overview.
+
+
+
+
diff --git a/openlayers/examples/img/check-round-green.png b/openlayers/examples/img/check-round-green.png
new file mode 100644
index 0000000000..176fed1161
Binary files /dev/null and b/openlayers/examples/img/check-round-green.png differ
diff --git a/openlayers/examples/img/check-round-grey.png b/openlayers/examples/img/check-round-grey.png
new file mode 100644
index 0000000000..dc90efb998
Binary files /dev/null and b/openlayers/examples/img/check-round-grey.png differ
diff --git a/openlayers/examples/img/list.png b/openlayers/examples/img/list.png
new file mode 100644
index 0000000000..f214206829
Binary files /dev/null and b/openlayers/examples/img/list.png differ
diff --git a/openlayers/examples/img/locate.png b/openlayers/examples/img/locate.png
new file mode 100644
index 0000000000..c61b499c95
Binary files /dev/null and b/openlayers/examples/img/locate.png differ
diff --git a/openlayers/examples/img/marker_shadow.png b/openlayers/examples/img/marker_shadow.png
new file mode 100644
index 0000000000..a5afa6edd9
Binary files /dev/null and b/openlayers/examples/img/marker_shadow.png differ
diff --git a/openlayers/examples/img/minus1.png b/openlayers/examples/img/minus1.png
new file mode 100644
index 0000000000..df446c7932
Binary files /dev/null and b/openlayers/examples/img/minus1.png differ
diff --git a/openlayers/examples/img/mobile-layers.png b/openlayers/examples/img/mobile-layers.png
new file mode 100644
index 0000000000..c4a6335983
Binary files /dev/null and b/openlayers/examples/img/mobile-layers.png differ
diff --git a/openlayers/examples/img/mobile-loc.png b/openlayers/examples/img/mobile-loc.png
new file mode 100644
index 0000000000..c2d89a74ea
Binary files /dev/null and b/openlayers/examples/img/mobile-loc.png differ
diff --git a/openlayers/examples/img/mobile-zoombar.png b/openlayers/examples/img/mobile-zoombar.png
new file mode 100644
index 0000000000..ff8e0490c7
Binary files /dev/null and b/openlayers/examples/img/mobile-zoombar.png differ
diff --git a/openlayers/examples/img/openlayers.png b/openlayers/examples/img/openlayers.png
new file mode 100644
index 0000000000..f7800febf0
Binary files /dev/null and b/openlayers/examples/img/openlayers.png differ
diff --git a/openlayers/examples/img/popupMatrix.jpg b/openlayers/examples/img/popupMatrix.jpg
new file mode 100644
index 0000000000..fb09bc0717
Binary files /dev/null and b/openlayers/examples/img/popupMatrix.jpg differ
diff --git a/openlayers/examples/img/small.jpg b/openlayers/examples/img/small.jpg
new file mode 100644
index 0000000000..1ba22e6006
Binary files /dev/null and b/openlayers/examples/img/small.jpg differ
diff --git a/openlayers/examples/img/thinlong.jpg b/openlayers/examples/img/thinlong.jpg
new file mode 100644
index 0000000000..a063ab453d
Binary files /dev/null and b/openlayers/examples/img/thinlong.jpg differ
diff --git a/openlayers/examples/img/widelong.jpg b/openlayers/examples/img/widelong.jpg
new file mode 100644
index 0000000000..7ed1c5e73c
Binary files /dev/null and b/openlayers/examples/img/widelong.jpg differ
diff --git a/openlayers/examples/img/wideshort.jpg b/openlayers/examples/img/wideshort.jpg
new file mode 100644
index 0000000000..9839b82f0f
Binary files /dev/null and b/openlayers/examples/img/wideshort.jpg differ
diff --git a/openlayers/examples/intersects.html b/openlayers/examples/intersects.html
new file mode 100644
index 0000000000..31bdee0f7c
--- /dev/null
+++ b/openlayers/examples/intersects.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+ Geometry Intersections
+
+
+
+
+
+
+
+
+
+
+
OpenLayers Geometry Intersection Example
+
+ intersection, geometry
+
+
+ Use of geometry.intersects method for testing geometry intersections.
+
+ Demonstrate a tiled kamap layer as the base map, which can be pre-cached for higher performance.
+
+
+
+
+
+
+
diff --git a/openlayers/examples/kamap.txt b/openlayers/examples/kamap.txt
new file mode 100644
index 0000000000..50fa4e0d35
--- /dev/null
+++ b/openlayers/examples/kamap.txt
@@ -0,0 +1,508 @@
+value pair.
+ *
+ * The key is the name to be used by the tile caching system to store cached
+ * tiles within the base cache directory. This key should be a single word
+ * that uniquely identifies the map.
+ *
+ * The value associated with each key is an array of three values. The first
+ * value is a human-readable name to be presented to the user (should the
+ * application choose to do so) and the second value is the path to the map
+ * file. It is assumed that the map file is fully configured for use with
+ * MapServer/MapScript as no error checking or setting of values is done. The
+ * third value is an array of scale values for zooming.
+ */
+
+$aszMapFiles = array(
+ "world" => array( "World", "/path/to/your/mapfile",
+ array( 10000 ), # in openlayers, the scale array doesn't matter.
+ "PNG24")
+
+/* Add more elements to this array to offer multiple mapfiles */
+
+);
+
+/******************************************************************************
+ * figure out which map file to use and set up the necessary variables for
+ * the rest of the code to use. This does need to be done on every page load
+ * unfortunately.
+ *
+ * szMap should be set to the default map file to use but can change if
+ * this script is called with map=.
+ */
+$szMap = 'world';
+
+/******************************************************************************
+ * kaMap! caching
+ *
+ * this is the directory within which kaMap! will create its tile cache. The
+ * directory does NOT have to be web-accessible, but it must be writable by the
+ * web-server-user and allow creation of both directories AND files.
+ *
+ * the tile caching system will create a separate subdirectory within the base
+ * cache directory for each map file. Within the cache directory for each map
+ * file, directories will be created for each group of layers. Within the group
+ * directories, directories will be created at each of the configured scales
+ * for the application (see mapfile configuration above.)
+ */
+$szBaseCacheDir = "/var/cache/kamap/";
+
+/***** END OF CONFIGURABLE STUFF - unless you know what you are doing *****/
+/***** *****/
+/***** *****/
+/***** *****/
+/***** END OF CONFIGURABLE STUFF - unless you know what you are doing *****/
+
+if (isset($_REQUEST['map']) && isset($aszMapFiles[$_REQUEST['map']]))
+{
+ $szMap = $_REQUEST['map'];
+}
+
+$szMapCacheDir = $szBaseCacheDir.$szMap."/";
+$szMapName = $aszMapFiles[$szMap][0];
+$szMapFile = $aszMapFiles[$szMap][1];
+$anScales = $aszMapFiles[$szMap][2];
+setOutputFormat($aszMapFiles[$szMap][3]);
+/******************************************************************************
+ * output format of the map and resulting tiles
+ *
+ * The output format used with MapServer can greatly affect appearance and
+ * performance. It is recommended to use an 8 bit format such as PNG
+ *
+ * NOTE: the tile caching code in tile.php is not configurable here. It
+ * currently assumes that it is outputting 8bit PNG files. If you change to
+ * PNG24 here then you will need to update tile.php to use the gd function
+ * imagecreatetruecolor. If you change the output format to jpeg then
+ * you would need to change imagepng() to imagejpeg(). A nice enhancement
+ * would be to make that fully configurable from here.
+ */
+function setOutputFormat($szFormat)
+{
+ switch($szFormat) {
+ case "PNG24":
+ $GLOBALS['szMapImageFormat'] = 'PNG24'; //mapscript format name
+ $GLOBALS['szMapImageCreateFunction'] = "imagecreatefrompng"; // appropriate GD function
+ $GLOBALS['szImageExtension'] = '.png'; //file extension
+ $GLOBALS['szImageCreateFunction'] = "imagecreatetruecolor"; //or imagecreatetruecolor if PNG24 ...
+ $GLOBALS['szImageOutputFunction'] = "imagepng"; //or imagegif, imagejpeg ...
+ $GLOBALS['szImageHeader'] = 'image/png'; //the content-type of the image
+ break;
+ case "GIF":
+ $GLOBALS['szMapImageFormat'] = 'GIF'; //mapscript format name
+ $GLOBALS['szMapImageCreateFunction'] = "imagecreatefromgif"; // appropriate GD function
+ $GLOBALS['szImageExtension'] = '.gif'; //file extension
+ $GLOBALS['szImageCreateFunction'] = "imagecreate"; //or imagecreatetruecolor if PNG24 ...
+ $GLOBALS['szImageOutputFunction'] = "imagegif"; //or imagegif, imagejpeg ...
+ $GLOBALS['szImageHeader'] = 'image/gif'; //the content-type of the image
+ break;
+ case "JPEG":
+ $GLOBALS['szMapImageFormat'] = 'JPEG'; //mapscript format name
+ $GLOBALS['szMapImageCreateFunction'] = "imagecreatefromjpeg"; // appropriate GD function
+ $GLOBALS['szImageExtension'] = '.jpg'; //file extension
+ $GLOBALS['szImageCreateFunction'] = "imagecreatetruecolor"; //or imagecreatetruecolor if PNG24 ...
+ $GLOBALS['szImageOutputFunction'] = "imagejpeg"; //or imagegif, imagejpeg ...
+ $GLOBALS['szImageHeader'] = 'image/jpeg'; //the content-type of the image
+ break;
+ case "PNG":
+ $GLOBALS['szMapImageFormat'] = 'PNG'; //mapscript format name
+ $GLOBALS['szMapImageCreateFunction'] = "imagecreatefrompng"; // appropriate GD function
+ $GLOBALS['szImageExtension'] = '.png'; //file extension
+ $GLOBALS['szImageCreateFunction'] = "imagecreate"; //or imagecreatetruecolor if PNG24 ...
+ $GLOBALS['szImageOutputFunction'] = "imagepng"; //or imagegif, imagejpeg ...
+ $GLOBALS['szImageHeader'] = 'image/png'; //the content-type of the image
+ break;
+ case "DITHERED":
+ case "PNG8":
+ $GLOBALS['szMapImageFormat'] = 'dithered';
+ $GLOBALS['szMapImageCreateFunction'] = "imagecreatefrompng";
+ $GLOBALS['szImageExtension'] = '.png';
+ $GLOBALS['szImageCreateFunction'] = "imagecreate";
+ $GLOBALS['szImageOutputFunction'] = "imagepng";
+ $GLOBALS['szImageHeader'] = 'image/png';
+ break;
+ }
+}
+
+/**
+ * create all directories in a directory tree - found on the php web site
+ * under the mkdir function ...
+ */
+function makeDirs($strPath, $mode = 0775)
+{
+ return is_dir($strPath) or ( makeDirs(dirname($strPath), $mode) and mkdir($strPath, $mode) );
+}
+
+/**
+ * This function replaces all special characters in the given string.
+ *
+ * @param szString string - The string to convert.
+ *
+ * @return string converted
+ */
+function normalizeString($szString)
+{
+ // Normalize string by replacing all special characters
+ // e.g. "http://my.host.com/cgi-bin/mywms?"
+ // becomes "http___my_host_com_cgi_bin_mywms_"
+ return preg_replace("/(\W)/", "_", $szString);
+}
+
+/* bug 1253 - root permissions required to delete cached files */
+$orig_umask = umask(0);
+
+/* create the main cache directory if necessary */
+if (!@is_dir($szMapCacheDir))
+ makeDirs($szMapCacheDir);
+
+/* get the various request parameters
+ * also need to make sure inputs are clean, especially those used to
+ * build paths and filenames
+ */
+ /*
+ * the tile renderer accepts several parameters and returns a tile image from
+ * the cache, creating the tile only if necessary.
+ *
+ * all requests include the pixel location of the request at a certain scale
+ * and this script figures out the geographic location of the tile from the
+ * scale assuming that 0,0 in pixels is 0,0 in geographic units
+ *
+ * Request parameters are:
+ *
+ * map: the name of the map to use. This is handled by config.php.
+ *
+ * t: top pixel position
+ * l: left pixel position
+ * s: scale
+ * g: (optional) comma-delimited list of group names to draw
+ * layers: (optional) comma-delimited list of layers to draw
+ * force: optional. If set, force redraw of the meta tile. This was added to
+ * help with invalid images sometimes being generated.
+ * tileid: (optional) can be used instead of t+l to specify the tile coord.,
+ * useful in regenerating the cache
+ */
+
+$top = isset( $_REQUEST['t'] ) ? intval($_REQUEST['t']) : 0;
+$left = isset( $_REQUEST['l'] ) ? intval($_REQUEST['l']) : 0;
+$scale = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : $anScales[0];
+$bForce = isset($_REQUEST['force'])? true : false;
+$groups = isset( $_REQUEST['g'] ) ? $_REQUEST['g'] : "";
+$layers = isset( $_REQUEST['layers'] ) ? $_REQUEST['layers'] : "";
+
+// dynamic imageformat ----------------------------------------------
+//use the function in config.php to set the output format
+if (isset($_REQUEST['i']))
+ setOutputFormat( $_REQUEST['i'] );
+//----------------------------------------------------------------
+
+/* tileid=t#####l#### can be used instead of t+l parameters. Useful in
+ * regenerating the cache for instance.
+ */
+if (isset( $_REQUEST['tileid']) &&
+ preg_match("/t(-?\d+)l(-?\d+)/", $_REQUEST['tileid'], $aMatch) )
+{
+ $top = intval($aMatch[1]);
+ $left = intval($aMatch[2]);
+}
+
+/* Calculate the metatile's top-left corner coordinates.
+ * Include the $metaBuffer around the metatile to account for various
+ * rendering issues happening around the edge of a map
+ */
+$metaLeft = floor( ($left)/($tileWidth*$metaWidth) ) * $tileWidth * $metaWidth;
+$metaTop = floor( ($top)/($tileHeight*$metaHeight) ) * $tileHeight *$metaHeight;
+$szMetaTileId = "t".$metaTop."l".$metaLeft;
+$metaLeft -= $metaBuffer;
+$metaTop -= $metaBuffer;
+
+/* caching is done by scale value, then groups and layers and finally metatile
+ * and tile id. Create a new directory if necessary
+ */
+$szGroupDir = $groups != "" ? normalizeString($groups) : "def";
+$szLayerDir = $layers != "" ? normalizeString($layers) : "def";
+
+$szCacheDir = $szMapCacheDir."/".$scale."/".$szGroupDir."/".$szLayerDir."/".$szMetaTileId;
+if (!@is_dir($szCacheDir))
+ makeDirs($szCacheDir);
+
+/* resolve cache hit - clear the os stat cache if necessary */
+$szTileId = "t".$top."l".$left;
+$szCacheFile = $szCacheDir."/".$szTileId.$szImageExtension;
+clearstatcache();
+
+$szMetaDir = $szCacheDir."/meta";
+if (!@is_Dir($szMetaDir))
+ makeDirs($szMetaDir);
+
+/* simple locking in case there are several requests for the same meta
+ tile at the same time - only draw it once to help with performance */
+$szLockFile = $szMetaDir."/lock_".$metaTop."_".$metaLeft;
+$fpLockFile = fopen($szLockFile, "a+");
+clearstatcache();
+if (!file_exists($szCacheFile) || $bForce)
+{
+ flock($fpLockFile, LOCK_EX);
+ fwrite($fpLockFile, ".");
+
+ //check once more to see if the cache file was created while waiting for
+ //the lock
+ clearstatcache();
+ if (!file_exists($szCacheFile) || $bForce)
+ {
+ if (!extension_loaded('MapScript'))
+ {
+ dl( $szPHPMapScriptModule );
+ }
+ if (!extension_loaded('gd'))
+ {
+ dl( $szPHPGDModule);
+ }
+
+ if (!@is_Dir($szMetaDir))
+ makeDirs($szMetaDir);
+
+ $oMap = ms_newMapObj($szMapFile);
+
+ /* Metatile width/height include 2x the metaBuffer value */
+ $oMap->set('width', $tileWidth * $metaWidth + 2*$metaBuffer);
+ $oMap->set('height', $tileHeight * $metaHeight + 2*$metaBuffer);
+
+ /* Tell MapServer to not render labels inside the metaBuffer area
+ * (new in 4.6)
+ * TODO: Until MapServer bugs 1353/1355 are resolved, we need to
+ * pass a negative value for "labelcache_map_edge_buffer"
+ */
+ $oMap->setMetadata("labelcache_map_edge_buffer", -$metaBuffer);
+
+ $inchesPerUnit = array(1, 12, 63360.0, 39.3701, 39370.1, 4374754);
+ $geoWidth = $scale/($oMap->resolution*$inchesPerUnit[$oMap->units]);
+ $geoHeight = $scale/($oMap->resolution*$inchesPerUnit[$oMap->units]);
+
+ /* draw the metatile */
+ $minx = $metaLeft * $geoWidth;
+ $maxx = $minx + $geoWidth * $oMap->width;
+ $maxy = -1 * $metaTop * $geoHeight;
+ $miny = $maxy - $geoHeight * $oMap->height;
+
+ $nLayers = $oMap->numlayers;
+ $oMap->setExtent($minx,$miny,$maxx,$maxy);
+ $oMap->selectOutputFormat( $szMapImageFormat );
+ $aszLayers = array();
+ if ($groups || $layers)
+ {
+ /* Draw only specified layers instead of default from mapfile*/
+ if ($layers)
+ {
+ $aszLayers = explode(",", $layers);
+ }
+
+ if ($groups)
+ {
+ $aszGroups = explode(",", $groups);
+ }
+
+ for($i=0;$i<$nLayers;$i++)
+ {
+ $oLayer = $oMap->getLayer($i);
+ if (($aszGroups && in_array($oLayer->group,$aszGroups)) ||
+ ($aszLayers && in_array($oLayer->name,$aszLayers)) ||
+ ($aszGroups && $oLayer->group == '' &&
+ in_array( "__base__", $aszGroups)))
+ {
+ $oLayer->set("status", MS_ON );
+ }
+ else
+ {
+ $oLayer->set("status", MS_OFF );
+ }
+ }
+ //need transparency if groups or layers are used
+ $oMap->outputformat->set("transparent", MS_ON );
+ }
+ else
+ {
+ $oMap->outputformat->set("transparent", MS_OFF );
+ }
+
+
+ $szMetaImg = $szMetaDir."/t".$metaTop."l".$metaLeft.$szImageExtension;
+ $oImg = $oMap->draw();
+ $oImg->saveImage($szMetaImg);
+ $oImg->free();
+ eval("\$oGDImg = ".$szMapImageCreateFunction."('".$szMetaImg."');");
+ if ($bDebug)
+ {
+ $blue = imagecolorallocate($oGDImg, 0, 0, 255);
+ imagerectangle($oGDImg, 0, 0, $tileWidth * $metaWidth - 1, $tileHeight * $metaHeight - 1, $blue );
+ }
+ for($i=0;$i<$metaWidth;$i++)
+ {
+ for ($j=0;$j<$metaHeight;$j++)
+ {
+ eval("\$oTile = ".$szImageCreateFunction."( ".$tileWidth.",".$tileHeight." );");
+ // Allocate BG color for the tile (in case the metatile has transparent BG)
+ $nTransparent = imagecolorallocate($oTile, $oMap->imagecolor->red, $oMap->imagecolor->green, $oMap->imagecolor->blue);
+ //if ($oMap->outputformat->transparent == MS_ON)
+ //{
+ imagecolortransparent( $oTile,$nTransparent);
+ //}
+ $tileTop = $j*$tileHeight + $metaBuffer;
+ $tileLeft = $i*$tileWidth + $metaBuffer;
+ imagecopy( $oTile, $oGDImg, 0, 0, $tileLeft, $tileTop, $tileWidth, $tileHeight );
+ /* debugging stuff */
+ if ($bDebug)
+ {
+ $black = imagecolorallocate($oTile, 1, 1, 1);
+ $green = imagecolorallocate($oTile, 0, 128, 0 );
+ $red = imagecolorallocate($oTile, 255, 0, 0);
+ imagerectangle( $oTile, 1, 1, $tileWidth-2, $tileHeight-2, $green );
+ imageline( $oTile, 0, $tileHeight/2, $tileWidth-1, $tileHeight/2, $red);
+ imageline( $oTile, $tileWidth/2, 0, $tileWidth/2, $tileHeight-1, $red);
+ imagestring ( $oTile, 3, 10, 10, ($metaLeft+$tileLeft)." x ".($metaTop+$tileTop), $black );
+ imagestring ( $oTile, 3, 10, 30, ($minx+$i*$geoWidth)." x ".($maxy - $j*$geoHeight), $black );
+ }
+ $szTileImg = $szCacheDir."/t".($metaTop+$tileTop)."l".($metaLeft+$tileLeft).$szImageExtension;
+ eval("$szImageOutputFunction( \$oTile, '".$szTileImg."' );");
+ imagedestroy($oTile);
+ $oTile = null;
+ }
+ }
+ if ($oGDImg != null)
+ {
+ imagedestroy($oGDImg);
+ $oGDImg = null;
+ }
+ if (!$bDebug)
+ {
+ unlink( $szMetaImg );
+ }
+ }
+ //release the exclusive lock
+ flock($fpLockFile, LOCK_UN );
+}
+
+//acquire shared lock for reading to prevent a problem that could occur
+//if a tile exists but is only partially generated.
+flock($fpLockFile, LOCK_SH);
+
+$h = fopen($szCacheFile, "r");
+header("Content-Type: ".$szImageHeader);
+header("Content-Length: " . filesize($szCacheFile));
+header("Expires: " . date( "D, d M Y H:i:s GMT", time() + 31536000 ));
+header("Cache-Control: max-age=31536000, must-revalidate" );
+fpassthru($h);
+fclose($h);
+
+//release lock
+fclose($fpLockFile);
+
+/* bug 1253 - root permissions required to delete cached files */
+umask($orig_umask);
+
+exit;
+?>
diff --git a/openlayers/examples/kinetic.html b/openlayers/examples/kinetic.html
new file mode 100644
index 0000000000..19919ae22e
--- /dev/null
+++ b/openlayers/examples/kinetic.html
@@ -0,0 +1,44 @@
+
+
+
+ OpenLayers Kinetic Dragging Example
+
+
+
+
+
+
+
+
Kinetic Dragging Example
+
+
+ kinetic, dragging
+
+
+
+ Demonstrates Kinetic Dragging.
+
+
+
+
+
+
+ OpenLayers Kinetic Dragging inspired from Tile5, and
+ kineticscrolling for Google Maps API V3.
+
+ As shown in this example Kinetic Dragging is enabled by setting
+ enableKinetic to true in the config object provided to the
+ Control.DragPan constructor. When using
+ Control.Navigation or Control.TouchNavigation
+ providing options to the underlying Control.DragPan
+ instance is done through the dragPanOptions config
+ property.
+
+ Demonstrates loading and displaying a KML file on top of a basemap.
+
+
+
+
+
+
+ A vector layer can be populated with features from a KML document
+ by configuring the layer with an HTTP protocol that points to the
+ KML document and is configured with a KML format for parsing features.
+ The fixed strategy is used to load all features at once.
+
+
+ View the kml-layer.js
+ source to see how this is done.
+
+ Demonstrates populating a PointTrack layer with gx:Track elements from KML.
+
+
+
+
+ If a KML document contains <gx:Track>
+ elements and the extractTracks property is set true on the
+ parser, features will be created that represent track points.
+ These track points can easily be visualized as track lines with
+ a PointTrack layer, preserving the KML's original
+ styles.
+
+
+
diff --git a/openlayers/examples/kml-pointtrack.js b/openlayers/examples/kml-pointtrack.js
new file mode 100644
index 0000000000..47836f25fd
--- /dev/null
+++ b/openlayers/examples/kml-pointtrack.js
@@ -0,0 +1,51 @@
+var map;
+
+function init() {
+
+ var mercator = new OpenLayers.Projection("EPSG:900913");
+ var geographic = new OpenLayers.Projection("EPSG:4326");
+
+ map = new OpenLayers.Map({
+ div: "map",
+ projection: mercator,
+ layers: [
+ new OpenLayers.Layer.OSM(),
+ new OpenLayers.Layer.PointTrack("Aircraft Tracks", {
+ projection: geographic,
+ strategies: [new OpenLayers.Strategy.Fixed()],
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: "kml-track.kml",
+ format: new OpenLayers.Format.KML({
+ extractTracks: true,
+ extractStyles: true
+ })
+ }),
+ dataFrom: OpenLayers.Layer.PointTrack.TARGET_NODE,
+ styleFrom: OpenLayers.Layer.PointTrack.TARGET_NODE,
+ eventListeners: {
+ "beforefeaturesadded": function(e) {
+ // group the tracks by fid and create one track for
+ // every fid
+ var fid, points = [], feature;
+ for (var i=0, len=e.features.length; i
+
+
+
+
+
+ OpenLayers KLM Track Parsing Example
+
+
+
+
+
+
+
+
+
Parsing gx:Track in KML
+
+ Demonstrates parsing of gx:Track elements from KML.
+
+
+ KML, parser, parsing, tracks
+
+
+
+
+ If a KML document contains <gx:Track>
+ elements and the extractTracks property is set true on the
+ parer, features will be created that represent track points.
+ Each feature will have a when attribute that contains the
+ value of the relevant <when> element from
+ the track.
+
+
+ View the kml-track.js
+ source to see how this is done.
+
]]>
+
+ 4.213227700645635
+ 52.04260288332888
+ 0
+ 24.63686803544318
+ 0
+ 1.387289180270979e-005
+
+ #msn_sunny_copy69
+
+ 4.213209970684247,52.04268354765237,0
+
+
+
+ Sundial, Den Haag - Loosduinen
+ Thanks to A30
+
+A sundial made of wooden blocks.
+The highest block in the middle is the style and casts its shadow each hour on one of the other blocks.
+
+
+Image source:www.dse.nl]]>
+
+ 4.236038669148795
+ 52.0499434967447
+ 0
+ 18.37312193280116
+ 2.202011190893535e-011
+ -0.3988978466888938
+
+ #msn_sunny_copy69
+
+ 4.236026636181407,52.049986562365,0
+
+
+
+ Sundial with light conductors - Paris, Les Halles
+
+
+The sunlight falls on one of the three windows in the column (east, south, west) and over light conductors on the wall is indicated.
+
+
+
+The clock shows 16,40 o'clock.
+
+
+
+Quelle:http://www.home.uni-osnabrueck.de/ahaenel/sonnuhr/paris_halles.htm
+
+http://perso.orange.fr/cadrans.solaires/cadrans/cadran-halles-paris.html]]>
+
+ 2.344185113917775
+ 48.86294270160059
+ 0
+ 39.52787486507292
+ 0
+ -0.003533584730563007
+
+ #msn_sunny_copy69
+
+ 2.344143312335305,48.86302323987447,0
+
+
+
+ Sundial, Plymouth, Devon, UK
+ The gnonom is 27 foot high, the pool has 21 feet diameter. It was designed by architect Carole Vincent from Boscastle in Cornwall and was unvieled by Her Majesty the Queen on Friday July 22nd 1988 for a cost of cost £70,000 . The sundial runs one hour and seventeen minutes behind local clocks.
+
+
Image source:
+Image source:www.sundials.co.uk]]>
+
+ -1.117890647596098
+ 50.79319978711329
+ 0
+ 79.08348690288113
+ 0
+ 0.02100880488328328
+
+ #msn_sunny_copy69
+
+ -1.117887915142518,50.79336425684474,0
+
+
+
+ Sundial, Britzer Garten, Berlin
+ See photos on this page:
+http://home.arcor.de/ruth.kirsch/sonnenuhr/berlin_1xxxx/berlin_1xxxx.htm
+
+ 13.42078373972489
+ 52.4366841172644
+ 0
+ 102.2086892967038
+ 0
+ -0.004885703167479627
+
+ #msn_sunny_copy69
+
+ 13.4207448482471,52.43682055829985,0
+
+
+
+ Sundial, Falkenplatz, Berlin
+ The original reasoning event for the construction of the sundial was the UNO climate conference 1995 in Berlin. The base stone of the wall spiral was layed at a festivity at the equinox of March 1995. Until June 1995 the main construction was completed, and at another festivity at the summer solstice the gnonom and the totem ("Lebensbaum") was installed by Berlin fire fighters.
+
+
The nearly spiral sundial was planned as a "living sundial" and initiated by the groups of the "Netzwerk Klimagipfel 95", mainly by the journalist T. Römer with the "Verein zur Rettung des Regenwaldes und Naturschutzgebietes La Macarena", and the "Netzwerk Spiel/Kultur" at the Prenzlauer Berg.
+
+
+The covering clay stones were made out of three metric tons of white and brown clay, formed by children of about 50 institutions like school classes and kindergardens of the closer region. The stones were burned and installed in the summer of 1995. Partly they are constructed out of different materials, partly especially formed or ornamented. Six detail images are showing some examples: (White near Red - MC?, Smiley with Heart Eyes, Sun-Moon-Star, Red Broken and Patterned, Rain pits and Stone Hearts in Clay, Red near White - Clay Fish and Sunshine over the Sea).
+
+In September 1995 the sundial was completed. It was called "living sundial" because it was planned to replace the clay stones regulary when they are destroyed and to add some green to the outside wall of the clock. In December 1995 the clock got a special price of the local environmental administration.
+
.
+
+
+
In September 1995 the sundial was completed. It was called "living sundial" because it was planned to replace the clay stones regulary when they are destroyed and to add some green to the outside wall of the clock. In December 1995 the clock got a special price of the local environmental administration.
+
+
+
This sundial was deconstructed at the end of 2002 or at the beginning of 2003:
]]>
+
+ -110.0353754682919
+ 53.26386357821667
+ 0
+ 155.9861269181855
+ 0
+ -0.01432903343453666
+
+ #msn_sunny_copy69
+
+ -110.0355256583979,53.26413794825379,0
+
+
+
+ Giant Lady's Leg Sundial, Roselawn, Indiana, USA
+ The Sun Aura Nudist Resort opened in 1933. Back then it was called Club Zoro and its founder was Alois Knapp, a Chicago lawyer, German Nacktkulturist, editor of Sunshine and Health magazine, and "the father of nudism in America."
+
+
+
+
The club eventually passed into the hands of Dale and Mary Drost. Their son, Dick, had big ideas: he renamed the place Naked City, made it the home of the Ms. Nude Teeny Bopper Contest and the "Erin Go Bra-less" Dance on St. Patrick's Day, and had built the giant lady's leg sundial, 63 feet long and properly positioned to tell time -- a useful feature for wristwatchless nudists.
+
+
Naked City closed in 1986 when Dick was run out of Indiana on child molestation charges, but the leg remains and so does the resort, now under new management. The circular main building with the mirror gold windows is a combination office-sauna-restaurant.
+
+
The guy who paints the leg told us that Sun Aura is a "clothing optional" camp -- in other words, you don't have to get nude to take a picture of the big lady's leg. But for those who do choose to get into the spirit of things, a helpful sign on the exit road reads, "Stop. You Must Be Dressed Beyond This Point."
]]>
+
+ -87.32599841452155
+ 41.14248697221019
+ 0
+ 40.06529731982877
+ 0
+ -108.7495178792767
+
+ #msn_sunny_copy69
+
+ -87.32608203713804,41.14242622349031,0
+
+
+
+ Sundial, Ingleside, San Francisco, USA
+ Thanks to CostaPacific
+
+Most people in San Francsco have no idea that their city is host to the world's second largest sundial. It was built in 1913 as a gimic to attract people to a new housing development that was built arround the configuration of the old Ingleside Race Track.
+
+
+
Image source:]]>
+
+ -122.4687521474299
+ 37.72475779376939
+ 0
+ 104.1096478961583
+ 0
+ -6.694029629862418e-005
+ relativeToGround
+
+ #msn_sunny_copy69
+
+ -122.4687727980979,37.72497790751523,59.97947112427937
+
+
+
+ Sundial Bridge
+ Located in Redding, CA. Opened in 2004 this bridge actually acts as a sundial. The time can be read in a garden on the North side of the bridge.
+
+http://www.turtlebay.org/sundial/sundial.shtml
+
+ -122.3775376532067
+ 40.59329504591046
+ 0
+ 160.1654912126178
+ 7.884938307004504e-010
+ 0.008470312235033726
+
+ #msn_sunny_copy69
+
+ -122.3777030796087,40.59376952663914,0
+
+
+
+ Sundial, Jaipur,India
+ Villaman
+
+
Jaipur Observatory Sundial
+
+
+
+
+
Walk through these doors and up the stairs to begin your journey along a line from Jaipur, India toward the North Celestial Pole. Such cosmic alignments abound in marvelous Indian observatories where the architecture itself allows astronomical measurements. The structures were built in Jaipur and other cities in the eighteenth century by the Maharaja Jai Singh II (1686-1743). Rising about 90 feet high, this stairway actually forms a shadow caster or gnomon, part of what is still perhaps the largest sundial on planet Earth. Testaments to Jai Singh II's passion for astronomy, the design and large scale of his observatories' structures still provide impressively accurate measurements of shadows and sightings of celestial angles.
+
The seeming movement of the sun in the sky, resulting in the discrimination between day and night, was one of the earliest observations of nature performed by men. It enables us to experience the phenomenon “time” with our own senses. The first examples for telling the time with the help of the sun or its shadow date back to the Ancient World. The are numerous archetypes for sundials built inmany different styles, using different techniques.
+
+
The archetype for the horizontal sundial on top of the slagheap Hoheward is the sundial of the Roman Emperor Augustus on the Campus Martius in Rome.
+(It is unknown, whether this ancient obelisk was part of a complete sun dial with hour and declination lines on the morning and afternoon side or whether only a meridian line existed to measure the elevation of the sun in upper culmination. The today's scientific knowledge indicates the existence of a meridian.) The observation of the Obelisk's shadow on the sundial enables the observer to easily determine date and time. Apart from “time” one can also experience the laws of celestial mechanics. Men encounter themselves in relation to the cosmos.
+
+
Representing the first step in the realisation of the Astronomical Theme Park the Obelisk was opened on May 17th, 2005. It is located on the already completed south-eastern plateau of the slagheap at a height of 140 m above sea level. The shadowed area is 62 m in diameter.
+
+
+
+
+This picture shows the Obelisk after the end of the assembly on the day of the opening. Shortly before it was put on top of the readily prepared pedestal by a helicopter and then bolted.
+
+
]]>
+
+ 107.4940550739811
+ -6.852038750176605
+ 0
+ 296.7282563680993
+ 2.08633946131246e-011
+ 0.5509822616366601
+ relativeToGround
+
+ #msn_sunny_copy70
+
+ 107.4939718861608,-6.851748821808833,0
+
+
+
+ Sundial, Pajala, Sweden
+ The world's biggest sundial today is in the Torne Valley, north of the Arctic Circle. The Guinness Book of Records has put Pajala, northern Sweden, on the map, and its sundial - formed as a "round square".
+
+
The sundial in Pajala, 38.33 m. in diameter, holds the world record, according to the Guinness Book of Records. The previous record was held by Disney World in Orlando, Florida, with 37.18 m.
+
+
The sundial was inaugurated by the Swedish Minister of Labour Margareta Winberg in July 1996. Pajala is situated at 23.28 ° East, 67.21 ° North, which is 70 km north of the Arctic Circle, making a circular sundial possible. This is due to the fact that the Midnight Sun describes a complete circle over the horizon.
+
+
Its masts of dried fir form a unique spatiality around a circular "square". The site is especially used for local functions such as Pajala Fair, Romp Week and the Northern Lights Festival.
+
+
The central square in Pajala, through its size and latitude, offered conditions for a sundial dedicated to the Midnight Sun. Architect Mats Winsa took his inspiration from the square in Siena, and for the sculptures in the park - astronomical instruments in India dating back to the 18th century. Naturally, it was a challenge to compete with the previous record from 1991 by the world-famous Japanese architect, Arata Isozaki.
+
+
The sundial captures the sun's movement by allowing the shadow of the central gnomon to fall across the hour divisions of the surrounding posts. The gnomon, like the Earth's axis, points toward the Pole Star, which according to Finnish-Ugrian mythology (the region has Finnish roots) holds up the firmament. The "sun wheel" embedded in the ground here (forming a cross in the circle) is in fact a calendar. Water bubbles up from four sources corresponding to the four principal points of the compass. The water gathers in the central pond, which was designed with children in mind.
+
+
For their survival, humans have followed the rhythm of the sun. The need to observe the changing seasons and days led to the early development of the sundial. Our lives today are characterised by obedience to mechanical and national time - inventions separate from true solar time. The sundial displays true solar time, which in Pajala is half-an-hour ahead of national time.
+
+
The sundial in Pajala celebrates light, and acts as a reminder of its significance for all life by functioning as a biological clock in a world fettered by artificial time. The hormone rush in spring reminds us of our direct dependence on sunlight as living beings.
]]>
+
+ -77.66915367541856
+ 43.0844306339545
+ 0
+ 61.69080872372956
+ 0
+ 9.994948692290747e-005
+ relativeToGround
+
+ #msn_sunny_copy70
+
+ -77.66917908415978,43.08440844604031,0
+
+
+
+ Sundial, Center of the World, Felicity, CA
+
+
+
+The 15 foot Sundial at Felicity is a three-dimensional bronze of Michelangelo's Arm of God painted on the Sistine Chapel ceiling. The arm was sculpted and cast in bronze in New England. The rock is local but the installation required the assistance of a mining engineer and a special drill. The bronze Roman numerals give the time. A sundial is precisely accurate once a year and this was set at noon on Christmas Day. The arm points to the Hill of Prayer, site of the Church on the Hill at Felicity.
+At the entrance to The Center of the World campus is a 25 ft. high section of the original stairway of the Eiffel Tower. In 1983, the Government of France removed approximately 500 ft. of the original stairway. Built with the technology of the 1860's, the weight of approximately 54,000 lbs. was causing sway at the top of the then 94 year old tower. The 6,600 lb. section serves no practical purpose, but is part of the spirit of Felicity.
+The idea of making Felicity the Center of the World came to Jacques-André when he'd been mayor only a few months. Somehow he convinced Imperial County, CA, to recognize his claim. Soon he had convinced the Institut Geographique National of France, General Dynamics Corporation, and The People's Republic of China to recognize it as well. "I knew I had to build something, but I didn't know what. My wife said, 'It's a desert; why not a pyramid?' So Jacques-André had built a 21-foot-tall pink marble pyramid, its interior lined with mirrors, a plaque embedded in the floor, marking the exact spot. For a dollar, tourists can now stand on the official Center Of The World and take a picture themselves at the official "Center Of The World".
+The Felicity Post Office was dedicated on 5 December 1987 at a time when thousands of small post offices were being eliminated as an economy measure. The town, whose population numbered two, saw over 2,300 letters mailed that day. The dedication ceremony was highlighted by a speech in Chinese by Consul Zhou of the People’s Republic of China who traveled 600 miles for the occasion. It is operated by the town at a cost to the Federal Government of one dollar per year. Twenty uncashed one dollar checks are on file.
+ Demonstrates how to use a StyleMap for displaying scale dependent labels.
+
+
+
+
+ This example uses rule based styling to change the how features are
+ labeled at different scales. An OpenLayers.Rule object
+ can have minScaleDenominator and
+ maxScaleDenominator properties to control when the
+ provided symbolizer should be used.
+
+
+
+
diff --git a/openlayers/examples/label-scale.js b/openlayers/examples/label-scale.js
new file mode 100644
index 0000000000..a46fe4b71c
--- /dev/null
+++ b/openlayers/examples/label-scale.js
@@ -0,0 +1,72 @@
+// Create 50 random features, and give them a "type" attribute that
+// will be used for the label text.
+var features = new Array(50);
+for (var i=0; i
+
+
+
+
+
+ OpenLayers Late Rendering Example
+
+
+
+
+
+
+
Late Rendering
+
+
+ creation, render, div
+
+
+
+ Demonstrates how a map can be rendered to an empty container after
+ construction by calling the render method.
+
+
+
+
In cases where you need to create a map first and render it to some
+ container later, call the map constructor without a "div" argument.
+ In this case, you can provide the options object as the first argument.
+ To render your map to some container after construction, call the map's
+ render method with the container id.
+ Demonstrates the use of the LayerSwitcher outside of the OpenLayers window.
+
+
+
+
+
+
This demonstrates use of the LayerSwitcher outside the map div. It also shows use
+ of the displayInLayerSwitcher option on the Layer to cause it to not display in the
+ LayerSwitcher.
+
+
+
diff --git a/openlayers/examples/lite.html b/openlayers/examples/lite.html
new file mode 100644
index 0000000000..d4ae7e0013
--- /dev/null
+++ b/openlayers/examples/lite.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ OpenLayers Basic Single WMS Example
+
+
+
+
+
+
+
Basic Single WMS Example
+
+
+ basic, simple, minimal, cleanup
+
+
+
Show a Simple Map
+
+
+
+
+
This example shows a very simple layout with minimal controls.
+ This example uses a single WMS base layer.
This is an example of using a MapServer Layer with a gutter
+ parameter. The gutter parameter is used to try to limit the edge
+ effects between tiles.
Marker Shadows using Background Graphics/Z-Indexes
+
+
+ markers, shadow, style
+
+
+
+ This example shows off marker shadows using background graphics and z-indexes. Move the features around to show the shadows' interaction.
+
+
+
+
+
+
+
+
+
+
+
+ The features in this map were generated at random. Each of these features have a backgroundGraphic property set in the style map to add a shadow image. Note that the background graphics are not duplicated features with a different style.
+
+ The shadows were set to have a different z-index than the markers themselves, using the backgroundGraphicZIndex property. This makes sure all shadows stay behind the markers, keeping a clean look. The shadows were also placed nicely relative to the external graphic using the backgroundXOffset and backgroundYOffset property.
+
+ Y-ordering on the layer is enabled. See the ordering example.
+
This example shows how to create a OpenLayers.Layer.Markers layer,
+ add an icon, put it into a marker, and add the marker to the layer.
+ Once the marker has been added it is possible to use setSize() on the
+ icon in order to resize the marker.
This is an example of an OpenLayers.Layers.Markers layer that shows
+ some examples of adding markers. Also demonstrated is registering a
+ mousedown effect on a marker.
+
+
+
diff --git a/openlayers/examples/markersTextLayer.html b/openlayers/examples/markersTextLayer.html
new file mode 100644
index 0000000000..b8e1acbc94
--- /dev/null
+++ b/openlayers/examples/markersTextLayer.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ Using a Layer.Text to display markers
+
+
+
+
+
+
+
Using a Layer.Text to display markers
+
+ textlayer, csv, tsv, basic, popup
+
+
+ The Layer.Text class reads a Tab seperated values file and displays it as markers on
+ the map.
+
+ Demonstrates the measure control to measure distances and areas.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Note that the geometries drawn are planar geometries and the
+ metrics returned by the measure control are planar measures by
+ default. If your map is in a geographic projection or you have the
+ appropriate projection definitions to transform your geometries into
+ geographic coordinates, you can set the "geodesic" property of the control
+ to true to calculate geodesic measures instead of planar measures.
+ Also you have the possibility to set the "immediate" property to true
+ to get a new calculated value once the mouse has been mooved.
+ A mobile example displaying various layer types: WMS, WFS, KML.
+
+
+
+
+
+
diff --git a/openlayers/examples/mobile-layers.js b/openlayers/examples/mobile-layers.js
new file mode 100644
index 0000000000..05e1f03399
--- /dev/null
+++ b/openlayers/examples/mobile-layers.js
@@ -0,0 +1,71 @@
+// initialize map when page ready
+var map;
+
+// Get rid of address bar on iphone/ipod
+var fixSize = function() {
+ window.scrollTo(0, 0);
+ document.body.style.height = '100%';
+ if (!(/(iphone|ipod)/.test(navigator.userAgent.toLowerCase()))) {
+ if (document.body.parentNode) {
+ document.body.parentNode.style.height = '100%';
+ }
+ }
+};
+setTimeout(fixSize, 700);
+setTimeout(fixSize, 1500);
+
+// allow testing of specific renderers via "?renderer=Canvas", etc
+var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
+OpenLayers.ProxyHost = "proxy.cgi?url=";
+
+function init() {
+
+ map = new OpenLayers.Map({
+ div: "map",
+ theme: null,
+ controls: [
+ new OpenLayers.Control.Attribution(),
+ new OpenLayers.Control.TouchNavigation({
+ dragPanOptions: {
+ enableKinetic: true
+ }
+ }),
+ new OpenLayers.Control.ZoomPanel()
+ ]
+ });
+
+ var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
+ "http://vmap0.tiles.osgeo.org/wms/vmap0",
+ {layers: 'basic'},
+ {isBaseLayer: true, transitionEffect: 'resize'}
+ )
+
+ var kml = new OpenLayers.Layer.Vector("KML", {
+ projection: map.displayProjection,
+ strategies: [new OpenLayers.Strategy.Fixed()],
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: "kml/sundials.kml",
+ format: new OpenLayers.Format.KML({
+ extractStyles: true,
+ extractAttributes: true
+ })
+ }),
+ renderers: renderer
+ });
+
+ var wfs = new OpenLayers.Layer.Vector("States", {
+ strategies: [new OpenLayers.Strategy.Fixed()],
+ protocol: new OpenLayers.Protocol.WFS({
+ url: "http://demo.opengeo.org/geoserver/wfs",
+ featureType: "states",
+ featureNS: "http://www.openplans.org/topp"
+ }),
+ renderers: renderer
+ });
+
+ map.addLayers([wms, wfs, kml]);
+
+ map.setCenter(new OpenLayers.LonLat(-104, 42), 3);
+};
diff --git a/openlayers/examples/mobile-navigation.html b/openlayers/examples/mobile-navigation.html
new file mode 100644
index 0000000000..3d2ba593d1
--- /dev/null
+++ b/openlayers/examples/mobile-navigation.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ Mobile Navigation Example
+
+
+
+
+
+
+
+
Mobile Navigation
+
+
+ mobile, touch, drag, move, zoom, navigate
+
+
+
Demonstrate map navigation on mobile
+
+
+
+
+
+ This example demonstrates what OpenLayers provides for map
+ navigation on mobile devices.
+
+
+
+ The TouchNavigation control allows to pan the map with touch
+ gestures on the screen – "touchstart", "touchmove",
+ "touchend" sequences. It also allows to zoom in with double taps,
+ and to zoom out with two-finger single taps. The latter is only
+ available on devices supporting multi-touch. Note that in most
+ devices Android doesn't support multi-touch in the browser.
+
+
+
+ The ZoomPanel control provides + and - buttons for zooming in and
+ out. These buttons should work on any device, and the zoom out
+ button is especially needed for devices that don't support
+ multi-touch.
+
+ Use the MousePosition Control to display the coordinates of the cursor
+ inside or outside the map div.
+
+
+
+
Moving your mouse to the upper left corner of this map should return
+ 'x=0,y=0' -- in the past, it didn't in IE. If it returns 2,2, consider it a
+ bug, and report it.
Let OpenLayers send less tile requests to the server when wheel-zooming.
+
+
+
+
+
This example shows how to configure the Navigation control to use
+ the mousewheel in a less server resource consuming way: as long as you
+ spin the mousewheel, no request will be sent to the server. Instead,
+ the zoomlevel delta will be recorded. After a delay (in this example
+ 100ms), a zoom action with the cumulated delta will be performed.
+ This sphericalMercator example using multimap demonstrates that the
+ multimap layer does not fully support the sphericalMercator projection at
+ this time.
+
+ Load your tiles faster by pointing to the same server, but with different urls
+
+
+
+
+
Browsers typically limit the number of concurrent requests to the same
+ server, based on hostname. In order to ake tiles load more quickly, it
+ often makes sense to distribute requests over multiple hostnames to achieve
+ more concurrency. Typically, browsers perform best with 3 different
+ hostnames -- your performance may vary. (For example, if your server can't
+ handle more than 2 requests simultaneously, then additional hostnames will
+ not help you.)
This example demonstrates a couple features of the Navigation
+ control. The Navigation control controls most map dragging, movement,
+ zooming, etc. In this case, we have a demonstration of how to create a
+ navigation control with no zoom wheel action, which can then be enabled
+ or disabled by the user.
+
+
+
diff --git a/openlayers/examples/navigation-history.html b/openlayers/examples/navigation-history.html
new file mode 100644
index 0000000000..e93007dd9e
--- /dev/null
+++ b/openlayers/examples/navigation-history.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ OpenLayers Navigation History Example
+
+
+
+
+
+
+
Map Navigation History Example
+
+
+ history, basic
+
+
+
+ A control for zooming to previous and next map extents.
+
+
+
+ Map navigation history controls
+
+
+
diff --git a/openlayers/examples/navtoolbar-alwaysZoom.html b/openlayers/examples/navtoolbar-alwaysZoom.html
new file mode 100644
index 0000000000..7976918aa8
--- /dev/null
+++ b/openlayers/examples/navtoolbar-alwaysZoom.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ A navToolbar with an alwaysZoom ZoomBox
+
+
+
+
+
+
+
+
+
A navToolbar with an alwaysZoom ZoomBox
+
+ navigation toolbar
+
+
+ Demo of a custom NavToolbar which uses a zoomBox tool that always zoom in even when the zoom box is too big.
+
+ Geocoding example using the http://www.openrouteservice.org/ OpenLS service. Recenter to the first item of the results.
+
+
+
+
diff --git a/openlayers/examples/ordering.html b/openlayers/examples/ordering.html
new file mode 100644
index 0000000000..7cb3f2b584
--- /dev/null
+++ b/openlayers/examples/ordering.html
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+ OpenLayers: Z-Ordering and Y-Ordering of Vector Features
+
+
+
+
+
+
+
+
Z-Index/Y-Order Example
+
+
+ stack, stacking, zindex, ordering
+
+
+
+ This example shows the use of z-indexing and y-ordering of external graphics. Zoom in and out to see this behavior.
+
+
+
Z-Index (with Y-Ordering enabled)
+
+
+
+
+
+
+
+ In this map, the gold features all have the same z-index, and the red features have alternating z-indeces. The gold features' z-index is greater than the red features' z-indeces, which is why gold features look to be drawn on top of the red features. Since each gold feature has the same z-index, gold features succomb to y-ordering: this is where features that seem closest to the viewer (lower lattitude) show up above those that seem farther away (higher lattitude).
+
+ You can enable y-ordering by passing the parameter yOrdering: true in the vector layer's options hash. For all configurations (with yOrdering or zIndexing set to true), if features have the same z-index -- and if y-ordering is enabled: the same latitude -- those features will succomb to drawing order, where the last feature to be drawn will appear above the rest.
+
+
+
+
+
+
Z-Index and Drawing Order (Z-Indexes set, and Y-Ordering disabled)
+
+
+
+
+
+
+
+ In this map, zIndexing is set to true. All features are given the same z-index (0), except for the first feature which has a z-index of 1. The layer's yOrdering parameter is set to the default (false). This configuration makes features succomb to z-index and drawing order (for the features with the same z-index), instead of y-order.
+
+ The features in this map were drawn from left to right and bottom to top, diagonally, to show that y-ordering is not enabled. Only the lower-left corner feature is drawn on top of the others, because it has a higher z-index (1 instead of 0).
+
+
+
+
+
+
+
+
diff --git a/openlayers/examples/osm-google.html b/openlayers/examples/osm-google.html
new file mode 100644
index 0000000000..3578246ccb
--- /dev/null
+++ b/openlayers/examples/osm-google.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ OpenLayers OSM and Google Example
+
+
+
+
+
+
+
+
+
OSM and Google Together
+
+ Demonstrate use of an OSM layer and a Google layer as base layers.
+
+
+ openstreetmap google
+
+
+
+
+ The Google(v3) layer and the OSM are both in the same projection
+ - spherical mercator - and can be used on a map together.
+ See the
+ osm-google.js source to see how this is done.
+
+
+
+
diff --git a/openlayers/examples/osm-google.js b/openlayers/examples/osm-google.js
new file mode 100644
index 0000000000..77d96d82f4
--- /dev/null
+++ b/openlayers/examples/osm-google.js
@@ -0,0 +1,28 @@
+var map;
+
+function init() {
+ map = new OpenLayers.Map({
+ div: "map",
+ projection: new OpenLayers.Projection("EPSG:900913"),
+ units: "m",
+ maxResolution: 156543.0339,
+ maxExtent: new OpenLayers.Bounds(
+ -20037508, -20037508, 20037508, 20037508.34
+ )
+ });
+
+ var osm = new OpenLayers.Layer.OSM();
+ var gmap = new OpenLayers.Layer.Google("Google Streets");
+
+ map.addLayers([osm, gmap]);
+
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+ map.setCenter(
+ new OpenLayers.LonLat(10.2, 48.9).transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ map.getProjectionObject()
+ ),
+ 5
+ );
+}
diff --git a/openlayers/examples/osm-layer.html b/openlayers/examples/osm-layer.html
new file mode 100644
index 0000000000..58f8158eec
--- /dev/null
+++ b/openlayers/examples/osm-layer.html
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+ OpenLayers: OSM Layer
+
+
+
+
+
+
+
+
+ Enable a small Overview Map that moves/interacts with your main map.
+
+
+
The above map has an overview map control that is created with
+ the default options. Much like a regular map, the map contained by
+ the overview map control defaults to a geographic projection.
+
+
The second map has an overview map control that is created with
+ non-default options. In this case, the mapOptions property of the
+ control has been set to use non-default projection related properties,
+ and the layers property has been set to use a layer different from the main
+ map. In addition, any other properties of the overview map control can be
+ set in this way.
+ The pan and zoom panels allow you to use CSS styling to change the
+ look and feel of the panels, including changing their position
+ and their icons without needing to change any code.
+
This demo uses OpenLayers.Layer.GeoRSS and OpenLayers.Layer.PointTrack.
+
The track is created by connecting the points of the GeoRSS feed.
+
+
The above input box allows the input of a URL to a GeoRSS feed. This feed can be local to the HTML page -- for example, entering 'xml/track1.xml' will work by default.
+
The example shows a track, displayed as a line connecting the points of the feed. It also shows markers at positions that have a title tag in the rss item. If clicked, a popup will show title and description.
All of the images in this file a pre-cached, meaning they are
+ loaded immediately when you load the page (they are just placed
+ far offscreen, that's why you don't see them).
+
+
+
The only image that is *not* preloaded is img/small.jpg, the brazilian
+ flag. We do this in order to test out to make sure that our auto-sizing
+ code does in fact activate itself as the images load. To verify
+ this, clear your cache and reload this example page. Click on
+ any of the markers in the 'AutoSize' row. If the popup autosizes
+ to correctly contain the entire flag: golden. If the popup is
+ tiny and you can only see a corner of it, then this code is broken.
+
The Sync link destroys the features currently in the layer, reads
+ features from the Gears database, and adds them to the layer.
+ Uncommitted features will be lost.
The Delete link marks the selected feature as DELETE. To select a feature
+ click choose the navigation control in the editing toolbar.
+
+
+
+
Status:
+
Result:
+
+
+
+
This example demonstrates the usage of OpenLayers Gears protocol to
+ read/create/update/delete features from/to the Gears database.
+ Gears must obviously be installed
+ in your browser for this example to work.
+
+
+
diff --git a/openlayers/examples/proxy.cgi b/openlayers/examples/proxy.cgi
new file mode 100755
index 0000000000..c668218c48
--- /dev/null
+++ b/openlayers/examples/proxy.cgi
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+
+
+"""This is a blind proxy that we use to get around browser
+restrictions that prevent the Javascript from loading pages not on the
+same server as the Javascript. This has several problems: it's less
+efficient, it might break some sites, and it's a security risk because
+people can use this proxy to browse the web and possibly do bad stuff
+with it. It only loads pages via http and https, but it can load any
+content type. It supports GET and POST requests."""
+
+import urllib2
+import cgi
+import sys, os
+
+# Designed to prevent Open Proxy type stuff.
+
+allowedHosts = ['www.openlayers.org', 'openlayers.org',
+ 'labs.metacarta.com', 'world.freemap.in',
+ 'prototype.openmnnd.org', 'geo.openplans.org',
+ 'sigma.openplans.org', 'demo.opengeo.org',
+ 'www.openstreetmap.org', 'sample.azavea.com',
+ 'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080',
+ 'vmap0.tiles.osgeo.org', 'www.openrouteservice.org']
+
+method = os.environ["REQUEST_METHOD"]
+
+if method == "POST":
+ qs = os.environ["QUERY_STRING"]
+ d = cgi.parse_qs(qs)
+ if d.has_key("url"):
+ url = d["url"][0]
+ else:
+ url = "http://www.openlayers.org"
+else:
+ fs = cgi.FieldStorage()
+ url = fs.getvalue('url', "http://www.openlayers.org")
+
+try:
+ host = url.split("/")[2]
+ if allowedHosts and not host in allowedHosts:
+ print "Status: 502 Bad Gateway"
+ print "Content-Type: text/plain"
+ print
+ print "This proxy does not allow you to access that location (%s)." % (host,)
+ print
+ print os.environ
+
+ elif url.startswith("http://") or url.startswith("https://"):
+
+ if method == "POST":
+ length = int(os.environ["CONTENT_LENGTH"])
+ headers = {"Content-Type": os.environ["CONTENT_TYPE"]}
+ body = sys.stdin.read(length)
+ r = urllib2.Request(url, body, headers)
+ y = urllib2.urlopen(r)
+ else:
+ y = urllib2.urlopen(url)
+
+ # print content type header
+ i = y.info()
+ if i.has_key("Content-Type"):
+ print "Content-Type: %s" % (i["Content-Type"])
+ else:
+ print "Content-Type: text/plain"
+ print
+
+ print y.read()
+
+ y.close()
+ else:
+ print "Content-Type: text/plain"
+ print
+ print "Illegal request."
+
+except Exception, E:
+ print "Status: 500 Unexpected Error"
+ print "Content-Type: text/plain"
+ print
+ print "Some unexpected error occurred. Error text was:", E
diff --git a/openlayers/examples/regular-polygons.html b/openlayers/examples/regular-polygons.html
new file mode 100644
index 0000000000..f2725dd2f8
--- /dev/null
+++ b/openlayers/examples/regular-polygons.html
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+ OpenLayers Regular Polygon Example
+
+
+
+
+
+
+
+
+ Shows how to use the RegularPolygon handler to draw features with
+ different numbers of sides.
+
+
+
+
+
Map Controls
+
+
+
+
+
+
+
+
+
+
+
+
+
Draw Option
+
Value
+
+
+
+ shape
+
+
+
+
+
+
+
+ snap angle
+
+
+
+
+
+
+
+ size
+
+
+
+
+
+
+
+ irregular
+
+
+
+
+
+
+
+
+
+ Regular polygons can be drawn by pointing a DrawFeature control to the
+ RegularPolygon handler class. The options above demonstrate how the
+ handler can be configured. Note if you are in angle snapping mode (if
+ the snap angle is non-null) and you hold down the Shift key, you
+ will toggle to non-snapping mode.
+
+
+ The irregular option allows drawing of irregular polygons. With this option, the fixed radius option is ignored.
+
+
diff --git a/openlayers/examples/resize-features.html b/openlayers/examples/resize-features.html
new file mode 100644
index 0000000000..521d501e24
--- /dev/null
+++ b/openlayers/examples/resize-features.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+ OpenLayers Resize Features Example
+
+
+
+
+
+
+
+
Resize Features Programatically
+
+ vector, feature, resizing, resize
+
+
+ Demonstration of how to use the geometry resize methods to
+ change feature sizes programatically.
+
+
+
This example demonstrates how features can be resized. There is not yet
+ a control built that provides a tool for resizing, but the geometry.resize
+ method can be accessed to resize programmatically.
+
Make the features bigger
+ or smaller.
+
+
diff --git a/openlayers/examples/restricted-extent.html b/openlayers/examples/restricted-extent.html
new file mode 100644
index 0000000000..5117453758
--- /dev/null
+++ b/openlayers/examples/restricted-extent.html
@@ -0,0 +1,77 @@
+
+
+
+ Don't let users drag outside the map extent: instead, limit dragging such
+ that the extent of the layer is the maximum viewable area.
+
+
+
+ Map navigation is limited by a combination of map and layer properties.
+ The base layer resolutions array controls the resolutions (or zoom
+ levels) available. The resolutions can be limited by setting a
+ maxResolution property or by explicitly specifying a resolutions
+ array.
+
+
+ Navigation limited by the maxExtent property. A map cannot be panned
+ so that the center of the viewport is outside of the bounds specified
+ in maxExtent. If you wish to further restrict panning, use the
+ restrictedExtent property. With restrictedExtent set, the map cannot
+ be panned beyond the given bounds. If the maxResolution allows the
+ map to be zoomed to a resolution that displays an area bigger than
+ the restrictedExtent, the viewport will remain centered on the
+ restrictedExtent.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/openlayers/examples/rotate-features.html b/openlayers/examples/rotate-features.html
new file mode 100644
index 0000000000..8a8eb0285b
--- /dev/null
+++ b/openlayers/examples/rotate-features.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ OpenLayers Rotate Features Example
+
+
+
+
+
+
+
+
+ Details on how to create and rotate vector features programmatically
+
+
+
+
This example shows a few features rotating. There is not yet a control
+ built that provides a tool for rotating, but the geometry.rotate method
+ can be accessed to rotate programmatically.
+ Select a feature on hover or click with the Control.SelectFeature on a
+ vector layer.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Use the shift key to select multiple features. Use the ctrl key to
+ toggle selection on features one at a time. Note: the "clickout" option has no
+ effect when "hover" is selected.
+ Use a boxes layer to visually display the area of interest indicated by a user.
+
+
+ Because the ability to set the map to a given extent is limited by the
+ current resolutions available, zoomToExtent will not always set the map to
+ exactly the right extent. In order to visually annotate the actual extent,
+ this example, will use the Boxes layer to visually describe the desired
+ extent as well as setting the map extent.
+
+ Shows the usage of the method "simplify" that implements
+ the Douglas-Peucker algorithm to remove "insignificant"
+ vertices from LineString geometries.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Instances of OpenLayers.Geometry.LineString have a method simplify,
+ that can be used to simplify linestring geometries.
+ Simplification sometimes is useful to enhance the perfomance of
+ vector rendering or to reduce complexity of geometries. This
+ might be especially handy when viewing geometries a small
+ scales.
+
+
+ OpenLayers.Geometry.LineString::simplify is a recursive
+ implementation of the famous Douglas-Peucker algorithm. It is
+ controlled by a tolerance factor that defines the threshold for
+ vertices to be considered "insignificant" for the
+ general structure of the geometry.
+
+
+ The LineString on the left map can be simplified according to
+ the tolerance value one enters in the form-field above the maps.
+ Use a value between 0 and 1 for best results. If you navigate
+ the left map, the right map will show the same location to make
+ it easier to spot the differeces between the LineStrings.
+
+
+ You can also use the button "Start animation" to get
+ results for increasing tolerance-factors from 0.02 to 1.0. The
+ animation can be paused by clicking on the button "Stop
+ animation".
+
+ For a detailled explanation of the algorithm see
+ the
+ Wikipedia article or the original publication: David Douglas
+ & Thomas Peucker, "Algorithms for the reduction of the
+ number of points required to represent a digitized line or its
+ caricature", The Canadian Cartographer 10(2), 112-122 (1973)
+ (DOI:
+ 10.3138/FM57-6770-U75U-7727).
+
+ Use the singleTile option on gridded layers to request a single tile.
+
+
+
+
+ This map demonstrates the use of the singleTile property as an
+ alternative to the default tiled behavior of layers. The first
+ layer in the map is a WMS layer with the singleTile option set
+ true. The second layer is a WMS layer with the default options.
+
+
+ View the single-tile.js
+ source to see how this is done.
+
Parsing Styled Layer Descriptor (SLD) documents with the SLD format.
+
+
+
+
+
+
+
+ This example uses the SLD format to parse SLD documents pasted into the textarea above.
+ A rough representation of the parsed style is shown in the textarea below.
+
+ Parsing SLD and applying styles to a vector layer.
+
+
+
This example uses a SLD
+ file to style the vector features. To construct layers that use styles
+ from SLD, create a StyleMap for the layer that uses one of the userStyles in the
+ namedLayers object of the return from format.read(). Look at the sld.js source
+ to see how this is done.
+
Select a new style for the WaterBodies layer below:
+
+
+
+
diff --git a/openlayers/examples/sld.js b/openlayers/examples/sld.js
new file mode 100644
index 0000000000..888a9c6d27
--- /dev/null
+++ b/openlayers/examples/sld.js
@@ -0,0 +1,102 @@
+var map, sld, waterBodies;
+var format = new OpenLayers.Format.SLD();
+function init() {
+
+ map = new OpenLayers.Map('map', {allOverlays: true});
+ var layers = createLayers();
+ map.addLayers(layers);
+
+ waterBodies = layers[2];
+ map.addControl(new OpenLayers.Control.SelectFeature(
+ waterBodies, {hover: true, autoActivate: true}
+ ));
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+
+ OpenLayers.Request.GET({
+ url: "tasmania/sld-tasmania.xml",
+ success: complete
+ });
+}
+
+// handler for the OpenLayers.Request.GET function in the init method
+function complete(req) {
+ sld = format.read(req.responseXML || req.responseText);
+ buildStyleChooser();
+ setLayerStyles();
+
+ map.zoomToExtent(new OpenLayers.Bounds(143,-39,150,-45));
+}
+
+function createLayers() {
+ // the name of each layer matches a NamedLayer name in the SLD document
+ var layerData = [{
+ name: "Land",
+ url: "tasmania/TasmaniaStateBoundaries.xml"
+ }, {
+ name: "Roads",
+ url: "tasmania/TasmaniaRoads.xml"
+ }, {
+ name: "WaterBodies",
+ url: "tasmania/TasmaniaWaterBodies.xml"
+ }, {
+ name: "Cities",
+ url: "tasmania/TasmaniaCities.xml"
+ }];
+
+ var layers = [];
+ for (var i=0,ii=layerData.length; i
+
+
+
+
+ OpenLayers Snap Grid Example
+
+
+
+
+
+
Snap Grid Example
+
+
+ snap grid
+
+
+
Use a PointGrid layer and a Snapping control to snap to a grid of regularly spaced points
+ This example demonstrates feature editing with snapping to a regular
+ grid. The map is configured with a OpenLayers.Layer.PointGrid
+ layer and a OpenLayers.Control.Snapping agent. For the
+ best performance, the point grid layer should not made visible.
+ Snapping still works with layers that are not visible.
+
The split control can be configured to listen for edits on any vector layer
+ or it can allow for creation of temporary sketch features. Modified or
+ newly drawn features will be used to split existing features on any target
+ layer. This example shows the split control configured to use temporary
+ sketches for the split.
+ Uses a BBOX strategy to request features within a bounding box.
+
+
+
+
The BBOX strategy requests data within a bounding box. When the
+ previously requested data bounds are invalidated (by browsing to
+ some area not covered by those bounds), another request for data
+ is issued.
+ Shows the usage of custom classes for a fine grained control about
+ the clustering behaviour.
+
+
+
+
+
+
+ Select the desired clustering strategy:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The vectorlayer in this example contains random data with an
+ attribute "clazz" that can take the values 1, 2, 3 and 4. The
+ features with clazz = 4 are considered more important than the
+ others.
+
+
+ The radiobuttons on the right of the map control the
+ cluster strategy to be applied to the features.
+
+
+
+ No strategy
+ means that all features are
+ rendered, no clustering shall be applied
+
+
+ Simple cluster-strategy
+ applies the cluster
+ strategy with default options to the layer. You should notice
+ that many of the important features with clazz = 4 are getting
+ lost, since clustering happens regardless of feature attributes
+
+
+ Attributive cluster-strategy
+ uses a
+ customized cluster strategy. This strategy is configured to
+ cluster features of the same clazz only. You should be able to see all
+ red points (clazz = 4) even though the data is clustered. A
+ cluster now contains only features of the same clazz.
+
+
+ Rulebased cluster-strategy
+ uses another
+ customized cluster strategy. This strategy is configured to
+ cluster features that follow a certain rule only. In this case only
+ features with a clazz different from 4 are considered as
+ candidates for clustering. That means that usually you have fewer
+ clusters on the map, yet all with clazz = 4 are easily
+ distinguishable
+
+
+
+ Hover over the features to get a short infomation about the
+ feature or cluster of features.
+
+ Demonstrates the use of the cluster strategy threshold property.
+
+
+
+
The Cluster strategy lets you display points representing clusters
+ of features within some pixel distance. You can control the behavior
+ of the cluster strategy by setting its distance and threshold properties.
+ The distance determines the search radius (in pixels) for features to
+ cluster. The threshold determines the minimum number of features to
+ be considered a cluster.
+
+
+
Cluster details: hover over a feature to see details.
+ Uses a paging strategy to cache large batches of features and render a page at a time.
+
+
+ Displaying page 0 of ...
+
+
+
+
+
The Paging strategy lets you apply client side paging for protocols
+ that do not support paging on the server. In this case, the protocol requests a
+ batch of 100 features, the strategy caches those and supplies a single
+ page at a time to the layer.
+ Use rule based styling to use different symbolizers for different
+ feature groups.
+
+
+
+
+
+
+ This example uses four rules to render features. Rules are
+ based on a feature attribute and determine which symbolizer
+ is applied when rendering a feature. The rules in this example
+ change which marker is used by providing an externalGraphic
+ property in the symbolizer.
+
+ The features are labeled with the same attribute that determines
+ the symbolizer used. You should be able to confirm that the
+ graphic color corresponds to the range of numbers given below.
+
+
+
+
diff --git a/openlayers/examples/style-rules.js b/openlayers/examples/style-rules.js
new file mode 100644
index 0000000000..42d3f00a8b
--- /dev/null
+++ b/openlayers/examples/style-rules.js
@@ -0,0 +1,99 @@
+var map;
+
+function init() {
+ map = new OpenLayers.Map("map");
+
+ var wms = new OpenLayers.Layer.WMS(
+ "OpenLayers WMS",
+ "http://vmap0.tiles.osgeo.org/wms/vmap0",
+ {layers: "basic"}
+ );
+
+ /**
+ * Create 50 vector features. Your features would typically be fetched
+ * from the server. These are created here to demonstrate a rule based
+ * style. The features are given an attribute named "foo". The value
+ * of this attribute is an integer that ranges from 0 to 100.
+ */
+ var features = new Array(25);
+ for (var i=0; i
+
+
+
+
+
+ OpenLayers StyleMap
+
+
+
+
+
+
+
StyleMap Example
+
+
+ vector, feature, stylemap
+
+
+
+ Shows how to use a StyleMap to style features with rule based styling.
+ A style map references on or more OpenLayers.Style objects. These
+ OpenLayers.Style objects are collections of OpenLayers.Rule objects
+ that determine how features are styled. An OpenLayers.Rule object
+ combines an OpenLayers.Filter object with a symbolizer. A filter is used
+ to determine whether a rule applies for a given feature, and a symbolizer
+ is used to draw the feature if the rule applies.
+
+
+
+
+
+
A style map is used with vector layers to define styles for various
+ rendering intents. The style map used here has styles defined for the
+ "default" and "select" rendering intents. This map also has an active
+ select feature control. When you hover over features, they are selected
+ and drawn with the style corresponding the the "select" render intent.
+
+ To style features with a custom function that evaluates each feature, use
+ the context option of an OpenLayers.Style object. If the context object
+ contains a function and this function is referenced in a symbolizer, the
+ function will be called with the feature as an argument..
+
+
+
+
+
+
Features in the northern hemisphere are styled according to their
+ "type" attribute. This is accomplished with a simple template that
+ is evaluated with the feature attributes as context.
+
Features in the sourthern hemisphere are styled according to a
+ combination of their attributes and non-attribute properties. This
+ is accomplished using an advanced template that calls functions
+ on the context object passed to the Style constructor.
+ Use the rotation property of a point symbolizer to rotate
+ point symbolizers.
+
+
+
+ To style point features with rotation, use the rotation property of the
+ symbolizer. The center of the rotation is the point of the image
+ specified by graphicXOffset and graphicYOffset. The rotation is
+ specified in degrees clockwise.
+
+
+
diff --git a/openlayers/examples/styles-unique.html b/openlayers/examples/styles-unique.html
new file mode 100644
index 0000000000..0d2e1ec500
--- /dev/null
+++ b/openlayers/examples/styles-unique.html
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ OpenLayers Styles Unique Value Styles Example
+
+
+
+
+
+
+
+ Demonstrate fill, stroke, and graphic property of symbolizers.
+
+
+
+ This example shows how to use symbolizers with defaults for stroke, fill, and graphic.
+ This also allows to create labels for a feature without the feature rendered. Click on
+ the label in the middle to see selection of features with labelSelect set to true.
+
Call the map's render method to change its container.
+
+
+
+
+
+
+
+
+
+
This example demonstrates how a map can be rendered initially in one
+ container and then moved to a new container. At any point after map
+ construction, the map's render method can be called with the id of
+ an empty container, moving the map to the new container.
+
+
+
diff --git a/openlayers/examples/textfile.txt b/openlayers/examples/textfile.txt
new file mode 100644
index 0000000000..f7678c4552
--- /dev/null
+++ b/openlayers/examples/textfile.txt
@@ -0,0 +1,4 @@
+point title description icon
+10,20 my orange title my orange description
+2,4 my aqua title my aqua description
+42,-71 my purple title my purple description is great. http://www.openlayers.org/api/img/zoom-world-mini.png
diff --git a/openlayers/examples/tile-origin.html b/openlayers/examples/tile-origin.html
new file mode 100644
index 0000000000..78339d4c19
--- /dev/null
+++ b/openlayers/examples/tile-origin.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+ OpenLayers Tile Origin Example
+
+
+
+
+
Tile Origin
+
+ grid, tileOrigin
+
+
+ Demonstrates the use of the tileExtent property to differentiate
+ between the maximum extent and the tile extent for a layer.
+
+
+
+
+ This example uses a layer that requests map tiles from a WMS
+ that only generates image responses for requests that align with
+ a particular tile lattice. In this case, the layer's
+ maxExtent does not align with that tile lattice.
+ To configure the layer with a tile extent that conforms to the
+ tile origin configured on the server, use the layer's
+ tileOrigin property.
+
+ View the tile-origin.js
+ source to see how this is done
+
+ Demonstrates a TileCache layer that loads tiles from from a web
+ accessible disk-based cache only.
+
+
+
+
+
+
This layer should be used for web accessible disk-based caches only.
+ It is not used to request new tiles from TileCache. Note that you
+ should specify resolutions explicitly on this layer so that they match
+ your TileCache configuration.
+
+
+
diff --git a/openlayers/examples/tms.html b/openlayers/examples/tms.html
new file mode 100644
index 0000000000..ef4bf8c4f6
--- /dev/null
+++ b/openlayers/examples/tms.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ OpenLayers Tiled Map Service Example
+
+
+
+
+
+
+
Tiled Map Service Example
+
+
+ tile, cache, tms
+
+
+
+ Demonstrate the initialization and modification of a Tiled Map Service layer.
+
+
+
+
+
+ URL of TMS (Should end in /): layer_name
+
+ Example: http://tilecache.osgeo.org/wms-c/Basic.py/, basic, jpg
+ The first input must be an HTTP URL pointing to a TMS instance. The second
+ input must be a layer name available from that instance, and the third must
+ be the output format used by that layer. (Any other behavior will result in
+ broken images being displayed.)
+
+ Shows the use of the TransformFeature control.
+
+
+
+
+
+
This example shows transformation of vector features with a
+ tranformation box. Grab one of the handles to resize the feature.
+ Holding the SHIFT key will preserve the aspect ratio. Position the
+ mouse right outside one of the corner handles to rotate the feature,
+ and hold the SHIFT key to only rotate in 45° increments.
+
In this example, the transformation box has been set on the left
+ feature, with a rotation preset of 45°. Clicking on the right feature
+ will set it for transformation, starting with an unrotated box.
+ Dragging a feature or the box edges will move it around.
+ Demonstrates the use of transition effects in tiled and untiled layers.
+
+
+
+ There are two transitions that are currently implemented: null (the
+ default) and 'resize'. The default transition effect is used when no
+ transition is specified and is implemented as no transition effect except
+ for panning singleTile layers. The 'resize' effect resamples the current
+ tile and displays it stretched or compressed until the new tile is available.
+
+
The first layer is an untiled WMS layer with no transition effect.
+
The second layer is an untiled WMS layer with a 'resize' effect.
+
The third layer is a tiled WMS layer with no transition effect.
+
The fourth layer is a tiled WMS layer with a 'resize' effect.