column['lat'] = $column; $this->column['lng'] = $arguments[0]; $this->addressInput = $arguments[2] ?? 'myAddress'; 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(; */ if (config('app.locale') == 'zh-CN') { $this->useTencentMap(); } else { $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']}'); EOT; } public function useTencentMap() { $this->script = <<id['lat']}'); var lng = $('#{$this->id['lng']}'); var inputAddress = $('#{$this->addressInput}'); 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()); }); var callbacks={ complete:function(results){ map.setCenter(results.detail.location); marker.setPosition(results.detail.location); }, } var geocoder = new qq.maps.Geocoder(callbacks); inputAddress.change(function () { geocoder.getLocation($(this).val()); }); } initTencentMap('{$this->id['lat']}{$this->id['lng']}'); EOT; } }