<style> .amap-icon img, .amap-marker-content img{ width: 25px; height: 34px; } </style> <div class="{{$viewClass['form-group']}}"> <label class="{{$viewClass['label']}} control-label">{!! $label !!}</label> <div class="{{$viewClass['field']}}"> @include('admin::form.error') @if($type === 'baidu' || $type === 'amap') <div class="row mb-1"> <div class="col-md-5 col-md-offset-3"> <div class="input-group"> <input type="text" placeholder="{{ trans('admin.search') }}" class="form-control" id="{{ $searchId }}"> @if($type === 'baidu') <span class="input-group-btn"> <button type="button" class="btn btn-primary btn-flat"><i class="fa fa-search"></i></button> </span> @endif </div> </div> </div> @endif <div class="{{ $class }}"> <div class="form-map" style="width: 100%;height: {{ $height }}"></div> <input type="hidden" class="form-lat" name="{{ $name['lat'] }}" value="{{ $value['lat'] ?? null }}" {!! $attributes !!} /> <input type="hidden" class="form-lng" name="{{$name['lng']}}" value="{{ $value['lng'] ?? null }}" {!! $attributes !!} /> </div> @include('admin::form.help-block') </div> </div> <script init="{!! $selector !!}"> var lat = $this.find('.form-lat'), lng = $this.find('.form-lng'), container = $this.find('.form-map'), mapId = "_" + Dcat.helpers.random(); container.attr('id', mapId); @if($type === 'google') function initGoogleMap() { 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 map = new google.maps.Map(container[0], 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(); @endif @if($type === 'tencent') function initTencentMap() { var center = new qq.maps.LatLng(lat.val(), lng.val()); var map = new qq.maps.Map(container[0], { 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(); @endif @if($type === 'yandex') function initYandexMap() { ymaps.ready(function(){ var myMap = new ymaps.Map(mapId, { 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(); @endif @if($type === 'baidu') function initBaiduMap() { var map = new BMap.Map(mapId); var point = new BMap.Point(lng.val(), lat.val()); map.centerAndZoom(point, 15); map.enableScrollWheelZoom(true); var marker = new BMap.Marker(point); map.addOverlay(marker); marker.enableDragging(); if (! lat.val() || ! lng.val()) { var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(e){ if (this.getStatus() == BMAP_STATUS_SUCCESS) { map.panTo(e.point); marker.setPosition(e.point); lat.val(e.point.lat); lng.val(e.point.lng); } else { console.log('failed'+this.getStatus()); } },{enableHighAccuracy: true}) } map.addEventListener("click", function(e) { marker.setPosition(e.point); lat.val(e.point.lat); lng.val(e.point.lng); }); marker.addEventListener("dragend", function(e) { lat.val(e.point.lat); lng.val(e.point.lng); }); var ac = new BMap.Autocomplete( {"input" : "{{ $searchId }}" ,"location" : map }); var address; ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件 var _value = e.item.value; address = _value.province + _value.city + _value.district + _value.street + _value.business; setPlace(); }); function setPlace() { function myFun() { var pp = local.getResults().getPoi(0).point; map.centerAndZoom(pp, 15); marker.setPosition(pp); lat.val(pp.lat); lng.val(pp.lng); } var local = new BMap.LocalSearch(map, { onSearchComplete: myFun }); local.search(address); } } initBaiduMap(); @endif @if($type === 'amap') function initAmap(){ var map = new AMap.Map(container[0], { resizeEnable: true, center: lng.val() && lat.val() ? [lng.val(), lat.val()] : null, zoom: 14 }); var marker = new AMap.Marker({ position: new AMap.LngLat(lng.val(), lat.val()), draggable: true, map:map, icon:'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png', zoom:15 }); if (!lng.val() || !lat.val()){ var geolocation = new AMap.Geolocation({ enableHighAccuracy: true, zoomToAccuracy: true, buttonPosition: 'RB' }) geolocation.getCurrentPosition(function (status,result){ if (status === 'complete'){ var point = new AMap.LngLat(result.position.lng, result.position.lat); map.setCenter(point); map.setZoom(15); marker.setPosition(point) lat.val(result.position.lat); lng.val(result.position.lng); } }) } //输入提示 var auto = new AMap.Autocomplete({ input: "{{$searchId}}" }); var placeSearch = new AMap.PlaceSearch({ map: map }); AMap.event.addListener(auto, "select", function (e){ placeSearch.setCity(e.poi.adcode); placeSearch.search(e.poi.name); }); AMap.event.addListener(placeSearch, "markerClick", function (e){ let point = new AMap.LngLat(e.data.location.lng, e.data.location.lat); marker.setPosition(point) lat.val(e.data.location.lat); lng.val(e.data.location.lng); }); marker.on('dragend',function (e){ lat.val(e.lnglat.lat); lng.val(e.lnglat.lng); }); map.on('click',function (e){ if (e.type === 'click'){ let point = new AMap.LngLat(e.lnglat.lng, e.lnglat.lat); marker.setPosition(point) lat.val(e.lnglat.lat); lng.val(e.lnglat.lng); } }) } initAmap(); @endif </script>