Table of Contents
|
Provides a javascript api for interacting with ajax "slippy" maps.
http://bugs.horde.org/ticket/9111
Abstraction for in-line map support. Horde ships with a driver for OpenLayers which provides support for Google, Yahoo, Bing, and OpenStreetMaps out of the box. Other mapping providers can be added by either adding the support the existing OpenLayers driver or by writing a new custom map driver.
Due to the extremely large "single file build" file that is provided by OpenLayers, we build a custom version of the file, and split out other parts of it into our own classes. This takes the size of the file from somewhere around 3MB to slightly less the 1MB uncompressed (around 280k compressed). This section is meant as an overview of how to build this Horde specific file.
<?php
/**
* Example script for producing a HordeMap
*
* @author Michael J Rubinsky
*/
// Init Horde
define('HORDE_BASE', '/private/var/www/html/horde');
require_once HORDE_BASE . '/lib/core.php';
Horde_Registry::appInit(
'horde',
array(
'authentication' => 'none',
'session_control' => 'none'));
// Hordemap parameters. Driver will always be "Horde" unless you are working
// with a custom developed map driver.
// providers is an array of available mapping layers.
// geocoder is the desired geocoder to use, pass Null to use default null geocoder.
// Typically these would come from the application's global
// configuration array ($conf)
$params = array(
'driver' => 'Horde',
'providers' => array('Yahoo', 'Google', 'Public', 'Mytopo'),
'geocoder' => 'Google'
);
$providerJson = json_encode($params['providers']);
// Setup translations
$language = str_replace('_', '-', $GLOBALS['language']);
$language = $GLOBALS['language'];
if (!file_exists($GLOBALS['registry']->get('jsfs', 'horde') . '/map/' . $language . '.js')) {
$language = 'en-US';
}
// Additional configurations.
$params['conf'] = array(
// If using a marker image
'markerImage' => (string)Horde_Themes::img('map/marker.png'),
'markerBackgroun$d' => (string)Horde_Themes::img('map/marker-shadow.png'),
'useMarkerLayer' => true,
// Use this language for translations if available.
'language' => $language,
);
// API keys for those layers that require them.
foreach ($params['providers'] as $layer) {
switch ($layer) {
case 'Google':
// No longer required for v3.
//$params['conf']['apikeys']['google'] = $GLOBALS['conf']['api']['googlemaps'];
break;
case 'Yahoo':
$params['conf']['apikeys']['yahoo'] = $GLOBALS['conf']['api']['yahoomaps'];
break;
case 'Cloudmade':
$params['conf']['apikeys']['cloudmade'] = $GLOBALS['conf']['api']['cloudmade'];
break;
case 'Mytopo':
$params['conf']['apikeys']['mytopo'] = $GLOBALS['conf']['api']['mytopo'];
break;
}
}
// Geocoding
if (!empty($params['geocoder'])) {
switch ($params['geocoder']) {
case 'Google':
//$params['conf']['apikeys']['google'] = $GLOBALS['conf']['api']['googlemaps'];
break;
case 'Yahoo':
$params['conf']['apikeys']['yahoo'] = $GLOBALS['conf']['api']['yahoomaps'];
break;
case 'Cloudmade':
$params['conf']['apikeys']['cloudmade'] = $GLOBALS['conf']['api']['cloudmade'];
break;
}
}
// Include the Hordemap bootstrap file, and initialize the Hordemap.
$params['jsuri'] = $GLOBALS['registry']->get('jsuri', 'horde') . '/map/';
Horde::addScriptFile('map/map.js', 'horde');
$js = 'HordeMap.initialize(' . Horde_Serialize::serialize($params, HORDE_SERIALIZE::JSON) . ');';
Horde::addinlineScript($js);
// Start output
require HORDE_BASE . '/templates/common-header.inc';
?>
<script type="text/javascript">
// Basic initialization code to run on dom:loaded to init and display the map
document.observe("dom:loaded", function() {
// These are the same as configured above
var providers = <?php echo $providerJson ?>;//['Google', 'Yahoo', 'Public'];
layers = [];
providers.each(function(l) {
var p = new HordeMap[l]();
$H(p.getLayers()).values().each(function(e) {layers.push(e);});
});
map = new HordeMap.Map['Horde']({
elt: $('mapdiv'),
//delayed:true,
layers: layers,
markerDragEnd: function(r) {alert('markerdragend');},
mapClick: function(r) {alert('mapclick')}
});
//map.display();
});
</script>
<h2>HordeMap Example</h2>
<div id="mapdiv" style="height:300px;width:700px;"></div>
Back to the Project List