This commit is contained in:
bastianonm 2012-03-17 11:46:00 +00:00
parent 7ed11f311c
commit edc339b1c9
7 changed files with 308 additions and 34 deletions

View File

@ -34,6 +34,87 @@ function unqueue()
} }
} }
function CustomMarker( map, latlng, src, img_w, img_h) {
this.latlng_ = latlng;
// Once the LatLng and text are set, add the overlay to the map. This will
// trigger a call to panes_changed which should in turn call draw.
this.setMap(map);
this.src_ = src;
this.img_w_ = img_w;
this.img_h_ = img_h;
}
CustomMarker.prototype = new google.maps.OverlayView();
CustomMarker.prototype.draw = function() {
var me = this;
// Check if the div has been created.
var div = this.div_;
if (!div) {
// Create a overlay text DIV
div = this.div_ = document.createElement('DIV');
div.style.cssText = "border:1px solid #fff;position:absolute;cursor:pointer;margin:0;background:url('"+this.src_+"') center;width:"+(this.img_w_/3)+"px;height:"+(this.img_h_/3)+"px;";
div.setAttribute("lat",this.latlng_.lat());
div.setAttribute("lon",this.latlng_.lng());
google.maps.event.addDomListener(div, "click", function(event) {
google.maps.event.trigger(me, "click",div);
});
google.maps.event.addDomListener(div, "mouseover", function(event) {
var _t = div.style.top.replace('px','');
var _l = div.style.left.replace('px','');
jQuery(div).animate({
height: me.img_h_,
width : me.img_w_,
top : _t - (me.img_h_ / 3),
left : _l - (me.img_w_ / 3)
}, 100);
});
google.maps.event.addDomListener(div, "mouseout", function(event) {
jQuery(div).animate({
height: me.img_h_ / 3,
width: me.img_w_ / 3,
top : me.orig_top,
left : me.orig_left
}, 100);
});
// Then add the overlay to the DOM
var panes = this.getPanes();
panes.overlayImage.appendChild(div);
}
// Position the overlay
var point = this.getProjection().fromLatLngToDivPixel(this.latlng_);
if (point) {
div.style.left = point.x + 'px';
div.style.top = point.y + 'px';
this.orig_left = point.x;
this.orig_top = point.y;
}
};
CustomMarker.prototype.remove = function() {
// Check if the overlay was on the map and needs to be removed.
if (this.div_) {
this.div_.parentNode.removeChild(this.div_);
this.div_ = null;
}
};
function _wpgpxmaps(params) function _wpgpxmaps(params)
{ {
@ -59,6 +140,8 @@ function _wpgpxmaps(params)
var el_map = document.getElementById("map_" + targetId); var el_map = document.getElementById("map_" + targetId);
var el_chart = document.getElementById("chart_" + targetId); var el_chart = document.getElementById("chart_" + targetId);
var mapWidth = el_map.style.width;
switch (mapType) switch (mapType)
{ {
case 'TERRAIN': { mapType = google.maps.MapTypeId.TERRAIN; break;} case 'TERRAIN': { mapType = google.maps.MapTypeId.TERRAIN; break;}
@ -72,6 +155,7 @@ function _wpgpxmaps(params)
scrollwheel: false scrollwheel: false
}; };
var map = new google.maps.Map(el_map, mapOptions); var map = new google.maps.Map(el_map, mapOptions);
var bounds = new google.maps.LatLngBounds();
// Print WayPoints // Print WayPoints
if (waypoints != '') if (waypoints != '')
@ -93,11 +177,54 @@ function _wpgpxmaps(params)
} }
} }
// Print Images
var divImages = document.getElementById("ngimages_"+targetId);
divImages.style.display='block';
divImages.style.position='absolute';
divImages.style.left='-500px';
var img_spans = divImages.getElementsByTagName("span");
if (img_spans.length > 0)
{
var bb = new google.maps.LatLngBounds();
for (var i = 0; i < img_spans.length; i++) {
var imageLat = img_spans[i].getAttribute("lat");
var imageLon = img_spans[i].getAttribute("lon");
var imageImg = img_spans[i].getElementsByTagName('img')[0];
var imageUrl = imageImg.getAttribute("src");
var img_w = imageImg.clientWidth;
var img_h = imageImg.clientHeight;
var p = new google.maps.LatLng(imageLat, imageLon);
bounds.extend(p);
var mc = new CustomMarker(map, p, imageUrl, img_w, img_h );
google.maps.event.addListener(mc, "click", function(div) {
var lat = div.getAttribute("lat");
var lon = div.getAttribute("lon");
var a = getClosestImage(lat,lon,targetId).childNodes[0];
if (a)
{
a.click();
}
});
}
}
// Print Track // Print Track
if (mapData != '') if (mapData != '')
{ {
var points = []; var points = [];
var bounds = new google.maps.LatLngBounds();
for (i=0; i < mapData.length; i++) for (i=0; i < mapData.length; i++)
{ {
@ -140,8 +267,7 @@ function _wpgpxmaps(params)
strokeWeight: 4 strokeWeight: 4
}); });
poly.setMap(map); poly.setMap(map);
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
var first = getItemFromArray(mapData,0) var first = getItemFromArray(mapData,0)
if (currentIcon == '') if (currentIcon == '')
@ -179,6 +305,9 @@ function _wpgpxmaps(params)
}); });
} }
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
// Print Graph // Print Graph
if (graphData!= '') if (graphData!= '')
{ {
@ -288,6 +417,16 @@ function _wpgpxmaps(params)
marker.setTitle("Current Position"); marker.setTitle("Current Position");
} }
}); });
if( mapWidth = "100%")
{
var resizeChart = function(){
el_chart.style.width = el_chart.clientWidth + "px";
chart.draw(data, options);
};
google.maps.event.addListener(map, "idle", resizeChart);
}
//google.visualization.events.addListener(chart, 'onmouseout', function (e) { //google.visualization.events.addListener(chart, 'onmouseout', function (e) {
//chart.setSelection([e]); //chart.setSelection([e]);
//}); //});
@ -315,9 +454,16 @@ function addWayPoint(map, image, shadow, lat, lon, title, descr)
{ {
infowindow.close(); infowindow.close();
} }
infowindow = new google.maps.InfoWindow({ var cnt = '';
content: "<b>" + title + "</b></br />" + descr if (title=='')
}); {
cnt = "<center>" + descr + "</center>";
}
else
{
cnt = "<b>" + title + "</b></br />" + descr;
}
infowindow = new google.maps.InfoWindow({ content: cnt});
infowindow.open(map,m); infowindow.open(map,m);
}); });
} }
@ -350,6 +496,25 @@ function getClosestIndex(points,lat,lon)
return ii; return ii;
} }
function getClosestImage(lat,lon,targetId)
{
var dd=10000;
var img;
var divImages = document.getElementById("ngimages_"+targetId);
var img_spans = divImages.getElementsByTagName("span");
for (var i = 0; i < img_spans.length; i++) {
var imageLat = img_spans[i].getAttribute("lat");
var imageLon = img_spans[i].getAttribute("lon");
var d = dist(imageLat, imageLon, lat, lon);
if ( d < dd )
{
img = img_spans[i];
dd = d;
}
}
return img;
}
function isNumeric(input){ function isNumeric(input){
var RE = /^-{0,1}\d*\.{0,1}\d+$/; var RE = /^-{0,1}\d*\.{0,1}\d+$/;
return (RE.test(input)); return (RE.test(input));

View File

@ -1,10 +1,10 @@
=== WP GPX Maps === === WP GPX Maps ===
Contributors: bastianonm Contributors: bastianonm
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=bastianonm@hotmail.com&item_name=WP%20GPX%20Maps&item_number=Donation Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8VHWLRW6JBTML
Tags: maps, gpx, gps, graph, chart, google maps, google chart, track, garmin Tags: maps, gpx, gps, graph, chart, google maps, google chart, track, garmin, image, nextgen-gallery, nextgen, exif
Requires at least: 2.0.0 Requires at least: 2.0.0
Tested up to: 3.3 Tested up to: 3.3
Stable tag: 1.1.10 Stable tag: 1.1.11
License: GPLv2 or later License: GPLv2 or later
Draws a gpx track with altitude graph Draws a gpx track with altitude graph
@ -15,6 +15,8 @@ This plugin has, as input, the GPX file with the track you've made and as output
Fully configurable: custom colors and icons to make the map look like your site. Fully configurable: custom colors and icons to make the map look like your site.
Display your NextGen Gallery images inside the map! Take a look at nexgen gallery EXIF support..
- iphone/ipad/ipod Compatible - iphone/ipad/ipod Compatible
Try this plugin: <a href="http://www.pedemontanadelgrappa.it/category/mappe/">http://www.pedemontanadelgrappa.it/category/mappe/</a> Try this plugin: <a href="http://www.pedemontanadelgrappa.it/category/mappe/">http://www.pedemontanadelgrappa.it/category/mappe/</a>
@ -89,6 +91,10 @@ The attributes are:
1. currentIcon: Current position icon (when mouse hover) 1. currentIcon: Current position icon (when mouse hover)
1. nggalleries: NextGen Gallery id or a list of Galleries id separated by a comma
1. ngimages: NextGen Image id or a list of Images id separated by a comma
= What happening if I've a very large gpx? = = What happening if I've a very large gpx? =
This plugin will print a small amout of points to speedup javascript and pageload. This plugin will print a small amout of points to speedup javascript and pageload.
@ -103,6 +109,9 @@ Yes!
2. Admin area - Settings 2. Admin area - Settings
== Changelog == == Changelog ==
= 1.1.11 =
* nextgen gallery integration
* minor bug fixes
= 1.1.10 = = 1.1.10 =
* Configurable Map Icons * Configurable Map Icons
* Chart scale configuration (max and min values) * Chart scale configuration (max and min values)
@ -162,6 +171,7 @@ Yes!
* Initial release * Initial release
== Upgrade Notice == == Upgrade Notice ==
= 1.1.11 =
= 1.1.10 = = 1.1.10 =
= 1.1.9 = = 1.1.9 =
= 1.1.8 = = 1.1.8 =

View File

@ -3,7 +3,7 @@
Plugin Name: WP-GPX-Maps Plugin Name: WP-GPX-Maps
Plugin URI: http://www.darwinner.it/ Plugin URI: http://www.darwinner.it/
Description: Draws a gpx track with altitude graph Description: Draws a gpx track with altitude graph
Version: 1.1.10 Version: 1.1.11
Author: Bastianon Massimo Author: Bastianon Massimo
Author URI: http://www.pedemontanadelgrappa.it/ Author URI: http://www.pedemontanadelgrappa.it/
License: GPL License: GPL
@ -11,7 +11,7 @@ License: GPL
//error_reporting (E_ALL); //error_reporting (E_ALL);
include 'wp-gpx-maps_Utils.php'; include 'wp-gpx-maps_utils.php';
include 'wp-gpx-maps_admin.php'; include 'wp-gpx-maps_admin.php';
add_action( 'wp_print_scripts', 'enqueue_WP_GPX_Maps_scripts' ); add_action( 'wp_print_scripts', 'enqueue_WP_GPX_Maps_scripts' );
@ -46,7 +46,7 @@ function enqueue_WP_GPX_Maps_scripts()
google.load('visualization', '1', {'packages':['corechart']}); google.load('visualization', '1', {'packages':['corechart']});
google.load("maps", "3", {other_params: 'sensor=false'}); google.load("maps", "3", {other_params: 'sensor=false'});
</script> </script>
<script type='text/javascript' src='<?php echo plugins_url('/WP-GPX-Maps.js', __FILE__) ?>?ver=1.1.10'></script> <script type='text/javascript' src='<?php echo plugins_url('/WP-GPX-Maps.js', __FILE__) ?>?ver=1.1.11'></script>
<?php <?php
} }
@ -92,14 +92,14 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
$startIcon = findValue($attr, "starticon", "wpgpxmaps_map_start_icon", ""); $startIcon = findValue($attr, "starticon", "wpgpxmaps_map_start_icon", "");
$endIcon = findValue($attr, "endicon", "wpgpxmaps_map_end_icon", ""); $endIcon = findValue($attr, "endicon", "wpgpxmaps_map_end_icon", "");
$currentIcon = findValue($attr, "currenticon", "wpgpxmaps_map_current_icon", ""); $currentIcon = findValue($attr, "currenticon", "wpgpxmaps_map_current_icon", "");
$ngGalleries = findValue($attr, "nggalleries", "wpgpxmaps_map_ngGalleries", "");
$ngImages = findValue($attr, "ngimages", "wpgpxmaps_map_ngImages", "");
$r = rand(1,5000000); $r = rand(1,5000000);
$cacheFileName = "$gpx,$w,$mh,$mt,$gh,$showW,$donotreducegpx,$pointsoffset,$showSpeed,$uom"; $cacheFileName = "$gpx,$w,$mh,$mt,$gh,$showW,$donotreducegpx,$pointsoffset,$showSpeed,$uom,$ngGallery";
//echo "----------cacheFileName---------$cacheFileName-------------------"; $cacheFileName = md5($cacheFileName);
$cacheFileName = md5($gpx.$w.$mh.$mt.$gh.$showW.$donotreducegpx.$pointsoffset.$showSpeed.$uom);
$gpxcache = gpxCacheFolderPath(); $gpxcache = gpxCacheFolderPath();
@ -119,14 +119,30 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
$points_maps = $cache_obj["points_maps"]; $points_maps = $cache_obj["points_maps"];
$points_graph = $cache_obj["points_graph"]; $points_graph = $cache_obj["points_graph"];
$waypoints = $cache_obj["waypoints"]; $waypoints = $cache_obj["waypoints"];
$ngimgs_data = $cache_obj["ngimgs"];
} catch (Exception $e) { } catch (Exception $e) {
$points_maps= ''; $points_maps= '';
$points_graph= ''; $points_graph= '';
$waypoints= ''; $waypoints= '';
$ngimgs_data='';
} }
} }
if ($points_maps == '') if ($ngimgs_data == '' && ( $ngGalleries != '' || $ngImages != '' ))
{
$ngimgs = getNGGalleryImages($ngGalleries,$ngImages);
$ngimgs_data ='';
foreach ($ngimgs as $img) {
$data = $img['data'];
$data = str_replace("\n","",$data);
$ngimgs_data .= '<span lat="'.$img['lat'].'" lon="'.$img['lon'].'">'.$data.'</span>';
}
}
if ($points_maps == '' && $gpx != '')
{ {
$sitePath = sitePath(); $sitePath = sitePath();
@ -153,6 +169,8 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
$points_graph = ''; $points_graph = '';
$waypoints = ''; $waypoints = '';
foreach ($points as $p) { foreach ($points as $p) {
$points_maps .= '['.(float)$p[0].','.(float)$p[1].'],'; $points_maps .= '['.(float)$p[0].','.(float)$p[1].'],';
@ -208,19 +226,22 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
$points_graph = ""; $points_graph = "";
} }
}
@file_put_contents($gpxcache, @file_put_contents($gpxcache,
serialize(array( "points_maps" => $points_maps, serialize(array( "points_maps" => $points_maps,
"points_graph" => $points_graph, "points_graph" => $points_graph,
"waypoints" => $waypoints) "waypoints" => $waypoints,
"ngimgs" => $ngimgs_data)
), ),
LOCK_EX); LOCK_EX);
@chmod($gpxcache,0755); @chmod($gpxcache,0755);
}
$output = ' $output = '
<div id="wpgpxmaps_'.$r.'" style="clear:both;"> <div id="wpgpxmaps_'.$r.'" style="clear:both;">
<div id="map_'.$r.'" style="width:'.$w.'; height:'.$mh.'"></div> <div id="map_'.$r.'" style="width:'.$w.'; height:'.$mh.'"></div>
<div id="chart_'.$r.'" class="plot" style="width:'.$w.'; height:'.$gh.'"></div> <div id="chart_'.$r.'" class="plot" style="width:'.$w.'; height:'.$gh.'"></div>
<div id="ngimages_'.$r.'" style="display:none">'.$ngimgs_data.'</div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
wpgpxmaps({ targetId : "'.$r.'", wpgpxmaps({ targetId : "'.$r.'",
@ -297,6 +318,8 @@ function WP_GPX_Maps_install() {
add_option("wpgpxmaps_map_start_icon", '', '', 'yes'); add_option("wpgpxmaps_map_start_icon", '', '', 'yes');
add_option("wpgpxmaps_map_end_icon", '', '', 'yes'); add_option("wpgpxmaps_map_end_icon", '', '', 'yes');
add_option("wpgpxmaps_map_current_icon", '', '', 'yes'); add_option("wpgpxmaps_map_current_icon", '', '', 'yes');
add_option("wpgpxmaps_map_nggallery", '', '', 'yes');
} }
function WP_GPX_Maps_remove() { function WP_GPX_Maps_remove() {
@ -320,6 +343,7 @@ function WP_GPX_Maps_remove() {
delete_option('wpgpxmaps_map_start_icon'); delete_option('wpgpxmaps_map_start_icon');
delete_option('wpgpxmaps_map_end_icon'); delete_option('wpgpxmaps_map_end_icon');
delete_option('wpgpxmaps_map_current_icon'); delete_option('wpgpxmaps_map_current_icon');
delete_option('wpgpxmaps_map_nggallery');
} }
?> ?>

View File

@ -1,5 +1,6 @@
<?php <?php
require_once("wp-gpx-maps_utils_nggallery.php");
function sitePath() function sitePath()
{ {

View File

@ -110,6 +110,8 @@ function WP_GPX_Maps_html_page() {
<li><b>startIcon</b>: Start track icon</li> <li><b>startIcon</b>: Start track icon</li>
<li><b>endIcon</b>: End track icon</li> <li><b>endIcon</b>: End track icon</li>
<li><b>currentIcon</b>: Current position icon (when mouse hover)</li> <li><b>currentIcon</b>: Current position icon (when mouse hover)</li>
<li><b>nggalleries</b>: NextGen Gallery id or a list of Galleries id separated by a comma</li>
<li><b>ngimages</b>: NextGen Image id or a list of Images id separated by a comma</li>
</ul> </ul>
<p> <p>

View File

@ -8,7 +8,8 @@
$donotreducegpx = get_option("wpgpxmaps_donotreducegpx"); $donotreducegpx = get_option("wpgpxmaps_donotreducegpx");
$t = get_option('wpgpxmaps_map_type'); $t = get_option('wpgpxmaps_map_type');
$uom = get_option('wpgpxmaps_unit_of_measure'); $uom = get_option('wpgpxmaps_unit_of_measure');
$uomspeed = get_option('wpgpxmaps_unit_of_measure_speed'); $uomSpeed = get_option('wpgpxmaps_unit_of_measure_speed');
$showSpeed = get_option('wpgpxmaps_show_speed');
if (!($t)) if (!($t))
$t = 'HYBRID'; $t = 'HYBRID';
@ -148,7 +149,7 @@
<tr> <tr>
<th scope="row">Show speed:</th> <th scope="row">Show speed:</th>
<td> <td>
<input name="wpgpxmaps_show_speed" type="checkbox" value="true" <?php if($showW == true){echo('checked');} ?> onchange="this.value = (this.checked)" /><i>Show Speed</i> <input name="wpgpxmaps_show_speed" type="checkbox" value="true" <?php if($showSpeed == true){echo('checked');} ?> onchange="this.value = (this.checked)" /><i>Show Speed</i>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -161,9 +162,9 @@
<th scope="row">Speed unit of measure:</th> <th scope="row">Speed unit of measure:</th>
<td> <td>
<select name='wpgpxmaps_unit_of_measure_speed'> <select name='wpgpxmaps_unit_of_measure_speed'>
<option value="0" <?php if ($uomspeed == '0') echo 'selected'; ?>>m/s</option> <option value="0" <?php if ($uomSpeed == '0') echo 'selected'; ?>>m/s</option>
<option value="1" <?php if ($uomspeed == '1') echo 'selected'; ?>>km/h</option> <option value="1" <?php if ($uomSpeed == '1') echo 'selected'; ?>>km/h</option>
<option value="2" <?php if ($uomspeed == '2') echo 'selected'; ?>>miles/h</option> <option value="2" <?php if ($uomSpeed == '2') echo 'selected'; ?>>miles/h</option>
</select> </select>
</td> </td>
</tr> </tr>

View File

@ -0,0 +1,71 @@
<?php
function isNGGalleryActive() {
if (!function_exists('is_plugin_active')) {
require_once(sitePath() . '/wp-admin/includes/plugin.php');
}
return is_plugin_active("nextgen-gallery/nggallery.php");
}
function getNGGalleryImages($ngGalleries, $ngImages)
{
$result = array();
$galids = explode(',', $ngGalleries);
$imgids = explode(',', $ngImages);
if (!isNGGalleryActive())
return '';
try {
$pictures = array();
foreach ($galids as $g) {
$pictures = array_merge($pictures, nggdb::get_gallery($g, false, false, true, $capture_date));
}
foreach ($imgids as $i) {
array_push($pictures, nggdb::find_image($i));
}
foreach ($pictures as $p) {
$item = array();
$item["data"] = $p->thumbHTML;
if (is_callable('exif_read_data'))
{
$exif = @exif_read_data($p->imagePath);
if ($exif !== false)
{
$item["lon"] = getExifGps($exif["GPSLongitude"], $exif['GPSLongitudeRef']);
$item["lat"] = getExifGps($exif["GPSLatitude"], $exif['GPSLatitudeRef']);
if (($item["lat"] != 0) || ($item["lon"] != 0))
{
$result[] = $item;
}
}
}
}
} catch (Exception $e) {
return '';
}
return $result;
}
function getExifGps($exifCoord, $hemi)
{
$degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
$minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
$seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
$flip = ($hemi == 'W' or $hemi == 'S') ? -1 : 1;
return $flip * ($degrees + $minutes / 60 + $seconds / 3600);
}
function gps2Num($coordPart)
{
$parts = explode('/', $coordPart);
if (count($parts) <= 0)
return 0;
if (count($parts) == 1)
return $parts[0];
return floatval($parts[0]) / floatval($parts[1]);
}
?>