var geocoder; $(document).ready(function () { geocoder = new google.maps.Geocoder(); map.addControl(new L.Control.Search({ sourceData: googleGeocoding, formatData: formatJSON, markerLocation: true, autoType: false, autoCollapse: true, minLength: 2, position: 'topright' })); $('.search-button').on('click', function () { if (loc) { drawMarker(); setDataValue(); } }); $('.search-input').on('keypress', function (e) { if (e.keyCode == 13 && loc) { e.preventDefault(); e.stopPropagation(); drawMarker(); setDataValue(); } }); map.on('zoomend', function () { setDataValue(); }); map.on('click', function (e) { loc = new L.latLng(e.latlng); drawMarker(); setDataValue(); }); }); function setDataValue() { var jsonParseData = {}; var dataValue = $('[name$="[extraData]"]').val(); if (dataValue) { jsonParseData = JSON.parse(dataValue); } jsonParseData.lat = marker._latlng.lat; jsonParseData.lng = marker._latlng.lng; jsonParseData.zoom = map.getZoom(); var stringifyData = JSON.stringify(jsonParseData); $('[name$="[extraData]"]').val(stringifyData); $('[name$="[map]"]').val(stringifyData); } function googleGeocoding(text, callResponse) { geocoder.geocode({address: text}, callResponse); } function formatJSON(rawjson) { var json = {}, key; for (var i in rawjson) { key = rawjson[i].formatted_address; loc = new L.latLng(rawjson[i].geometry.location.lat(), rawjson[i].geometry.location.lng()); json[key] = loc; } return json; }