Переглянути джерело

Merge pull request #402 from MrKaGod/baiduMap

增加百度地图组件,更换默认地图,防止用户没有翻墙,加载google地图组件慢
Jiang Qinghua 4 роки тому
батько
коміт
cde0a3dc9b
1 змінених файлів з 82 додано та 2 видалено
  1. 82 2
      src/Form/Field/Map.php

+ 82 - 2
src/Form/Field/Map.php

@@ -31,8 +31,11 @@ class Map extends Field
             case 'yandex':
                 $js = '//api-maps.yandex.ru/2.1/?lang=ru_RU';
                 break;
+            case 'baidu':
+                $js = '//api.map.baidu.com/api?v=2.0&ak=' . env('BAIDU_MAP_API_KEY');
+                break;
             default:
-                $js = '//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key='.env('GOOGLE_API_KEY');
+                $js = '//api.map.baidu.com/api?v=2.0&ak=' . env('BAIDU_MAP_API_KEY');
         }
 
         Admin::js($js);
@@ -62,8 +65,11 @@ class Map extends Field
             case 'yandex':
                 $this->useYandexMap();
                 break;
+            case 'baidu':
+                $this->useBaiduMap();
+                break;
             default:
-                $this->useGoogleMap();
+                $this->useBaiduMap();
         }
     }
 
@@ -191,4 +197,78 @@ JS;
         })();
 JS;
     }
+
+    public function useBaiduMap()
+    {
+        $this->script = <<<JS
+        (function() {
+            function initBaiduMap(name) {
+                var lat = $('#{$this->id['lat']}');
+                var lng = $('#{$this->id['lng']}');
+
+                var map = new BMap.Map("map_"+name);
+                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" : "search-{$this->id['lat']}{$this->id['lng']}"
+                    ,"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('{$this->id['lat']}{$this->id['lng']}');
+        })()
+JS;
+
+    }
 }