map.blade.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <style>
  2. .amap-icon img,
  3. .amap-marker-content img{
  4. width: 25px;
  5. height: 34px;
  6. }
  7. </style>
  8. <div class="{{$viewClass['form-group']}}">
  9. <label class="{{$viewClass['label']}} control-label">{!! $label !!}</label>
  10. <div class="{{$viewClass['field']}}">
  11. @include('admin::form.error')
  12. @if($type === 'baidu' || $type === 'amap')
  13. <div class="row mb-1">
  14. <div class="col-md-5 col-md-offset-3">
  15. <div class="input-group">
  16. <input type="text" placeholder="{{ trans('admin.search') }}" class="form-control" id="{{ $searchId }}">
  17. @if($type === 'baidu')
  18. <span class="input-group-btn">
  19. <button type="button" class="btn btn-primary btn-flat"><i class="fa fa-search"></i></button>
  20. </span>
  21. @endif
  22. </div>
  23. </div>
  24. </div>
  25. @endif
  26. <div class="{{ $class }}">
  27. <div class="form-map" style="width: 100%;height: {{ $height }}"></div>
  28. <input type="hidden" class="form-lat" name="{{ $name['lat'] }}" value="{{ $value['lat'] ?? null }}" {!! $attributes !!} />
  29. <input type="hidden" class="form-lng" name="{{$name['lng']}}" value="{{ $value['lng'] ?? null }}" {!! $attributes !!} />
  30. </div>
  31. @include('admin::form.help-block')
  32. </div>
  33. </div>
  34. <script init="{!! $selector !!}">
  35. var lat = $this.find('.form-lat'),
  36. lng = $this.find('.form-lng'),
  37. container = $this.find('.form-map'),
  38. mapId = "_" + Dcat.helpers.random();
  39. container.attr('id', mapId);
  40. @if($type === 'google')
  41. function initGoogleMap() {
  42. var LatLng = new google.maps.LatLng(lat.val(), lng.val());
  43. var options = {
  44. zoom: 13,
  45. center: LatLng,
  46. panControl: false,
  47. zoomControl: true,
  48. scaleControl: true,
  49. mapTypeId: google.maps.MapTypeId.ROADMAP
  50. }
  51. var map = new google.maps.Map(container[0], options);
  52. var marker = new google.maps.Marker({
  53. position: LatLng,
  54. map: map,
  55. title: 'Drag Me!',
  56. draggable: true
  57. });
  58. google.maps.event.addListener(marker, 'dragend', function (event) {
  59. lat.val(event.latLng.lat());
  60. lng.val(event.latLng.lng());
  61. });
  62. }
  63. initGoogleMap();
  64. @endif
  65. @if($type === 'tencent')
  66. function initTencentMap() {
  67. var center = new qq.maps.LatLng(lat.val(), lng.val());
  68. var map = new qq.maps.Map(container[0], {
  69. center: center,
  70. zoom: 13
  71. });
  72. var marker = new qq.maps.Marker({
  73. position: center,
  74. draggable: true,
  75. map: map
  76. });
  77. if( ! lat.val() || ! lng.val()) {
  78. var citylocation = new qq.maps.CityService({
  79. complete : function(result){
  80. map.setCenter(result.detail.latLng);
  81. marker.setPosition(result.detail.latLng);
  82. }
  83. });
  84. citylocation.searchLocalCity();
  85. }
  86. qq.maps.event.addListener(map, 'click', function(event) {
  87. marker.setPosition(event.latLng);
  88. });
  89. qq.maps.event.addListener(marker, 'position_changed', function(event) {
  90. var position = marker.getPosition();
  91. lat.val(position.getLat());
  92. lng.val(position.getLng());
  93. });
  94. }
  95. initTencentMap();
  96. @endif
  97. @if($type === 'yandex')
  98. function initYandexMap() {
  99. ymaps.ready(function(){
  100. var myMap = new ymaps.Map(mapId, {
  101. center: [lat.val(), lng.val()],
  102. zoom: 18
  103. });
  104. var myPlacemark = new ymaps.Placemark([lat.val(), lng.val()], {
  105. }, {
  106. preset: 'islands#redDotIcon',
  107. draggable: true
  108. });
  109. myPlacemark.events.add(['dragend'], function (e) {
  110. lat.val(myPlacemark.geometry.getCoordinates()[0]);
  111. lng.val(myPlacemark.geometry.getCoordinates()[1]);
  112. });
  113. myMap.geoObjects.add(myPlacemark);
  114. });
  115. }
  116. initYandexMap();
  117. @endif
  118. @if($type === 'baidu')
  119. function initBaiduMap() {
  120. var map = new BMap.Map(mapId);
  121. var point = new BMap.Point(lng.val(), lat.val());
  122. map.centerAndZoom(point, 15);
  123. map.enableScrollWheelZoom(true);
  124. var marker = new BMap.Marker(point);
  125. map.addOverlay(marker);
  126. marker.enableDragging();
  127. if (! lat.val() || ! lng.val()) {
  128. var geolocation = new BMap.Geolocation();
  129. geolocation.getCurrentPosition(function(e){
  130. if (this.getStatus() == BMAP_STATUS_SUCCESS) {
  131. map.panTo(e.point);
  132. marker.setPosition(e.point);
  133. lat.val(e.point.lat);
  134. lng.val(e.point.lng);
  135. } else {
  136. console.log('failed'+this.getStatus());
  137. }
  138. },{enableHighAccuracy: true})
  139. }
  140. map.addEventListener("click", function(e) {
  141. marker.setPosition(e.point);
  142. lat.val(e.point.lat);
  143. lng.val(e.point.lng);
  144. });
  145. marker.addEventListener("dragend", function(e) {
  146. lat.val(e.point.lat);
  147. lng.val(e.point.lng);
  148. });
  149. var ac = new BMap.Autocomplete(
  150. {"input" : "{{ $searchId }}"
  151. ,"location" : map
  152. });
  153. var address;
  154. ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
  155. var _value = e.item.value;
  156. address = _value.province + _value.city + _value.district + _value.street + _value.business;
  157. setPlace();
  158. });
  159. function setPlace() {
  160. function myFun() {
  161. var pp = local.getResults().getPoi(0).point;
  162. map.centerAndZoom(pp, 15);
  163. marker.setPosition(pp);
  164. lat.val(pp.lat);
  165. lng.val(pp.lng);
  166. }
  167. var local = new BMap.LocalSearch(map, {
  168. onSearchComplete: myFun
  169. });
  170. local.search(address);
  171. }
  172. }
  173. initBaiduMap();
  174. @endif
  175. @if($type === 'amap')
  176. function initAmap(){
  177. var map = new AMap.Map(container[0], {
  178. resizeEnable: true,
  179. center: lng.val() && lat.val() ? [lng.val(), lat.val()] : null,
  180. zoom: 14
  181. });
  182. var marker = new AMap.Marker({
  183. position: new AMap.LngLat(lng.val(), lat.val()),
  184. draggable: true,
  185. map:map,
  186. icon:'//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
  187. zoom:15
  188. });
  189. if (!lng.val() || !lat.val()){
  190. var geolocation = new AMap.Geolocation({
  191. enableHighAccuracy: true,
  192. zoomToAccuracy: true,
  193. buttonPosition: 'RB'
  194. })
  195. geolocation.getCurrentPosition(function (status,result){
  196. if (status === 'complete'){
  197. var point = new AMap.LngLat(result.position.lng, result.position.lat);
  198. map.setCenter(point);
  199. map.setZoom(15);
  200. marker.setPosition(point)
  201. lat.val(result.position.lat);
  202. lng.val(result.position.lng);
  203. }
  204. })
  205. }
  206. //输入提示
  207. var auto = new AMap.Autocomplete({
  208. input: "{{$searchId}}"
  209. });
  210. var placeSearch = new AMap.PlaceSearch({
  211. map: map
  212. });
  213. AMap.event.addListener(auto, "select", function (e){
  214. placeSearch.setCity(e.poi.adcode);
  215. placeSearch.search(e.poi.name);
  216. });
  217. AMap.event.addListener(placeSearch, "markerClick", function (e){
  218. let point = new AMap.LngLat(e.data.location.lng, e.data.location.lat);
  219. marker.setPosition(point)
  220. lat.val(e.data.location.lat);
  221. lng.val(e.data.location.lng);
  222. });
  223. marker.on('dragend',function (e){
  224. lat.val(e.lnglat.lat);
  225. lng.val(e.lnglat.lng);
  226. });
  227. map.on('click',function (e){
  228. if (e.type === 'click'){
  229. let point = new AMap.LngLat(e.lnglat.lng, e.lnglat.lat);
  230. marker.setPosition(point)
  231. lat.val(e.lnglat.lat);
  232. lng.val(e.lnglat.lng);
  233. }
  234. })
  235. }
  236. initAmap();
  237. @endif
  238. </script>