DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:openlayersmap

OpenLayersMap Plugin

Compatible with DokuWiki

  • 2016-06-26 "Elenor Of Tsort" unknown
  • 2015-08-10 "Detritus" yes
  • 2014-09-29 "Hrun" yes
  • 2014-05-05 "Ponder Stibbons" yes

plugin Add maps (OpenStreetMap, MapQuest, Google, Bing and your own data) to your wiki pages using the OpenLayers toolkit

Last updated on
2016-04-16
Provides
Syntax, Action
Repository
Source
Requires
geophp

Similar to googlemaps, osm

Tagged with embed, geo, maps, media, spatial

Description

A map rendering plugin that will put an OpenLayers based map on the wiki page. The component enables users to put GPS data (currently GeoJSON, GPX and KML format are supported) and other geographic services on the map in configurable layout and uses open source components and data (OSM). It can also be configured to use non-open data (Google, Virtual Earth) providers. The plugin dynamically loads the OpenLayers API on demand, depending on the API license keys that are entered in the configuration section various base map layers are available.

Download and Installation

:!: Note: for old releases (2008-05-05, 2009-02-14, Lemming, Anteater, Rincewind) you need version 1.0

Search and install the plugin using the Extension Manager or manually with the download from the SourceForge Mirror. Refer to Plugins on how to install plugins manually. Refer to Plugins on how to install plugins manually.

Alternate locations for the plugin and older version are available at: http://sourceforge.net/projects/dokuwikispatial/files/openlayersmap/

