column['lat'] = (string) $column; $this->column['lng'] = (string) $arguments[0]; array_shift($arguments); $this->label = $this->formatLabel($arguments); $this->id = $this->formatId($this->column); /* * Google map is blocked in mainland China * people in China can use Tencent map instead(; */ switch (config('admin.map_provider')) { case 'tencent': $this->useTencentMap(); break; case 'google': $this->useGoogleMap(); break; case 'yandex': $this->useYandexMap(); break; default: $this->useGoogleMap(); } } public function useGoogleMap() { $this->script = <<id['lat']}'); var lng = $('#{$this->id['lng']}'); var LatLng = new google.maps.LatLng(lat.val(), lng.val()); var options = { zoom: 13, center: LatLng, panControl: false, zoomControl: true, scaleControl: true, mapTypeId: google.maps.MapTypeId.ROADMAP } var container = document.getElementById("map_"+name); var map = new google.maps.Map(container, options); var marker = new google.maps.Marker({ position: LatLng, map: map, title: 'Drag Me!', draggable: true }); google.maps.event.addListener(marker, 'dragend', function (event) { lat.val(event.latLng.lat()); lng.val(event.latLng.lng()); }); } initGoogleMap('{$this->id['lat']}{$this->id['lng']}'); })(); JS; } public function useTencentMap() { $this->script = <<id['lat']}'); var lng = $('#{$this->id['lng']}'); var center = new qq.maps.LatLng(lat.val(), lng.val()); var container = document.getElementById("map_"+name); var map = new qq.maps.Map(container, { center: center, zoom: 13 }); var marker = new qq.maps.Marker({ position: center, draggable: true, map: map }); if( ! lat.val() || ! lng.val()) { var citylocation = new qq.maps.CityService({ complete : function(result){ map.setCenter(result.detail.latLng); marker.setPosition(result.detail.latLng); } }); citylocation.searchLocalCity(); } qq.maps.event.addListener(map, 'click', function(event) { marker.setPosition(event.latLng); }); qq.maps.event.addListener(marker, 'position_changed', function(event) { var position = marker.getPosition(); lat.val(position.getLat()); lng.val(position.getLng()); }); } initTencentMap('{$this->id['lat']}{$this->id['lng']}'); })(); JS; } public function useYandexMap() { $this->script = <<id['lat']}'); var lng = $('#{$this->id['lng']}'); var myMap = new ymaps.Map("map_"+name, { center: [lat.val(), lng.val()], zoom: 18 }); var myPlacemark = new ymaps.Placemark([lat.val(), lng.val()], { }, { preset: 'islands#redDotIcon', draggable: true }); myPlacemark.events.add(['dragend'], function (e) { lat.val(myPlacemark.geometry.getCoordinates()[0]); lng.val(myPlacemark.geometry.getCoordinates()[1]); }); myMap.geoObjects.add(myPlacemark); }); } initYandexMap('{$this->id['lat']}{$this->id['lng']}'); })(); JS; } }