The example below implements a plugin for the Google Geocoding Services.
For overview and documentation on how to implement, see Notes on Geocoding Plugins.
(function(){ orbit.webclient.GeocodePlugins.Google = { sensor: false, apiKey: null }; /** * Implements the geocoding request for Google Geocoding API V2 * @see https://developers.google.com/maps/documentation/geocoding/v2/ */ orbit.webclient.GeocodePlugins.Google.geocode = function(query,handleResult,handleFault) { var url = "http://maps.googleapis.com/maps/api/geocode/json"; url += "?address="+ encodeURIComponent(query); url += "&sensor="+ this.sensor; if (this.apiKey!=null) url += "&key="+ encodeURIComponent(this.apiKey); sendRequest(url,handleResult,handleFault); } // Example URL : http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false function sendRequest(url,handleResult,handleFault) { var req = createXMLHTTPObject(); if (!req) { handleFault({code:'plugin_error',message:"Failed to create XMLHTTPRequest object."}); return; } req.open("GET",url,true/*async*/); req.setRequestHeader('User-Agent','XMLHTTP/1.0'); req.onreadystatechange = function () { if (req.readyState != 4) return; if (req.status != 200 && req.status != 304) { handleFault({code:'network_error',message:"Invalid http response (status code "+ req.status +")"}); } else { try { var object = JSON.parse(req.responseText); if (object.status=="OK" || object.status=="ZERO_RESULTS") { var list = []; if (object.results.length>0) { var result = object.results[0]; var loc = result.geometry.location var lat = loc.lat; var lng = loc.lng; var boundingbox = null; if (result.geometry.viewport) { var max = result.geometry.viewport.northeast; var min = result.geometry.viewport.southwest; boundingbox = {minX:min.lng,maxX:max.lng,minY:min.lat,maxY:max.lat}; } list.push({coordinate:{x:lng,y:lat},crs:"4326",boundingbox:boundingbox}); } handleResult(list); } else if (object.status=="OVER_QUERY_LIMIT") { handleFault({code:'query_limit_reached',message:"Query limit reached."}); } else if (object.status=="REQUEST_DENIED") { handleFault({code:'no_permission',message:"Request denied."}); } else if (object.status=="UNKNOWN_ERROR") { handleFault({code:'service_error',message:"Internal server error occurred."}); } else { handleFault({code:'service_error',message:"Unkown status code returned by service '"+ object.status +"'"}); } } catch(error) { handleFault({code:'plugin_error',message:"Plugin error while processing response: "+ error}); } } } req.send(); } var XMLHttpFactories = [ function () {return new XMLHttpRequest()}, function () {return new ActiveXObject("Msxml2.XMLHTTP")}, function () {return new ActiveXObject("Msxml3.XMLHTTP")}, function () {return new ActiveXObject("Microsoft.XMLHTTP")} ]; function createXMLHTTPObject() { var xmlhttp = false; for (var i=0;i<XMLHttpFactories.length;i++) { try { xmlhttp = XMLHttpFactories[i](); } catch (e) { continue; } break; } return xmlhttp; } })();