Hello …. I am trying to make this “ruler” work …. All the necessary code is in place . I am not knowledgeable enough to Make the event Load with Javascript …. The button is there . The Code is there . It just wont fire . I Have Marked the area of the code that won’t fire . 1. I would like to enter address . 2. Hit the “ruler” button . And have the ruler execute to wherever the address is located . I Have enclose links to 1. A working example that is exactly what I am trying to achieve only it is in “google maps “ so the code does not work for “Google Earth “ . I Have also enclosed a Link to the “simple ruler “ api for google earth in which I have already coded in my example it just will not execute . I could really use a hand on this issue . I am struggling and have a deadline to achieve … Thank you in Advance . Eric

Working "google maps Model" Link http://koti.mbnet.fi/ojalesa/exam/ruler.html only i need it in google earth
Google simple ruler Link ... Place where i received my code that won't execute
http://earth-api-utility-library.goo...les/ruler.html

HTML Code:

		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
		  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
		<html>
		<head>
		  <title>GEarthExtensions Samples - Simple Distance Ruler</title>
		  <script src="http://www.google.com/jsapi?key=ABQIAAAAsc0UQXoo2BnAJLhtpWCJFBTgHOxFyKCf35LCvsI_n4URElrkIhS9MkSlm_0NZWgrKFkOsnd5rEK0Lg" type="text/javascript"></script>
		  <script src="../dist/extensions.pack.js" type="text/javascript"></script>
		  <script src="google/extensions-0.2.1.pack.js"></script>
		<script type="text/javascript">
		/* <![CDATA[ */

		var ge = null;
		var geocoder = null; // GClientGeocoder
		var gex = null;

		google.load('earth', '1');
	google.load('maps', '3.6', {
		other_params: 'sensor=false&libraries=places'
	});






	function init() {
		google.earth.createInstance('map3d', function (object) {
			ge = object;
			ge.getWindow().setVisibility(true);
			geocoder = new window.google.maps.Geocoder();
			gex = new GEarthExtensions(ge);
			GeoSearch('map3d');
			 ge.getWindow().setVisibility(true);
			ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO)
			ge.getNavigationControl().setStreetViewEnabled(true); 
			ge.getTime().setHistoricalImageryEnabled(true);
			
			
		}, function (error) {
			alert("Error: " + error);
		});
	}

	google.setOnLoadCallback(init);

	function GeoSearch(id, options) {
		id = id || '';
		options = options || {};
		var me = {},
		bbox = util.bbox(document.getElementById(id)),
			settings = (function () {
				var defaults = {};
				defaults.x = 10;
				defaults.y = 10;
				defaults.width = 400;
				defaults.height = 25;
				defaults.types = [];
				defaults.iframe = {
					frameBorder: 0,
					id: 'geosearch-shim',
					scrolling: 'no',
					//src: (navigator.userAgent.indexOf('MSIE 6')>=0)?'':'javascript:void(0);',
					src: 'about:blank',
					style: {
						width: util.px(defaults.width),
						height: util.px(defaults.height),
						zIndex: 9,
						position: 'absolute',
						left: util.px(bbox.left, defaults.x),
						top: util.px(bbox.top, defaults.y)
					}
				};
				defaults.submit = {
					type: 'button',
					id: 'geosearch-submit',
					className: 'geosearch-controls',
					value: '►',
					style: {
						padding: '0 5px 0 5px',
						cursor: 'pointer',
						color: '#fff',
						background: '#4d90fe',
						height: util.px(defaults.height),
						outline: 'none',
						border: 0,
						zIndex: 11,
						position: 'absolute',
						top: util.px(bbox.top, defaults.y)
					}
				};
				defaults.input = {
					type: 'text',
					id: 'geosearch-input',
					className: 'geosearch-controls',
					style: {
						paddingLeft: '5px',
						textOverflow: 'ellipsis',
						width: util.px(defaults.width),
						height: util.px(defaults.height),
						display: 'block',
						outline: 'none',
						border: 0,
						zIndex: 10,
						position: 'absolute',
						left: util.px(bbox.left, defaults.x),
						top: util.px(bbox.top, defaults.y)
					}
				};

				return defaults;
			})();

		util.extend(settings, options);

		me.iframeShim = util.add('iframe', document.body, settings.iframe);
		me.input = util.add('input', document.body, settings.input);
		me.submit = util.add('input', document.body, settings.submit);

		var autocomplete = new google.maps.places.Autocomplete(me.input, {
				types: settings.types
			}),
			reset = function () {
				var offset = settings.width - me.submit.clientWidth;
				me.iframeShim.style.height = util.px(settings.height);
				me.submit.style.left = util.px(bbox.left, settings.x, offset);
				me.input.style.width = util.px(offset);
				me.submit.style.background = settings.submit.style.background;
				me.input.title = me.submit.title = '';
			};

		reset();

		util.listen(me.submit, 'click', function (evt) {
			reset();
			me.geocode(me.input.value);
			return false;
		});

		util.listen(me.input, 'blur', function (evt) { reset(); });
		//util.listen(me.input, 'focus', function (evt) { reset(); });
		
		util.listen(me.input, 'keydown', function (evt) {
			evt = window.event ? window.event : evt;
			reset();
			var pac = document.getElementsByClassName('pac-container')[0];
			if (pac) {
				me.iframeShim.style.height = util.px(settings.height, pac.clientHeight);
				pac.style.paddingRight = util.px(me.submit.clientWidth);
			}

			if (evt.keyCode == 13) { // enter
				   reset();
				me.geocode(me.input.value);
			}
			
			return false;
		});

		google.maps.event.addListener(autocomplete, 'place_changed', function () {
			var place = autocomplete.getPlace();
			if (!place.geometry) {
				me.submit.style.background = 'red';
				return;
			}

			me.submit.style.background = 'green';
			me.input.title = me.submit.title = 'OK';

			if (place.geometry.viewport) {
				gex.view.setToBoundsView(new geo.Bounds(
				place.geometry.viewport.getSouthWest(),
				place.geometry.viewport.getNorthEast()), {
					aspectRatio: 1.0
				});
			} else {
				// TODO: look at using the geocode result?
				place.geometry && gex.util.lookAt(place.geometry.location);
			}
		});

		me.geocode = function (address) {
			if ('string' != typeof address) return;
			me.input.value = address;
			geocoder.geocode({
				address: address
			}, function (results, status) {
				me.input.title = me.submit.title = status;
				if (status == google.maps.GeocoderStatus.OK) {
					if (!results[0].geometry) return;
					var viewport = results[0].geometry.viewport;
					gex.view.setToBoundsView(new geo.Bounds(
					viewport.getSouthWest(),
					viewport.getNorthEast()), {
						aspectRatio: 1.0
					});
					me.submit.style.background = 'green';
				} else {
					me.submit.style.background = 'red';
				}
			});
		}

		return me;
	}

	/* utilities */

	var util = {
		add: function (a, b, c) {
			c = c || {};
			a = document.createElement(a);
			util.extend(a, c);
			b.appendChild(a);
			return a
		},
		extend: function (a, b) {
			for (var c in b) "object" === typeof b[c] && null !== b[c] && a[c] ? util.extend(a[c], b[c]) : a[c] = b[c]
		},
		listen: function (a, b, c) {
			a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent && a.attachEvent("on" + b, c)
		},
		px: function () {
			for (var a = 0, b = 0; b < arguments.length; b++)
			a += parseInt(arguments[b]);
			return a + "px"
		},
		bbox: function (a) {
			for (var b = a.offsetLeft, c = a.offsetTop, d = a.offsetParent;
			d && d != document.body.parentNode;)
			isFinite(d.offsetLeft) && isFinite(d.offsetTop) && (b += d.offsetLeft, c += d.offsetTop), d = d.offsetParent;
			return {
				left: b,
				top: c,
				width: a.offsetWidth,
				height: a.offsetHeight
			}
		}


	};

		   
			
			
			//  This is the Portion That will not Load .............. Hope it helps 
			
			
			
		google.setOnLoadCallback(function add() {
		google.earth.createInstance('map3d', function(pluginInstance) {
			ge = pluginInstance;
			
			gex = new GEarthExtensions(pluginInstance);
		  
			
			gex.util.lookAt([1, 1], { range: 100000, tilt: 0});
			
			// create start and end placemark
			var rulerColor = '#fc0';
			
			var placemarkOptions = {
			  style: {
				icon: {
				  color: rulerColor,
				  stockIcon: 'paddle/wht-stars',
				  hotSpot: { left: '50%', bottom: 0 }
				}
			  }
			};
			
			var startPlacemark = gex.dom.addPointPlacemark([0, -1], placemarkOptions);
			var endPlacemark = gex.dom.addPointPlacemark([0, 1], placemarkOptions);
			
			// create the distance updater function
			var _updateDistance = function() {
			  document.getElementById('distance').innerHTML =
				  '~' +
				  (new geo.Point(startPlacemark.getGeometry()).distance(
					new geo.Point(endPlacemark.getGeometry())) / 22229.344).toFixed(1) +
				  ' mi';
			};
			
			// create the line placemark
			var linePlacemark = gex.dom.addPlacemark({
			  lineString: {
				path: [startPlacemark.getGeometry(),
					   endPlacemark.getGeometry()],
				altitudeMode: ge.ALTITUDE_CLAMP_TO_GROUND,
				tessellate: true
			  },
			  style: {
				line: { color: rulerColor, opacity: 0.5, width: 3 }
			  }
			});
			
			// make them draggable
			var dragOptions = {
			  bounce: false,
			  dragCallback: function() {
				linePlacemark.setGeometry(
					gex.dom.buildLineString({
					  path: [startPlacemark.getGeometry(),
							 endPlacemark.getGeometry()],
					  altitudeMode: ge.ALTITUDE_CLAMP_TO_GROUND,
					  tessellate: true
					}));
				
				// update the distance on drag
				_updateDistance();
			  }
			};
			
			// show start distance
			_updateDistance();
			
			gex.edit.makeDraggable(startPlacemark, dragOptions);
			gex.edit.makeDraggable(endPlacemark, dragOptions);

		  }, function() {});
		});


		/* ]]> */
		</script>
		</head>
		<body>


		  <div id="map3d_container" style="width: 1000px; height: 500px;">
			<div id="map3d" style="height: 100%"></div>
			<input type="button" id="add" value="Ruler" onclick="add()" style="width:150px;" 
	title="Insert Ruler">
		  </div>
		  <p><strong>Distance: </strong><span id="distance">N/A</span></p>
		</body>
		</html>