initial commit
This commit is contained in:
commit
07f6cfaf37
3 changed files with 236 additions and 0 deletions
129
distance.js
Normal file
129
distance.js
Normal file
|
@ -0,0 +1,129 @@
|
|||
var localSearch = new GlocalSearch();
|
||||
var routePoints = new Array(0);
|
||||
var routeMarkers = new Array(0);
|
||||
var lineWidth = 1;
|
||||
var lineColor = '#ff0066';
|
||||
var routePath;
|
||||
var map = new google.maps.Map(document.getElementById("map_canvas"), {
|
||||
zoom: 1,
|
||||
center: new google.maps.LatLng(0, 0),
|
||||
mapTypeId: google.maps.MapTypeId.ROADMAP,
|
||||
draggableCursor: 'crosshair',
|
||||
mapTypeControlOptions: {
|
||||
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
|
||||
}
|
||||
});
|
||||
google.maps.event.addListener(map, 'click', function (event) {
|
||||
clickatpoint(event.latLng);
|
||||
});
|
||||
|
||||
function clickatpoint(point) {
|
||||
routePoints.push(point);
|
||||
var marker = placeMarker(point, routePoints.length);
|
||||
routeMarkers.push(marker);
|
||||
if (!(routePath == undefined)) {
|
||||
routePath.setMap(null);
|
||||
}
|
||||
routePath = getRoutePath();
|
||||
routePath.setMap(map);
|
||||
updateDisplay();
|
||||
}
|
||||
function getRoutePath() {
|
||||
var routePath = new google.maps.Polyline({
|
||||
path: routePoints,
|
||||
strokeColor: lineColor,
|
||||
strokeOpacity: 1.0,
|
||||
strokeWeight: lineWidth,
|
||||
geodesic: true
|
||||
});
|
||||
return routePath;
|
||||
}
|
||||
function clearMap() {
|
||||
if (routeMarkers) {
|
||||
for (i in routeMarkers) {
|
||||
routeMarkers[i].setMap(null);
|
||||
}
|
||||
}
|
||||
routePoints = new Array(0);
|
||||
routeMarkers = new Array(0);
|
||||
if (!(routePath == undefined)) {
|
||||
routePath.setMap(null);
|
||||
}
|
||||
document.getElementById("distance").value = "0.000";
|
||||
}
|
||||
function ftn_quickfind(address) {
|
||||
localSearch.setSearchCompleteCallback(null, function () {
|
||||
if (localSearch.results[0]) {
|
||||
clickatpoint(new google.maps.LatLng(localSearch.results[0].lat,
|
||||
localSearch.results[0].lng));
|
||||
}
|
||||
});
|
||||
localSearch.execute(address);
|
||||
}
|
||||
function placeMarker(location, number) {
|
||||
var image = new google.maps.MarkerImage('http://www.daftlogic.com/images/gmmarkersv3/stripes.png', new google.maps.Size(20, 34), new google.maps.Point(0, 0), new google.maps.Point(9, 33));
|
||||
var shadow = new google.maps.MarkerImage('http://www.daftlogic.com/images/gmmarkersv3/shadow.png', new google.maps.Size(28, 22), new google.maps.Point(0, 0), new google.maps.Point(1, 22));
|
||||
var text = "(" + (number) + ")" + location;
|
||||
var marker = new google.maps.Marker({
|
||||
position: location,
|
||||
map: map,
|
||||
shadow: shadow,
|
||||
icon: image,
|
||||
title: text,
|
||||
draggable: true
|
||||
});
|
||||
google.maps.event.addListener(marker, 'dragend', function (event) {
|
||||
routePoints[number - 1] = event.latLng;
|
||||
routePath.setMap(null);
|
||||
routePath = getRoutePath();
|
||||
routePath.setMap(map);
|
||||
updateDisplay();
|
||||
});
|
||||
return marker;
|
||||
}
|
||||
function clearLastLeg() {
|
||||
if (routePoints.length < 2) return;
|
||||
routeMarkers[routeMarkers.length - 1].setMap(null);
|
||||
if (!(routePath == undefined)) {
|
||||
routePath.setMap(null);
|
||||
}
|
||||
routePoints.pop();
|
||||
routeMarkers.pop();
|
||||
routePath = getRoutePath();
|
||||
routePath.setMap(map);
|
||||
updateDisplay();
|
||||
}
|
||||
function greatcircle(lat1, lon1, lat2, lon2) {
|
||||
var ra = Math.PI / 180;
|
||||
var f = Math.cos(lat1 * ra) * Math.cos(lat2 * ra);
|
||||
f *= Math.pow(Math.sin((lon1 * ra - lon2 * ra) / 2), 2);
|
||||
f += Math.pow(Math.sin((lat1 * ra - lat2 * ra) / 2), 2);
|
||||
f = 6372802 * 2 * Math.asin(Math.sqrt(f)); // geometric mean
|
||||
// read: http://math.wikia.com/index.php?title=Elliptical_great-circle_radius_average
|
||||
// http://en.wikipedia.org/w/index.php?title=Talk:Earth/Archive_7&oldid=256964396#Mean_radius
|
||||
return f;
|
||||
}
|
||||
function updateDisplay() {
|
||||
var a = routePath.getPath(),
|
||||
len = a.getLength(),
|
||||
dist = 0;
|
||||
for (var i = 0; i < len - 1; i++) {
|
||||
var pos1 = a.getAt(i);
|
||||
var pos2 = a.getAt(i+1);
|
||||
dist += greatcircle(pos1.lat(), pos1.lng(), pos2.lat(), pos2.lng());
|
||||
}
|
||||
document.getElementById("distance").value = dist.toFixed();
|
||||
}
|
||||
|
||||
function submitenter(myfield, e) {
|
||||
var keycode;
|
||||
if (window.event) keycode = window.event.keyCode;
|
||||
else if (e) keycode = e.which;
|
||||
else return true;
|
||||
if (keycode == 13) {
|
||||
ftn_quickfind(myfield.value);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
26
index.html
Normal file
26
index.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta http-equiv=content-type content="text/html; charset=UTF-8" />
|
||||
<title>Google Maps Distance Calculator</title>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1>Google Maps Distance Calculator</h1>
|
||||
Search For Location : <input name="goto" id="goto" type="text" onKeyPress="return submitenter(this,event);"/>
|
||||
|
||||
<div id="map_canvas" style="width: 95%; height: 800px"></div>
|
||||
|
||||
<p>Total Distance <input style="display: inline;" id="distance" type="text" size="12" value="0.000"/> meters</p>
|
||||
<p>
|
||||
<input class="custombutton" type="button" value="Clear Last Point" onclick="clearLastLeg();"/>
|
||||
<input class="custombutton" type="button" value="Clear All" onclick="clearMap();"/>
|
||||
</p>
|
||||
|
||||
</center>
|
||||
|
||||
<script type="text/javascript" src="http://www.google.com/uds/api?file=uds.js&v=1.0"></script>
|
||||
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
|
||||
<script type="text/javascript" src="distance.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
81
pin.svg
Normal file
81
pin.svg
Normal file
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="1124.5582"
|
||||
height="1932.3383"
|
||||
viewBox="0 0 1124.5582 1932.3382"
|
||||
enable-background="new 0 0 2481 2073"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="pin.svg"
|
||||
inkscape:export-filename="/home/josch/globaldistance/pin.png"
|
||||
inkscape:export-xdpi="1.28"
|
||||
inkscape:export-ydpi="1.28"><metadata
|
||||
id="metadata15"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs13"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 1036.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="2481 : 1036.5 : 1"
|
||||
inkscape:persp3d-origin="1240.5 : 691 : 1"
|
||||
id="perspective17" /></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="960"
|
||||
inkscape:window-height="1061"
|
||||
id="namedview11"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.11384467"
|
||||
inkscape:cx="1474.4153"
|
||||
inkscape:cy="1002.9689"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="19"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" />
|
||||
<g
|
||||
id="g3"
|
||||
transform="translate(-167.27119,-107.13061)">
|
||||
<path
|
||||
clip-rule="evenodd"
|
||||
stroke-miterlimit="10"
|
||||
d="M 730.94,1839.629 C 692.174,1649.328 623.824,1490.964 541.037,1344.189 479.63,1235.317 408.493,1134.826 342.673,1029.251 320.701,994.007 301.739,956.774 280.626,920.197 238.41,847.06 204.182,762.262 206.357,652.265 c 2.125,-107.473 33.208,-193.684 78.03,-264.172 73.719,-115.935 197.201,-210.989 362.884,-235.969 135.466,-20.424 262.475,14.082 352.543,66.748 73.6,43.038 130.596,100.527 173.92,168.28 45.22,70.716 76.359,154.26 78.971,263.232 1.337,55.83 -7.805,107.532 -20.684,150.418 -13.034,43.409 -33.996,79.695 -52.646,118.454 -36.406,75.659 -82.049,144.982 -127.855,214.346 -136.437,206.606 -264.496,417.31 -320.58,706.027 z"
|
||||
style="fill:#ff00ff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-miterlimit:10;stroke-dasharray:none;fill-opacity:1" />
|
||||
|
||||
<circle
|
||||
clip-rule="evenodd"
|
||||
cx="729.54602"
|
||||
cy="651.047"
|
||||
r="183.33299"
|
||||
id="circle9"
|
||||
sodipodi:cx="729.54602"
|
||||
sodipodi:cy="651.047"
|
||||
sodipodi:rx="183.33299"
|
||||
sodipodi:ry="183.33299"
|
||||
transform="matrix(0.90417546,0,0,0.90417546,69.908393,62.386263)"
|
||||
style="fill-rule:evenodd"
|
||||
d="m 912.87901,651.047 c 0,101.25201 -82.08097,183.33299 -183.33299,183.33299 -101.25202,0 -183.33299,-82.08098 -183.33299,-183.33299 0,-101.25202 82.08097,-183.333 183.33299,-183.333 101.25202,0 183.33299,82.08098 183.33299,183.333 z" />
|
||||
<path
|
||||
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:78;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:AR PL SungtiL GB;-inkscape-font-specification:AR PL SungtiL GB"
|
||||
d="m 722,107.15625 c -26.36476,0.24808 -53.26451,2.29529 -80.53125,6.40625 -177.28024,26.72851 -310.87915,129.16348 -390,253.59375 -48.1674,75.74905 -81.8283,169.76766 -84.09375,284.34375 -2.34271,118.47883 35.29066,211.65128 79.46875,288.1875 20.43873,35.40887 39.5523,73.0276 62.71875,110.1875 66.61623,106.8521 137.37978,206.8782 197.5,313.4688 81.40228,144.3199 147.83527,298.4005 185.65625,484.0624 l 39.125,192.0626 37.375,-192.4063 c 54.64221,-281.2947 178.94199,-486.1733 314.84375,-691.9687 45.8256,-69.3937 92.5763,-140.1894 130.4687,-218.93755 17.823,-37.04013 40.2192,-75.41876 54.8438,-124.125 13.9002,-46.28644 23.7652,-101.93388 22.3125,-162.59375 C 1288.909,533.51971 1254.9466,441.77144 1206.5938,366.15625 1160.3005,293.75981 1098.5903,231.46725 1019.5,185.21875 940.32056,138.91968 836.24729,106.08124 722,107.15625 z m 0.78125,78.0625 c 99.10422,-0.74166 190.16269,28.02932 257.34375,67.3125 68.1097,39.8275 120.3952,92.51544 160.75,155.625 42.0872,65.81681 70.3982,141.13004 72.8438,243.15625 1.2213,51.00013 -7.2047,98.79569 -19.0626,138.28125 -11.4434,38.11176 -30.9604,72.27213 -50.4374,112.75 -34.9196,72.56982 -79.4636,140.44685 -125.25,209.78125 C 906.54458,1282.3685 797.6886,1458.8107 730.4375,1680.3125 690.30217,1549.8937 636.38315,1433.8589 575,1325.0312 512.30622,1213.8778 440.80502,1112.9229 375.78125,1008.625 355.0037,975.29694 336.19352,938.43263 314.40625,900.6875 274.15234,830.94972 243.33646,754.54642 245.34375,653.03125 c 1.98455,-100.36991 30.49215,-178.77305 71.96875,-244 68.31715,-107.43973 181.69549,-195.11226 335.78125,-218.34375 23.53301,-3.54804 46.8173,-5.2976 69.6875,-5.46875 z"
|
||||
id="path5" /></g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
Loading…
Reference in a new issue