:!: This plugin needs the server to have PHP GD extension, that in some Linux is not installed by default, but it's the package php5-gd or alike. Check your phpinfo() before installing this plugin. If it's not installed, your wiki will go offline 8-O m(, because of the PHP Fatal error Call to undefined function imagecreatetruecolor() ….

Change Log

version 4.7

  • PHP 7 compatibility fixes

version 4.6

  • use latest version of OpenLayers 2.14-dev
  • update google maps api to 3.22 release

version 4.5

  • use latest version of OpenLayers 2.14-dev

version 4.4

  • use latest version of OpenLayers 2.14-dev

version 4.3

  • some small bugfixes
  • update google maps api to 3.17 release

version 4.2

  • add background to map
  • display Point of Interest coordinates in popups
  • allow coordinate display in decimal degrees or degrees, minutes, seconds

version 4.1

  • add a fullscreen option for the map
  • fix an IE8 bug
  • fix static map generation, different maptypes were not respected
  • add configuration option for a MapQuest API key (needed for remote static map generation) and Google API key
  • semi-responsive map rendering (on page load only); prevent maps that are larger than the page width

version 4.0

  • use OpenLayers 2.14-dev
  • keyboard accessible zoom control replacing the pan/zoom bar
  • keyboard accessible layer switcher control
  • keyboard accessible feature info control
  • removed the toolbar
  • remove the Cloudmade layers; Cloudmade went “enterprise only”
  • removed the option to set openlayers library, this is no longer possible
  • remove styling admin option and remove associated images, use the wiki styling from now on
  • add help pages (en, nl)
deleted files
  • controlbar images:
    • lib/classic/*
    • lib/dark/*
    • lib/orange/*
    • lib/grey/*
    • lib/neutral/*
    • lib/theme/*
  • img/navigation_history.png
  • img/icon_*.png
  • logo/cloudmade_logo.png

version 3.1

  • use OpenLayers 2.13
  • improvements and bugfixes in the static map generator
  • upgrade the google api
  • add orange style
  • drop cUrl requirement by enabling fall-back to file_get_contents
  • add support for GeoJSON
  • remove permalink from the map
  • some accessibility enhancements
deleted files
  • overview-switcher-minimize.png
  • overview-switcher-maximize.png

version 3.0

  • A local static map generator was added. Note that this requires php-curl and the geophp plugin.
  • A management interface for the static map generator was added

Version 2.1

Version 2.0

brings the following changes:

  • support for “Angua” and jQuery
  • fix a negative coordinates bug (3399949)
  • Spanish translation
  • small fixes and enhancements
  • updated the OpenLayers build to 2.12
  • more icons
  • add some more open base layers (transport, landscape,.. )
  • accessibility improvements
  • remove the depercated t@h base layer
  • using v3.8 of the Google api for Goole maps
  • various small enhancements and fixes

Version 1.0

brings the following changes:

  • Yahoo was removed; they are shutting down their maps api (3322552)
  • switched to Google Maps v3 (3035248)
  • Add support for ReST access of the Bing layers (bing road, bing sat, bing hybrid) and deprecated Virtual Earth (ve) 3356282
  • option to disable OSM base layers
  • option to disable MapQuest Open layers
  • Accessibility and printing enhancements:
    • enhancements to show a static fallback map for users that do not have javascript or css which is also used as the print page1)
    • a table with the points of interest2)
    • a description can be entered for the map
    • better styling
  • theme's for some of the controls 3354326
  • :!: dimensions for map width and heigth must be in pixels [px]; previously other units such as % and em may have worked. This is to make sure that the static fallback map works properly.

Configuration

Currently the following options can/need to be configured (see conf/default.php):

  • enableOSM Enable the use of OpenStreetMap base layers as basemap provider
  • enableMapQuest Enable the use of MapQuest Open as basemap provider
  • enableGoogle Enable the use of Google as basemap provider
  • enableBing Enable the use of Bing as basemap provider
  • bingAPIKey Bing requires an API key, get yours at: https://www.bingmapsportal.com/application
  • mapquestAPIKey MapQuest Static Maps API key, get yours at: http://developer.mapquest.com/
  • googleAPIkey Google Static Maps API key, get yours at: https://code.google.com/apis/console
  • iconUrlOverload URL for map icons when using static maps on a non-public access host such as with DokuWiki on a Stick or DokuWikiStickNG
  • enableA11y Enable a11y/print output (static map, legend table). If you use maps with a lot of POI you will want to turn this off
  • optionStaticMapGenerator use the local a11y/print map renderer or remote services. Commercial/non-open providers always use their own, remote, service. NB 'local' requires internet access for you webserver.
  • autoZoomMap Enable auto zoom for the map, makes the map zoom to the extent of the POI and KML/GPX

Icons

If you want to add (or change) to the available icons for display on the map you can drop them into the directory “icons” in this plugin's directory. They should be about 16px in size. There is a contact sheet available after installing the plugin at <yourbaseurl>/lib/plugins/openlayersmap/icons/ 3) Nice icons are available from:

Demonstration

A small site with the plugin showing various samples is available on SourceForge

The plugin is used on the following pages/sites:

Syntax/ Usage

<olmap id="olMap" width="600px" height="400px" lat="52.0" lon="5.1" zoom="12" statusbar="1" toolbar="1" controls="1" poihoverstyle="1" baselyr="OpenStreetMap" gpxfile=":playground:hardlopen_gpx.gpx" geojsonfile=":playground:test.gsojson" kmlfile=":playground:mtb.kml" summary="This map shows a gpx trace, a kml trace and a dot">
52.1,5.1,60,.8,marker-green.png,Just a spot
</olmap>
  • id The identifyer of the map (this needs to be a valid CSS/XHTML identifier as well as a valid JavaScript variable) eg. olmap.
  • width The width of the map, default is 400px.
  • height The height of the map, default is 300px.
  • zoom The zoom level, default value 12. Valid values depend on the map and location and must be integer.
  • controls Whether or not to show controls for zooming and panning on the map. Valid values are on and off, default on.
  • statusbar Defines if the statusbar is shown. Valid values are 1 or 0, default 1 (on).
  • poihoverstyle Specifies POI feature select behaviour (hover or click). Valid values are 1 or 0, default 0 (click), for reasons of accessibility using hover is dicouraged.
  • lat The latitude of map centre in decimal degrees (WGS84), negative values are south of the equator, valid values range from -90.0 to 90.0.
  • lon The longitude of map centre in decimal degrees (WGS84), negative values are west of Greenwich, valid values range from -180.0 to 180.0.
  • baselyr The basemap layer that is shown when the map opens. Valid values are: OpenStreetMap, transport, landscape, cycle map, hike and bike map, mapquest road, mapquest sat, google relief, google sat, google hybrid, google road, bing road, bing sat or bing hybrid. (note that for some of the non-open maps you need the API key/URL as well)
  • gpxfile any GPX file, use the media manager to retrieve the location
  • kmlfile any KML file, use the media manager to retrieve the location
  • geojsonfile any GeoJSON file, use the media manager to retrieve the location
  • summary A description of the map.

The Points of Interest are formatted:

lat, lon, rotation-angle, opacity, image, textforpopup

The map will zoom in to the extent of the POI which must be given in decimal degrees according to EPSG:4326 (most GPS use this). The text for the popup can be formatted using regular DokuWiki syntax and may contain links as well. (see discussion below or the sample website for more examples)

Known Limitations

  • there may be some issues when the wiki site runs on HTTPS because most of the mapservices used run on plain HTTP, this may present your viewers with warning messages. (cross domain warning).

Discussion

Hi!.
I'm trying to disable “autoZoomMap” option, but it seems do not work. How to use it? When I put some distant POIs, the map still zooms to include all of them. There is no difference if I use single POIs or kml/geoJSON file. I need to use one geoJSON file for all maps, but each single map should show only required part of area. Please help, how to fix it?
It is not possible to set an area of interest
Would it be possible to generate a map where the POI's are geotagged pages from a certain namespace in the wiki?
this will be available as part of spatialhelper

Am I able to add my own map (image of a landscape.gif) show it on a page and point onto this image to insert a POI? Goal is to create a map like http://dynmap.ruslotro.com/.

no this is not possible

I can not force my users to figure out the lat/lon by hand so something like “set marker with point&click” is necessary.
Greetings - Jos

this may be possible in the future
Thanks for your answers
I like the looks of this plugin. I am currently using google_maps and while it works fairly well, it is a bit lacking. With this plugin, can the dimensions of the locational marker pop-ups be fixed/changed? Is wiki text parsed within said pop-ups? I like to write short descriptions with each marker, so I need to format the text and text box to avoid stretching across the screen.

Thanks for the plugin.
MarkMark
mprins

you're welcome :-). there are currently no provisions to parse wiki text or URLs (link tags works e.g.
[[http://test.com|test]]

you probably want to set poihoverstyle=“0”). see sample below, it does links, line breaks an formatting.

<olmap id="olmap" width="600px" height="400px" lat="50.0" lon="5.1" zoom="8" statusbar="1" toolbar="1" controls="1" poihoverstyle="0">
49.9780098,5.1839387,270,.7,marker-gold.png,Faux Mayaux; Maissin \\ ** Watch out crossing the street **
50.0117497,5.1287857,60,.8,marker-green.png,Pont de Barbouillons; Daverdisse \\ external link: [[http://test.com|test.com]] \\ internal link: [[::start]]
</olmap>


The size of the markers is fixed, so even if you use larger bitmaps they will be scaled down, this in part has to do with the hover area and is just how things work in OL.

Hi Mark, I like your plugin too, it's well written. I've left a request on your tracker, suggesting the possibility of pulling the coordinates from a database instead of hard-coding them on the page. If using the PEAR library like one of the MySQL plugins, it shouldn't be too complex ? This would make for a powerful way of displaying multiple real-time coordinates.

==== problem with Binky ==== i've make dokuwiki-update to rc2013-10-28 “Binky”. now my map looks strange: http://vegan-in-halle.de/wiki/doku.php?id=karte :-( do exist a nightly-build which works with “Binky”? –Kristjan

You are running a plugin (either a very old version of openlayersmap or something different) that uses the addInitEvent() function; this is no longer available in DokuWiki; see jqueryfaq This causes a nonrecoverable error. What you are seeing is an expected result. My best guess is that you are running an out of date plugin (which is probaby not openlayersmap as i have several Binky RC instances that work just fine).
i already use the actual version of openlayersmap-plugin. so i have updated all other plugins and now the map looks fine again :-) thanks for the hint! i don't know which plugin causes the problem. –Kristjan

Hi to all!

I like this plugin very much, but there was one thing that was not perfect for my needs. The width of the map must be specified absolutely in pixel. The map is much too wide on my mobile phone. For that I stumbled through the code of the plugin (don't call me an expert :-)) and tried to find out what to do.

Here's my solution, which will work now for my desktop and my mobile phone. At first a sample of the “new” insert syntax.

<olmap id="olmap" width="auto" height="auto" lat="50.0" lon="5.1" zoom="8" statusbar="1" toolbar="1" controls="1" poihoverstyle="0">
49.9780098,5.1839387,270,.7,marker-gold.png,Faux Mayaux; Maissin \\ ** Watch out crossing the street **
50.0117497,5.1287857,60,.8,marker-green.png,Pont de Barbouillons; Daverdisse \\ external link: [[http://test.com|test.com]] \\ internal link: [[::start]]
</olmap>

The width will be calculated if auto is specified for it. And if auto is also specified for the height, then the height will be 2/3 of the width.

I've done my work only in the file script.js of the plugin. I've added the following function to the file (which I've found using Google).

Element.prototype.getElementWidth = function() {
   if (typeof this.clip !== "undefined") {
	  return this.clip.width;
   } else {
	  if (this.style.pixelWidth) {
		 return this.style.pixelWidth;
	  } else {
		 return this.offsetWidth;
	  }
   }
};

And then I've made the following extension to the method createMap. In the following sample there's some of the original code at the beginning and the end so you can find the position where to insert the new lines.

// find map element location
var cleartag = document.getElementById(mapOpts.id + '-clearer');
if (cleartag === null) {
	return;
}
 
// ====== START OF INSERTED CODE ======
 
// calculate dynamic width and height
var dynamicWidth = 0;
if (mapOpts.width == 'auto') {
	var contentWidth = 0;
	var asideWidth = 0;
	var elementContent = document.getElementById('dokuwiki__content');
	if (elementContent === null) {
	} else {
		contentWidth = elementContent.getElementWidth();
	}
	var elementAside = document.getElementById('dokuwiki__aside');
	if (elementAside === null) {
	} else {
		asideWidth = elementAside.getElementWidth();
	}
	if (contentWidth > asideWidth) {
		dynamicWidth = contentWidth - asideWidth - 60;
	} else {
		dynamicWidth = contentWidth - 20;
	}
	if (dynamicWidth > 0) {
		mapOpts.width = dynamicWidth + 'px';
	} else {
		mapOpts.width = '500px';
	}
}
if (mapOpts.height == 'auto') {
	if (dynamicWidth > 0) {
		var dynamicHeight = dynamicWidth * 0.66;
		mapOpts.height = dynamicHeight + 'px';
	} else {
		mapOpts.height = '500px';
	}
}
 
// ====== END OF INSERTED CODE ======
 
// create map element and add to document
var fragment = olCreateMaptag(mapOpts.id, mapOpts.width, mapOpts.height);
cleartag.parentNode.insertBefore(fragment, cleartag);

Well, as I've mentioned above: It works for me. The hardcoded values (60, 20) are not nice, really. And generally I do think that there could be a better solution. Maybe someone feels inspirated now to make it better (and to make me happy).

Wernerwkaurzinek

@Werner this patch will give you problem as the width is also used for the fallback image and 'auto' is not a valid value for the width attribute of an img element

I just installed this wonderful plugin to embed an OpenStreetMap to my website. However, I found that the map is placed on top of all the other elements of the page so that it covers the (fixed) header DIV when I scroll down. Any hint, what I can do to prevent that?

plugin/openlayersmap.txt · Last modified: 2016-04-17 11:45 by mprins