百度地图点击添加地点

Thinkadmin后台前端百度地图点击添加地点

项目需求

面试时的面试题,整理一下,我是后台的,前端知识不是很懂.欢迎指导!
引入百度地图,需要显示杭州地区的人员分布情况,项目地点可自定义;

显示样子

1.首页样子
在这里插入图片描述
点击效果
在这里插入图片描述
json数据格式
在这里插入图片描述

前端代码

1.HTML部分

<!-- 地图 -->
<div id="allmap" style="height: 600px;width: 100%;overflow: hidden;margin-top:20px;font-family:'微软雅黑';"></div>

2.JS部分

<!-- 地图 -->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0& ak=你需要申请的密钥"></script>
<script type="text/javascript">
points = new Array();
var points = {:json_encode($place)};//后台传过来的json数组,用于默认显示
//创建标注点并添加到地图中
function addMarker(points) {
    //循环建立标注点
    for(var i=0, pointsLen = points.length; i<pointsLen; i++) {
        var point = new BMap.Point(points[i].lng, points[i].lat); //将标注点转化成地图上的点
        var marker = new BMap.Marker(point); //将点转化成标注点
        map.addOverlay(marker);  //将标注点添加到地图上
        //添加监听事件
        (function() {
            var thePoint = points[i];
            marker.addEventListener("click",
                function() {
                showInfo(this,thePoint);
            });
         })();  
    }
}
function showInfo(thisMarker,point) {
    //获取点的信息
    var sContent = 
    '<ul style="margin:0 0 5px 0;padding:0.2em 0">'  
    +'<li style="line-height: 26px;font-size: 15px;">'   
    +'<li style="line-height: 26px;font-size: 15px;">'  
    +'<span style="width: 50px;display: inline-block;">名称:</span>' + point.name + '</li>'  
    +'<li style="line-height: 26px;font-size: 15px;"><span style="width: 50px;display: inline-block;">操作</span><a onclick="place_del('+point.id+')">删除</a></li>'  
    +'</ul>';
    var infoWindow = new BMap.InfoWindow(sContent); //创建信息窗口对象
    thisMarker.openInfoWindow(infoWindow); //图片加载完后重绘infoWindow
}
    //创建地图
    var map = new BMap.Map("allmap");    
    map.centerAndZoom(new BMap.Point(120.200,30.267), 9);  // 设置中心点
    map.centerAndZoom("杭州");
    map.setCurrentCity("杭州");          
    map.addControl(new BMap.MapTypeControl());   
    map.enableScrollWheelZoom(true);     
    addMarker(points);
    var point = new BMap.Point();//当前坐标经纬可改
    map.centerAndZoom(point,17);//显示级数越大越细
    map.addOverlay(new BMap.Marker(point));//定点坐标红点覆盖
    var geoc = new BMap.Geocoder();    

    // 创建新的地点
    map.addEventListener("click", function(e){   
        //通过点击百度地图,可以获取到对应的point, 由point的lng、lat属性就可以获取对应的经度纬度     
        var pt = e.point;
        geoc.getLocation(pt, function(rs){
            //addressComponents对象可以获取到详细的地址信息
            var addComp = rs.addressComponents;
            var site = addComp.district
            //将对应的HTML元素设置值
            //弹出表单
             var str = '<div class="layui-card-body padding-left-40">'+
                    '<fieldset class="layui-form-item layui-row layui-col-space10">'+
                        '<label class="layui-col-xs4 relative block">'+
                            '<span class="color-green font-w7">地点名称</span>'+
                            '<input name="name" autocomplete="off" value='+site+' placeholder="请输入地点名称" class="layui-input">'+
                        '</label>'+
                        '<label class="layui-col-xs4 relative block">'+
                            '<span class="color-green font-w7">经度</span>'+
                            '<span class="color-desc margin-left-5">lng</span>'+
                            '<input type="text" autocomplete="off" name="lng" value='+pt.lng+' placeholder="请输入经度" class="layui-input">'+
                        '</label>'+
                        '<label class="layui-col-xs4 relative block">'+
                            '<span class="color-green font-w7">纬度</span>'+
                            '<span class="color-desc margin-left-5">lat</span>'+
                            '<input name="lat" autocomplete="off"  value='+pt.lat+' placeholder="请输入纬度" class="layui-input">'+
                        '</label>'+
                    '</fieldset>'+
                    '</div>'
                    //弹窗AJAX提交
                layer.open({
                    type: 1,
                    title: '新建地点',
                    area: ['750px', 'auto'],
                    content: str,
                    btn: ['确认', '取消'],
                    btn1: function (index, layero) {
                        var name = $("input[name ='name']").val();
                        var lng = $("input[name ='lng']").val();
                        var lat = $("input[name ='lat']").val();
                        if (name == ''||lng == ''||lat == '') {
                            layer.msg('请输入信息!', {icon: 1, time: 1000});
                            return false;
                        }
                        $.ajax({
                            type: 'POST',
                            url: "{:url('add_place')}",
                            data: {"name": name, "lng": lng, "lat": lat},
                            success: function (data) {
                                if (data.code == 1) {
                                    layer.msg(data.info,{icon:1,time:3000},function(){
                                        location.reload() ;
                                    });
                                } else {
                                    layer.msg(data.info,{icon:1,time:3000},function(){
                                        location.reload() ;
                                    });
                                }
                            }
                        })
                    },
                    btn2: function (index, layero) {
                        layer.close(index);
                    }
                })
        });             
    });
    // 删除地点
    function place_del(obj){
    layer.confirm('确认要删除该地点?',function(index){
        $.ajax({
            type: 'POST',
            url: "{:url('place_del')}",
            data: {"id":obj},
            dataType: 'json',
            success: function(data){
                if (data.code == 1){
                    layer.msg(data.info,{icon:1,time:3000},function(){
                        location.reload() ;
                    });
                }else{
                    layer.msg(data.info,{icon:1,time:3000},function(){
                        location.reload() ;
                    });
                }

            },
            error:function(data) {
               layer.msg(data.info,{icon:1,time:3000},function(){
                    location.reload() ;
                });
            },
        });
    });
}
</script>

后台代码

	/**
     * 显示后台首页
     */
    public function index()
    {
        $place = $this->app->db->name('ZwPlace')->select()->toArray();//地图数据
        $this->assign('place',$place);
        $this->fetch();
    }

    /**
     * 添加地点
     */
    public function add_place()
    {
       
        $post = $this->request->post();
        $post['create_time'] = date('Y-m-d H:i:s',time());
        $res = $this->app->db->name('ZwPlace')->insert($post);
        if($res){
            $this->success('添加成功!');
        }else{
            $this->error('添加失败 !');
        }
    }

    /**
     * 删除地点
     */
    public function place_del()
    {
       
        $id = $this->request->post('id');
        $res = $this->app->db->name('ZwPlace')->where('id',$id)->delete();
        if($res){
            $this->success('删除成功!');
        }else{
            $this->error('删除失败 !');
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值