summaryrefslogtreecommitdiff
path: root/httemplate/elements/jquery-gmaps-latlon-picker.js
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-10-10 11:59:41 -0700
committerMark Wells <mark@freeside.biz>2016-10-10 11:59:41 -0700
commit49d9ea969069430ef3fe23e5b1ac3599e929bb04 (patch)
tree24a3feb13b0a8db68f7a634de239b97d106a5efe /httemplate/elements/jquery-gmaps-latlon-picker.js
parent53a8c81b4f3a414803a52fc8114b26a71055d012 (diff)
new tower/sector UI, mapping features, and network monitoring, #37802
Diffstat (limited to 'httemplate/elements/jquery-gmaps-latlon-picker.js')
-rw-r--r--httemplate/elements/jquery-gmaps-latlon-picker.js254
1 files changed, 254 insertions, 0 deletions
diff --git a/httemplate/elements/jquery-gmaps-latlon-picker.js b/httemplate/elements/jquery-gmaps-latlon-picker.js
new file mode 100644
index 0000000..b839df7
--- /dev/null
+++ b/httemplate/elements/jquery-gmaps-latlon-picker.js
@@ -0,0 +1,254 @@
+/**
+ *
+ * A JQUERY GOOGLE MAPS LATITUDE AND LONGITUDE LOCATION PICKER
+ * version 1.2
+ *
+ * Supports multiple maps. Works on touchscreen. Easy to customize markup and CSS.
+ *
+ * To see a live demo, go to:
+ * http://www.wimagguc.com/projects/jquery-latitude-longitude-picker-gmaps/
+ *
+ * by Richard Dancsi
+ * http://www.wimagguc.com/
+ *
+ */
+
+(function($) {
+
+// for ie9 doesn't support debug console >>>
+if (!window.console) window.console = {};
+if (!window.console.log) window.console.log = function () { };
+// ^^^
+
+/* local modification */
+window.gMapsLatLonPickerState = {};
+
+$.fn.gMapsLatLonPicker = (function() {
+
+ var _self = this;
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // PARAMETERS (MODIFY THIS PART) //////////////////////////////////////////////////////////////
+ _self.params = {
+ defLat : 0,
+ defLng : 0,
+ defZoom : 1,
+ queryLocationNameWhenLatLngChanges: true,
+ queryElevationWhenLatLngChanges: true,
+ mapOptions : {
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
+ /* local modification */
+ //mapTypeControl: false,
+ disableDoubleClickZoom: true,
+ zoomControlOptions: true,
+ streetViewControl: false
+ },
+ strings : {
+ markerText : "Drag this Marker",
+ error_empty_field : "Couldn't find coordinates for this place",
+ error_no_results : "Couldn't find coordinates for this place"
+ }
+ };
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // VARIABLES USED BY THE FUNCTION (DON'T MODIFY THIS PART) ////////////////////////////////////
+ _self.vars = {
+ ID : null,
+ LATLNG : null,
+ map : null,
+ marker : null,
+ geocoder : null
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // PRIVATE FUNCTIONS FOR MANIPULATING DATA ////////////////////////////////////////////////////
+ var setPosition = function(position) {
+ _self.vars.marker.setPosition(position);
+ _self.vars.map.panTo(position);
+
+ $(_self.vars.cssID + ".gllpZoom").val( _self.vars.map.getZoom() );
+ $(_self.vars.cssID + ".gllpLongitude").val( position.lng() );
+ $(_self.vars.cssID + ".gllpLatitude").val( position.lat() );
+
+ $(_self.vars.cssID).trigger("location_changed", $(_self.vars.cssID));
+
+ if (_self.params.queryLocationNameWhenLatLngChanges) {
+ getLocationName(position);
+ }
+ if (_self.params.queryElevationWhenLatLngChanges) {
+ getElevation(position);
+ }
+ };
+
+ // for reverse geocoding
+ var getLocationName = function(position) {
+ var latlng = new google.maps.LatLng(position.lat(), position.lng());
+ _self.vars.geocoder.geocode({'latLng': latlng}, function(results, status) {
+ if (status == google.maps.GeocoderStatus.OK && results[1]) {
+ $(_self.vars.cssID + ".gllpLocationName").val(results[1].formatted_address);
+ } else {
+ $(_self.vars.cssID + ".gllpLocationName").val("");
+ }
+ $(_self.vars.cssID).trigger("location_name_changed", $(_self.vars.cssID));
+ });
+ };
+
+ // for getting the elevation value for a position
+ var getElevation = function(position) {
+ var latlng = new google.maps.LatLng(position.lat(), position.lng());
+
+ var locations = [latlng];
+
+ var positionalRequest = { 'locations': locations };
+
+ _self.vars.elevator.getElevationForLocations(positionalRequest, function(results, status) {
+ if (status == google.maps.ElevationStatus.OK) {
+ if (results[0]) {
+ $(_self.vars.cssID + ".gllpElevation").val( results[0].elevation.toFixed(3));
+ } else {
+ $(_self.vars.cssID + ".gllpElevation").val("");
+ }
+ } else {
+ $(_self.vars.cssID + ".gllpElevation").val("");
+ }
+ $(_self.vars.cssID).trigger("elevation_changed", $(_self.vars.cssID));
+ });
+ };
+
+ // search function
+ var performSearch = function(string, silent) {
+ if (string == "") {
+ if (!silent) {
+ displayError( _self.params.strings.error_empty_field );
+ }
+ return;
+ }
+ _self.vars.geocoder.geocode(
+ {"address": string},
+ function(results, status) {
+ if (status == google.maps.GeocoderStatus.OK) {
+ $(_self.vars.cssID + ".gllpZoom").val(11);
+ _self.vars.map.setZoom( parseInt($(_self.vars.cssID + ".gllpZoom").val()) );
+ setPosition( results[0].geometry.location );
+ } else {
+ if (!silent) {
+ displayError( _self.params.strings.error_no_results );
+ }
+ }
+ }
+ );
+ };
+
+ // error function
+ var displayError = function(message) {
+ alert(message);
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////
+ var publicfunc = {
+
+ // INITIALIZE MAP ON DIV //////////////////////////////////////////////////////////////////
+ init : function(object) {
+
+ if ( !$(object).attr("id") ) {
+ if ( $(object).attr("name") ) {
+ $(object).attr("id", $(object).attr("name") );
+ } else {
+ $(object).attr("id", "_MAP_" + Math.ceil(Math.random() * 10000) );
+ }
+ }
+
+ _self.vars.ID = $(object).attr("id");
+ _self.vars.cssID = "#" + _self.vars.ID + " ";
+
+ _self.params.defLat = $(_self.vars.cssID + ".gllpLatitude").val() ? $(_self.vars.cssID + ".gllpLatitude").val() : _self.params.defLat;
+ _self.params.defLng = $(_self.vars.cssID + ".gllpLongitude").val() ? $(_self.vars.cssID + ".gllpLongitude").val() : _self.params.defLng;
+ _self.params.defZoom = $(_self.vars.cssID + ".gllpZoom").val() ? parseInt($(_self.vars.cssID + ".gllpZoom").val()) : _self.params.defZoom;
+
+ _self.vars.LATLNG = new google.maps.LatLng(_self.params.defLat, _self.params.defLng);
+
+ _self.vars.MAPOPTIONS = _self.params.mapOptions;
+ _self.vars.MAPOPTIONS.zoom = _self.params.defZoom;
+ _self.vars.MAPOPTIONS.center = _self.vars.LATLNG;
+
+ _self.vars.map = new google.maps.Map($(_self.vars.cssID + ".gllpMap").get(0), _self.vars.MAPOPTIONS);
+ _self.vars.geocoder = new google.maps.Geocoder();
+ _self.vars.elevator = new google.maps.ElevationService();
+
+ _self.vars.marker = new google.maps.Marker({
+ position: _self.vars.LATLNG,
+ map: _self.vars.map,
+ title: _self.params.strings.markerText,
+ draggable: true
+ });
+
+ // Set position on doubleclick
+ google.maps.event.addListener(_self.vars.map, 'dblclick', function(event) {
+ setPosition(event.latLng);
+ });
+
+ // Set position on marker move
+ google.maps.event.addListener(_self.vars.marker, 'dragend', function(event) {
+ setPosition(_self.vars.marker.position);
+ });
+
+ // Set zoom feld's value when user changes zoom on the map
+ google.maps.event.addListener(_self.vars.map, 'zoom_changed', function(event) {
+ $(_self.vars.cssID + ".gllpZoom").val( _self.vars.map.getZoom() );
+ $(_self.vars.cssID).trigger("location_changed", $(_self.vars.cssID));
+ });
+
+ // Update location and zoom values based on input field's value
+ $(_self.vars.cssID + ".gllpUpdateButton").bind("click", function() {
+ var lat = $(_self.vars.cssID + ".gllpLatitude").val();
+ var lng = $(_self.vars.cssID + ".gllpLongitude").val();
+ var latlng = new google.maps.LatLng(lat, lng);
+ _self.vars.map.setZoom( parseInt( $(_self.vars.cssID + ".gllpZoom").val() ) );
+ setPosition(latlng);
+ });
+
+ // Search function by search button
+ $(_self.vars.cssID + ".gllpSearchButton").bind("click", function() {
+ performSearch( $(_self.vars.cssID + ".gllpSearchField").val(), false );
+ });
+
+ // Search function by gllp_perform_search listener
+ $(document).bind("gllp_perform_search", function(event, object) {
+ performSearch( $(object).attr('string'), true );
+ });
+
+ // Zoom function triggered by gllp_perform_zoom listener
+ $(document).bind("gllp_update_fields", function(event) {
+ var lat = $(_self.vars.cssID + ".gllpLatitude").val();
+ var lng = $(_self.vars.cssID + ".gllpLongitude").val();
+ var latlng = new google.maps.LatLng(lat, lng);
+ _self.vars.map.setZoom( parseInt( $(_self.vars.cssID + ".gllpZoom").val() ) );
+ setPosition(latlng);
+ });
+
+ /* local modification */
+ window.gMapsLatLonPickerState[_self.vars.ID] =
+ {
+ vars : _self.vars,
+ params : _self.params
+ };
+ } // publicfunc
+
+ }
+
+ return publicfunc;
+});
+
+}(jQuery));
+
+$(document).ready( function() {
+ $(".gllpLatlonPicker").each(function() {
+ $(document).gMapsLatLonPicker().init( $(this) );
+ });
+});
+
+$(document).bind("location_changed", function(event, object) {
+ console.log("changed: " + $(object).attr('id') );
+});