This commit is contained in:
bastianonm 2011-12-20 15:37:26 +00:00
parent c69874067a
commit 5720ab8d00
5 changed files with 131 additions and 44 deletions

View File

@ -46,7 +46,7 @@ function wpgpxmaps(targhetId,mapType,mapData,graphData)
if (marker)
{
var point = getItemFromArray(mapData,r)
marker.setPosition(new google.maps.LatLng(point[0],point[1]));
marker.setPosition(new google.maps.LatLng(point[0],point[1])); marker.setTitle("Current Position");
}
});
google.visualization.events.addListener(chart, 'onmouseout', function (e) {
@ -56,13 +56,12 @@ function wpgpxmaps(targhetId,mapType,mapData,graphData)
{
var r = chart.getSelection()[0]['row'];
var point = getItemFromArray(mapData,r)
marker.setPosition(new google.maps.LatLng(point[0], point[1]));
marker.setPosition(new google.maps.LatLng(point[0], point[1])); marker.setTitle("Graph Selection");
}
}
});
}
if (mapData != '')
{
} else { el_chart.style.display='none'; }
if (mapData != '') {
var points = [];
var bounds = new google.maps.LatLngBounds();
for(var i in mapData)
@ -83,10 +82,10 @@ function wpgpxmaps(targhetId,mapType,mapData,graphData)
var first = getItemFromArray(mapData,0)
var marker = new google.maps.Marker({
position: new google.maps.LatLng(first[0], first[1]),
title:"Hello World!"
title:"Start"
});
marker.setMap(map);
}
}
}
function getItemFromArray(arr,index)
{

View File

@ -4,35 +4,60 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=basti
Tags: maps, gpx, gps, graph, google maps, google chart
Requires at least: 2.0.0
Tested up to: 3.3
Stable tag: 1.0.3
Stable tag: 1.0.4
License: GPLv2 or later
Draws a gpx track with altitude graph
== Description ==
This plugin has, as input, the GPX file with the track you've made. As output it shows the map of the track, fixed with an altitude graph.
This plugin has, as input, the GPX file with the track you've made. As output it shows the map of the track, fixed with an altitude graph (where aviable).
- iphone/ipad/ipod Compatible
Try this plugin on <a href="http://www.pedemontanadelgrappa.it/category/mappe/">http://www.pedemontanadelgrappa.it/category/mappe/</a>
Thanks to: <a href="http://www.securcube.net/">www.securcube.net</a>, <a href="http://www.darwinner.it/">www.darwinner.it</a>, <a href="http://www.pedemontanadelgrappa.it/">www.pedemontanadelgrappa.it</a>,
<a href="http://www.darwinner.it/featured/wp-gpx-maps/">Bugs, problems, thanks and anything else here!</a>
<a href="http://www.darwinner.it/featured/wp-gpx-maps/">
Bugs, problems, thanks and anything else here!</a>
Supported gpx namespace are:
1. http://www.topografix.com/GPX/1/0
1. http://www.topografix.com/GPX/1/1
1. http://www.garmin.com/xmlschemas/GpxExtensions/v3
== Installation ==
1. Use the classic wordpress plugin installer or copy the plugins folder to the `/wp-content/plugins/` directory
1. Activate the plugin through the 'Plugins' menu in WordPress
1. Add the shortcode [sgpx gpx="&gt;relative path to your gpx&lt;"]
== Frequently Asked Questions ==
= what are all available shortcode attributes? =
The attributes are:
1. gpx: relative path to gpx
1. width: width in pixels
1. mheight: map height
1. gheight: graph height
1. mtype: map aviable types are: HYBRID, ROADMAP, SATELLITE, TERRAIN
shortcode with all the attributes : [sgpx gpx="&gt;relative path to your gpx&lt;" width=100% mheight=300px gheight=200px mtype=SATELLITE]
= What happening if I've a very large gpx? =
This plugin will print a small amout of points to to speedup javascript and pageload.
= Is it free? =
Yes!
@ -41,6 +66,9 @@ Yes!
2. Screenshot Admin area
== Changelog ==
= 1.0.4 =
* Fixed Upload file error
* Added support for Garmin gpx (http://www.garmin.com/xmlschemas/GpxExtensions/v3 namespace)
= 1.0.3 =
* Added Settings link on plugins list
* Added attributes width, mheight, gheight, mtype on shortcode.
@ -52,6 +80,7 @@ Yes!
* Initial release.
== Upgrade Notice ==
= 1.0.4 =
= 1.0.3 =
= 1.0.2 =
= 1.0.1 =

View File

@ -3,7 +3,7 @@
Plugin Name: WP-GPX-Maps
Plugin URI: http://www.darwinner.it/
Description: Draws a gpx track with altitude graph
Version: 1.0.3
Version: 1.0.4
Author: Bastianon Massimo
Author URI: http://www.pedemontanadelgrappa.it/
License: GPL
@ -90,13 +90,11 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
foreach ($points as $p) {
$points_maps .= "[".(float)$p[0].",".(float)$p[1]."],";
$points_graph .= "[".(float)$p[3].",".(float)$p[2]."],";
}
} //all the points are [0,0] $points_graph = preg_replace("/^(\[0,0\],)+$/", "", $points_graph);
$p="/,$/";
$points_maps = preg_replace($p, "", $points_maps);
$points_graph = preg_replace($p, "", $points_graph);
echo
'
$points_graph = preg_replace($p, "", $points_graph); if (preg_match("/^(\[0,0\],?)+$/", $points_graph)) { $points_graph = ""; }
echo '
<div id="wpgpxmaps_'.$r.'" style="clear:both;">
<div id="map_'.$r.'" style="width:'.$w.'; height:'.$mh.'"></div>
<div id="chart_'.$r.'" class="plot" style="width:'.$w.'; height:'.$gh.'"></div>
@ -107,7 +105,6 @@ function handle_WP_GPX_Maps_Shortcodes($attr, $content='')
var c_'.$r.' = ['.$points_graph.'];
wpgpxmaps("'.$r.'",\''.$mt.'\',m_'.$r.',c_'.$r.');
});
</script>';
}

View File

@ -16,15 +16,44 @@
}
$realGpxPath = substr (__FILE__, 0, strrpos(__FILE__,'/wp-content/')).$gpxPath;
if (file_exists($realGpxPath))
{
$gpx = simplexml_load_file($realGpxPath);
$gpx->registerXPathNamespace('10', 'http://www.topografix.com/GPX/1/0');
$gpx->registerXPathNamespace('11', 'http://www.topografix.com/GPX/1/1');
foreach($gpx->xpath('//trkpt | //10:trkpt | //11:trkpt') as $trkpt){
$points = parseXml($realGpxPath, $gpxOffset);
}
else
{
array_push($points, array((float)0,(float)0,(float)0,(float)0));
}
// riduco l'array a circa 200 punti per non appensantire la pagina(mappa e grafico)!
$count=sizeof($points);
if ($count>200)
{
$f = round($count/200);
if ($f>1)
for($i=$count;$i>0;$i--)
if ($i % $f != 0)
unset($points[$i]);
}
return $points;
}
function parseXml($filePath, $gpxOffset)
{
$points = array();
$gpx = simplexml_load_file($filePath);
$gpx->registerXPathNamespace('10', 'http://www.topografix.com/GPX/1/0');
$gpx->registerXPathNamespace('11', 'http://www.topografix.com/GPX/1/1');
$gpx->registerXPathNamespace('gpxx', 'http://www.garmin.com/xmlschemas/GpxExtensions/v3');
$nodes = $gpx->xpath('//trkpt | //10:trkpt | //11:trkpt');
if ( count($nodes) > 0 )
{
// normal case
foreach($nodes as $trkpt)
{
$lat = $trkpt['lat'];
$lon = $trkpt['lon'];
$ele = $trkpt->ele;
@ -57,28 +86,63 @@
$lastLon=$lon;
$lastEle=$ele;
}
}
else
{
array_push($points, array((float)0,(float)0,(float)0,(float)0));
}
// riduco l'array a circa 200 punti per non appensantire la pagina(mappa e grafico)!
$count=sizeof($points);
if ($count>200)
{
$f = round($count/200);
if ($f>1)
for($i=$count;$i>0;$i--)
if ($i % $f != 0)
unset($points[$i]);
$nodes = $gpx->xpath('//gpxx:rpt');
if ( count($nodes) > 0 )
{
// Garmin case
foreach($nodes as $rpt)
{
$lat = $rpt['lat'];
$lon = $rpt['lon'];
if ($lastLat == 0 && $lastLon == 0)
{
//Base Case
array_push($points, array((float)$lat,(float)$lon,null,null));
$lastLat=$lat;
$lastLon=$lon;
}
else
{
//Normal Case
$offset = calculateDistance($lat, $lon, 0,$lastLat, $lastLon, 0);
$dist = $dist + $offset;
if (((float) $offset + (float) $lastOffset) > $gpxOffset)
{
//Bigger Offset -> write coordinate
$lastOffset=0;
array_push($points, array((float)$lat,(float)$lon,null,null));
}
else
{
//Smoller Offset -> continue..
$lastOffset= (float) $lastOffset + (float) $offset;
}
}
$lastLat=$lat;
$lastLon=$lon;
}
}
else
{
echo "Gpx Empty or not supported!";
}
}
return $points;
}
}
function toRadians($degrees)
{
return $degrees * 3.1415926535897932385 / 180;
}
}
function calculateDistance($lat1,$lon1,$ele1,$lat2,$lon2,$ele2)
{
@ -89,4 +153,6 @@
$dist = 2 * 3958.75 * atan2(sqrt($a), sqrt(1 - (float) $a));
return sqrt(pow($dist * 1609.00, 2) + pow((float) $lat1 - (float)$lat2, 2));
}
?>

View File

@ -99,14 +99,10 @@ function WP_GPX_Maps_html_page() {
<div class="tablenav top">
<form enctype="multipart/form-data" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" onchange="this.parentNode.submit()" />
<?php
if ( isset($_FILES['uploadedfile']) )
{
$target_path = $realGpxPath ."/". basename( $_FILES['uploadedfile']['name']);
if (preg_match($gpxRegEx,$target_path ))
{
if ( isset($_FILES['uploadedfile']) ) { $target_path = $realGpxPath ."/". basename( $_FILES['uploadedfile']['name']); if (preg_match($gpxRegEx, $target_path))
{
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
} else{