精华内容
下载资源
问答
  • 保证没有任何功能限制 电脑离线电子地图标注软件主要功能如下:可以标注位置,可以搜索地图上本来有的位置和标注的位置,可以把某个标注的位置显示在地图中心。软件支持电脑在线下载地图后(离线)地图查看浏览, 1....
  • 百度地图标注地址

    2017-09-05 09:10:07
    百度地图标注地址 内含 用地名匹配经纬度方法 点击地图获取经纬度 相关信息赋予标注点 地图全屏(非浏览器方法) 以及相关地图控件 上代码: jsp inculde页面:               ...

    百度地图标注地址

    内含 用地名匹配经纬度方法  点击地图获取经纬度   相关信息赋予标注点    地图全屏(非浏览器方法)   以及相关地图控件


    上代码:

    jsp  inculde页面:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <html>
    <head>
      <script type="text/javascript" src="resource/js/jquery.js"></script>
    <script type="text/javascript" src="resource/js/jqueryEasyUI/jquery.easyui.js"></script>
      <link href="resource/js/jqueryEasyUI/themes/default/easyui.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" href="resource/js/jqueryEasyUI/themes/icon.css" type="text/css"></link>
          <script type="text/javascript" src="resource/js/common/validate.js"></script>
    <script type="text/javascript" src="resource/js/common/jquery.mask.js"></script>
    <script type="text/javascript" src="resource/js/zTree/jquery.ztree.js"></script>
    <link href="resource/js/zTree/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="resource/js/common/groupSelTree.js"></script>
    <script type="text/javascript" src="resource/js/My97DatePicker/WdatePicker.js"></script> 
      <link href="resource/css/rcms_edit.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" type="text/css" href="resource/css/list.css" media="all" />
    </head>
    <body >
    <div  id="test1" class="bodyDiv" >
    <!-- 地图标注 -->
    <div id="one">
          <jsp:include page="dzdt_edit.jsp"></jsp:include>
          </div>
          <div id="two">
          <!-- 地图浏览 -->
          <jsp:include page="dzdt_map.jsp"></jsp:include>
          </div>
    </div>
    </body>
    </html>






    地图信息编辑模块:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <html>
      <head>
         <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=FtppmMikPUX6swgTT3L75eKXX6j1ZsRC"></script>  
        <script type="text/javascript" src="resource/js/jquery.js"></script>
    <script type="text/javascript" src="resource/js/jqueryEasyUI/jquery.easyui.js"></script>
      <link href="resource/js/jqueryEasyUI/themes/default/easyui.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" href="resource/js/jqueryEasyUI/themes/icon.css" type="text/css"></link>
          <script type="text/javascript" src="resource/js/common/validate.js"></script>
    <script type="text/javascript" src="resource/js/common/jquery.mask.js"></script>
    <script type="text/javascript" src="resource/js/zTree/jquery.ztree.js"></script>
    <link href="resource/js/zTree/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="resource/js/common/groupSelTree.js"></script>
      <link href="resource/css/rcms_edit.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" type="text/css" href="resource/css/list.css" media="all" />
      </head>
      <script type="text/javascript">
      var strRight = '<c:forEach var="op" items="${opList}" varStatus="s"><c:if test="${s.index > 0}">,</c:if><c:out value="${op}" /></c:forEach>';/*opList对象是一个按钮权限  */
      var model='<c:out value="${MODEL_CODE}" />';
      
      /* 刷新方法 */
    function  refesh(){
      window.location.reload();
    }
      
      /*设置全局变量  从库中拿取数据以便后面判断打印不能打印未保存数据*/
      var model="${MODEL_CODE}";
      var qymc="${dt.qymc}";  
      var zs="${dt.zs}" ;
      var qrr="${dt.qrr}";
      var qrrlxdh="${dt.qrrlxdh}";
      var fr="${dt.fr}";
      var frlxdh="${dt.frlxdh}";
      
      $.extend($.fn.validatebox.defaults.rules, {      
     phone: {// 验证电话号码
              validator: function (value) {
                  return /(^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$)|(^(13|15|18)\d{9}$)|(^(\s*)$)/i.test(value);
              },
              message: '格式不正确,请使用座机格式:020-88888888 或者 手机号码格式'                                   
          },
    });

      /* 页面一刷新,将之前页面数据保留在输入框中 */
    $(function (){
    $('#zs').val("${dt.zs}"); 
    $('#qymc').val("${dt.qymc}"); 
    $('#jd').val("${dt.zbjd}");
    $('#wd').val("${dt.zbwd}");
    $('#qrr').val("${dt.qrr}");
    $('#qrrlxdh').val("${dt.qrrlxdh}");
    $('#fr').val("${dt.fr}");
    $('#frlxdh').val("${dt.frlxdh}");
    $('#wtdlr').val("${dt.wtdlr}");
    $('#wtdllxdh').val("${dt.wtdllxdh}");
     });
      

    function openSubjectNameDialog()
    {
    top.toSelList
    (
    model+'!toCompanyChoose.action',   // 查询的市场主体名称
      '选择市场主体名称',
       1 ,
    function(arrayTitle,curContent)       /* 0:id 1:wybm 2:qymc 3:zs  4:zbjd 5:zbwd   6:scztlxr    7:scztlxdh 8:qrr 9:qrrlxdh 10:qrsj 11:jtms 12:fr  13:frlxdh */
    {
    $('#id').val(curContent[0][0]);
    $('#cx').val(curContent[0][3]);  
    $('#zs').val(curContent[0][9]); 
    $('#qymc').val(curContent[0][3]);
     
    $('#fr').val(curContent[0][6]);
    $('#frlxdh').val(curContent[0][22]); 
    // $('#jd').val(curContent[0][4]);
    // $('#wd').val(curContent[0][5]);
     
    /* 企业选择后定位 */
    var  jd= $('#jd').val();
    if(jd.length>0){
      var wd= $('#wd').val();
      var point = new BMap.Point(jd, wd);   //创地图对象,设置上已经添加的经纬度
         map.centerAndZoom(point,20); // 初始化地图d
         addMarker(point);  //标注初始化经纬度
         /* 地图文字标注 */
        var fr= $('#fr').val();
         var frlxdh=$('#frlxdh').val();
      var zs= $('#zs').val(); 
       var opts = {
           position : point,    // 指定文本标注所在的地理位置
           offset   : new BMap.Size(30, -30)    //设置文本偏移量
         };
       
       var label = new BMap.Label("法定代表人:"+fr+"<br/>"  +"法定代表人联系电话:"+frlxdh+"<br/>" +"经营地址:"+zs, opts);  // 创建文本标注对象
           label.setStyle({       
                color : "black",
                fontSize : "12px",
            });
       map.addOverlay(label);  
    }
    }
    );
    }
     


    /* 清空功能 */
    function clearSearch(){
    $("#cx").val("");
    $("#qymc").val("");
    $("#zs").val("");
    $("#qrr").val("");
    $("#qrrlxdh").val("");
    $("#fr").val("");
    $("#frlxdh").val("");
    }
     


    /* 打印页面 &&判断企业是否已经保存*/
    function  open_printWindow(){

    var input_zs=$('#zs').val(); 
    /* var input_scztlxr=$('#scztlxr').val();
    var input_scztlxdh= $('#scztlxdh').val();
    var input_qrr=$('#qrr').val();
    var input_qrrlxdh= $('#qrrlxdh').val();
    var input_fr=$('#fr').val();
    var input_frlxdh= $('#frlxdh').val(); */
    var input_qymc=$('#qymc').val();

    if(checkspace(document.mainForm.qymc.value)) {
    document.mainForm.qymc.focus();
    alert("未填写市场主体名称!");
    return false;
    }
    /* if(checkspace(document.mainForm.scztlxr.value)) {
    document.mainForm.scztlxr.focus();
    alert("未填写市场主体联系人姓名!");
    return false;
    }
    //联系方式合法性验证 
    if(checkspace(document.mainForm.scztlxdh.value)) {
    document.mainForm.scztlxdh.focus();
    alert("未填写市场主体联系电话!");
    return false;
    } */
     
    /*  if(checkphone(document.mainForm.scztlxdh.value)) {
    document.mainForm.scztlxdh.focus();
    alert("未填写市场主体联系");
    return false;
    } */
     
    /* if(checkspace(document.mainForm.frlxdh.value)) {
    document.mainForm.frlxdh.focus();
    alert("未填写法定代表人联系电话!");
    return false;
    }
     */
    if(checkphone(document.mainForm.frlxdh.value)) {
    document.mainForm.frlxdh.focus();
    alert("未填写法定代表人联系电话");
    return false;
    }
     
    /*  if(checkspace(document.mainForm.fr.value)) {
    document.mainForm.fr.focus();
    alert("未填写法人代表姓名!");
    return false;
    } */
    /*  
    if(checkspace(document.mainForm.qrr.value)) {
    document.mainForm.qrr.focus();
    alert("未填写确认人姓名!");
    return false;
    }
     */
    /* if(checkspace(document.mainForm.qrrlxdh.value)) {
    document.mainForm.qrrlxdh.focus();
    alert("未填写确认人联系电话!");
    return false;
    } */
     
    if(checkphone(document.mainForm.qrrlxdh.value)) {
    document.mainForm.qrrlxdh.focus();
    alert("未填写确认人联系电话!");
    return false;
    }
     
    if(checkspace(document.mainForm.zs.value)) {
    document.mainForm.zs.focus();
    alert("未填写公司经营地址!");
    return false;
    }


    if(${dt.printState!=1}){ // 打印状态不等于1  打印前

    if(confirm("确定打印后,数据将不能再保存")){
    /* 判断是否为空,或者库 */
     if(qymc==undefined||qymc==""||qymc==null||qymc!=input_qymc||
     zs==undefined||zs==""||zs==null||zs!=input_zs){  
    alert("企业配置未保存,无法打印");
    }else{
    var id="${id}";
    window.open("dzdt!printPage.action?id="+id);
    refesh();
    }
    }
    }else{            //打印后
    var id="${id}";
    window.open("dzdt!printPage.action?id="+id);
     refesh();
          
    }
    }
     
    /* 判断是否为空,判断数据库中是否有值 */
     
    /*  普通字段必填功能*/
    function checkspace(checkstr) {
    var str = '';
    for(i = 0; i < checkstr.length; i++) {
    str = str + ' ';
    }
    return (str == checkstr);
    }
     
    /* 手机号码正确性校验 */
    function checkphone(mobile){
    var myreg = /(^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$)|(^(13|15|18)\d{9}$)|(^(\s*)$)/;   //验证130-139,150-159,180-189号码段的手机号码  /\d{3}-\d{8}|\d{4}-\d{7}/
    if(!myreg.test(mobile)) 

       alert('请输入有效的联系方式号码!'); 
       return true; 

    }
     
     
    /*ajax保存数据  */
    function dataSubmit(){
    /* 必填项功能 */
    /*   */
     
    var ids="${dt.id}";
    if(ids.length>0){
    $.ajax({
                   type: "POST",
                   url:model+"!addDzdt.action?id="+ids,
                   dataType:"json",
                   data:$('#mainForm').serialize(),// 你的formid
                   async: false,
                   error: function(request) {
                       alert("不能重复保存");
                   },
                   success: function(data) {
                    alert("更新成功");
                    success(data.id);
                   }
               });
     
    }else{
    $.ajax({
                   type: "POST",
                   url:model+"!addDzdt.action",
                   dataType:"json",
                   data:$('#mainForm').serialize(),// 你的formid
                   async: false,
                   error: function(request) {
                       alert("不能重复保存");
                   },
                   success: function(data) {
                    alert("保存成功");
                    success(data.id);
                   }
               });
    }
    }
     
    /*保存成功后刷新  */
    function success(id){
    window.location=model+'!MapList.action?wybm='+id;
    }
     
      </script>  
      
     <body>
    <div id="noprint" class="right-m headDiv" style="width: 100%;">  
    <table  id="top" border="0" 
    cellspacing="1" cellpadding="0" width="100%" class="table_style">
    <tr>
    <td align="right" style="width: 100px;">市场主体名称:</td>  
    <td align="left" class="twotd">
    <c:if test="${dt.printState!=1}">  
    <input type="button" value="保存" id="tj"  class="buttonCss" οnclick="dataSubmit();"/>
    </c:if>
     <input type="button" id="print" value="打印" class="buttonCss"  οnclick="open_printWindow();"/>
      <input type="button" value="清空" class="buttonCss" οnclick="clearSearch();"/>
     
    <input type="text" id="cx"  name="qymc" value=""/>
    <input  class="buttonCss" type="button" value="请选择"   οnclick="openSubjectNameDialog();"/>
    </td>   
    <td align="right" >唯一编码:</td>  
    <td align="left" class="twotd"  style="width: 50%">
    ${dt.wybm }
    </td> 
    </tr>
    </table>  
    </div>   

     
    <form id="mainForm" name="mainForm" action="<c:out value="${MODEL_CODE}"/>!addDzdt.action" method="post" success="success()" >
          <table id="two" border="1" align="center" cellspacing="0" cellpadding="0" width="100%" class="table_style">
          <tr class="title">
                   <td colspan="4"><a href="javascript:void(0)">&nbsp;&nbsp;企业信息配置(<span>*</span>表示必填)</a></td>
               </tr>
    <tr>
    <td align="center"><font style="color:red">*</font>市场主体名称:</td>
    <td  class="input_td"  colspan="3">
    <input type="text" class="easyui-validatebox" uirequired="true" style="width: 100%;" id="qymc" name="qymc" value=""></td>
    <input type="hidden" id="jd" name="zbjd" value="">                 
    <input type="hidden" id="wd" name="zbwd" value="">
    <input type="hidden" id="wybm" name="wybm" value="${dt.wybm }">
    </tr>
    <tr>
    <td  align="center">法定代表人:</td>
    <td><input type="text" id="fr" style="width: 100%" name="fr" value="" class="easyui-validatebox" /></td>
    <td  align="center">法定代表人联系电话:</td>
    <td><input type="text" placeholder="请输入座机号或者手机号"  class="easyui-validatebox" validtype="phone"  id="frlxdh"  style="width: 100%"name="frlxdh" value=""/></td>
    </tr>
    <tr>
    <td align="center">确认人:</td>
    <td><input type="text" id="qrr" style="width: 100%" name="qrr" value="" class="easyui-validatebox"></td>
    <td align="center">确认人联系电话:</td>
    <td><input type="text" id="qrrlxdh" name="qrrlxdh" class="easyui-validatebox"  placeholder="请输入座机号或者手机号" validtype="phone"  style="width: 100%"  value=""></td>
    </tr>
    <tr>
    <td align="center">委托代理人:</td>
    <td><input type="text" id="wtdlr" name="wtdlr" style="width: 100%"  value="" class="easyui-validatebox" ></td>
    <td align="center">委托代理联系电话:</td>
    <td><input type="text" id="wtdllxdh" name="wtdllxdh" class="easyui-validatebox"  placeholder="请输入座机号或者手机号" validtype="phone"  style="width: 100%"  value=""></td>
    </tr>
    <tr>
    <td align="center" >
    住所(经营地址):
    </td>
    <td align="center" class="input_td" colspan="3" >
    <textarea  class="easyui-validatebox"    placeholder="选择地址后请选择下面的定位查询"  uirequired="true" id="zs"  name="zs" style="width: 100%;"  cols="20" rows="5"><c:out value=""/></textarea>
    </td>
    </tr>
    </table>
    </form>
    </body>
    </html>




    地图模块:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <html>
      <head>
      <link href="resource/css/rcms_edit.css" rel="stylesheet" type="text/css" />
         <style type="text/css">
          /*定义地图容器  */
       body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
    /* 取消百度地图logo方法 */
       .BMap_cpyCtrl  
       {  
           display:none;   
       }  
       
       .anchorBL{  
           display:none;   
       } 
       
      </style>
      <!-- 全屏调用功能 -->
      <!--先渲染后加载  -->
      <!-- 百度地图api -->
       <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=FtppmMikPUX6swgTT3L75eKXX6j1ZsRC"></script>  
      <!-- 页面布局 -->
      <link href="resource/css/rcms_edit.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" type="text/css" href="resource/css/list.css" media="all" />
      <!-- 全屏 -->
      <tags:checkFrame />
      </head>
      <body>
      <div  class="bottomDiv">
    <div>
    <input type="button" value="定位查询" οnclick="searchByStationName();" class="btn" style="border:none;"/>
    <font color='#ff0000'>*</font>定位后,请手动点击精确位置。
    &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;
    &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;
    &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;
    <input  id="btn"   type="button"  class="btn"  style="border:none;"  value="切换全屏"  οnclick="fullMap()"/>
    </div>
    <div style="width:100%;height:100%;border:2px solid gray" id="allmap"></div>
    </div>
      </body>
      <script type="text/javascript">
      /* 设置全局变量 */
      var  model="${MODEL_CODE}";
      var jd,wd;
      jd="${dt.zbjd}";
      wd="${dt.zbwd}";
      var markersArray = [];  
      /* 创建地图 */
        var map = new BMap.Map("allmap",{enableMapClick:false});  
        /* 一加载,判断坐标是否存在,存在显示,不存在使用原始坐标 */
        if(jd==null||jd==undefined||jd==''){
            var initjd="112.508074";
            var initwd="23.056833";
        var point = new BMap.Point(initjd, initwd);   //创地图对象,设置上已经添加的经纬度
            map.centerAndZoom(point,15); // 初始化地图
        addMarker(point);  //标注初始化经纬度
        map.enableScrollWheelZoom(true);   //滚动条
        map.addEventListener("click", showInfo);    //增加事件监听器
        /* 测试 */
        /*  var localSearch = new BMap.LocalSearch(map);
           localSearch.enableAutoViewport(); //允许自动调节窗体大小 */
           
           /* 查找方位 */
         function searchByStationName() {
            var myGeo=new BMap.Geocoder();
               myGeo.getPoint($('#zs').val(), function(point){      
                         if (point) {      
                         document.getElementById('jd').value = point.lng;   //经度的赋值
                     document.getElementById('wd').value =  point.lat;   //维度的赋值
                             map.centerAndZoom(point, 16);      
                          //   one=map.addOverlay(new BMap.Marker(point));   
                         }      
                     });
              /*  var poi = searchResult.getPoi(0);
               map.centerAndZoom(poi.point, 15); */
    /*            var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat));  // 创建标注,为要查询的地方对应的经纬度
               map.addOverlay(marker);
     */        /*     var content = document.getElementById("text_").value + "<br/><br/>经度:" + poi.point.lng + "<br/>纬度:" + poi.point.lat;
               var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>");
                */
               
             //  marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); });
              //  marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
         //  });
        //   localSearch.search(keyword);
           } 
        }else{
            var point = new BMap.Point(jd, wd);   //创地图对象,设置上已经添加的经纬度
            map.centerAndZoom(point,15); // 初始化地图
          addMarker(point);  //标注初始化经纬度
         
      /* 地图文字标注 */
       var opts = {
         position : point,    // 指定文本标注所在的地理位置
         offset   : new BMap.Size(-45, -0)    //设置文本偏移量
       };
       var label1 = new BMap.Label("市场主体名称:"+"${dt.qymc}"+"<br/>"+"法人代表:"+"${dt.fr}"+"<br/>" +"法人联系电话:"+"${dt.frlxdh}"+"<br/>"+"地址:"+"${dt.zs}", opts);  // 创建文本标注对象
           label1.setStyle({
              color : "black",     //文本字体颜色
              fontSize : "15px" // 文本内字体大小
            });
           map.addOverlay(label1);
         map.enableScrollWheelZoom(true);   //滚动条
         map.addEventListener("click", showInfo);  //增加事件监听器
         /* 用地名匹配经纬度 */
         var localSearch = new BMap.LocalSearch(map);
         localSearch.enableAutoViewport(); //允许自动调节窗体大小
         function searchByStationName() {
         var myGeo=new BMap.Geocoder();
           myGeo.getPoint($('#zs').val(), function(point){      
                     if (point) {      
                     document.getElementById('jd').value = point.lng;   //经度的赋值
                 document.getElementById('wd').value =  point.lat;   //维度的赋值
                         map.centerAndZoom(point, 16);      
                      //   one=map.addOverlay(new BMap.Marker(point));   
                     }      
                 });
         } 
       }
        
        // 将地址解析结果显示在地图上,并调整地图视野    
        
        /* 地图工具 */
       //1.点击获取经纬度 
       function showInfo(e) {  
           document.getElementById('jd').value = e.point.lng;   //经度的赋值
           document.getElementById('wd').value =  e.point.lat;   //维度的赋值
           new BMap.Geocoder().getLocation(e.point, function (rs) {  
               var addComp = rs.addressComponents;  
               var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;  
               if (confirm("确认:地址为" + address + "?")) {  
               }  
           });  
           addMarker(e.point);  
       }  
       //2.清除标识  
       function clearOverlays() {  
           if (markersArray) {  
               for (i in markersArray) {  
                   map.removeOverlay(markersArray[i]);
      }  
           }  
       }  
       
       
       //3.地图上标注  
       function addMarker(point) {  
           var marker = new BMap.Marker(point);  
           markersArray.push(marker);  
           clearOverlays();  
           map.addOverlay(marker);  
       }  
       // 4.地图定位功能
         // 添加带有定位的导航控件
     var navigationControl = new BMap.NavigationControl({
       // 靠左上角位置
       anchor: BMAP_ANCHOR_TOP_LEFT,
       // LARGE类型
       type: BMAP_NAVIGATION_CONTROL_LARGE,
       // 启用显示定位
       enableGeolocation: true // 会多出一个点
     });
       
     map.addControl(navigationControl);
     map.addControl(new BMap.OverviewMapControl()); //添加默认缩略地图控件
     
     var geolocationControl = new BMap.GeolocationControl();
     geolocationControl.addEventListener("locationSuccess", function(e){
       // 定位成功事件
       var address = '';
       address += e.addressComponent.province;
       address += e.addressComponent.city;
       address += e.addressComponent.district;
       address += e.addressComponent.street;
       address += e.addressComponent.streetNumber;
       alert("当前定位地址为:" + address);
     });
     geolocationControl.addEventListener("locationError",function(e){
       // 定位失败事件
       alert(e.message);
     });
     map.addControl(geolocationControl);
    </script>


    <script type="text/javascript">
    /*全屏方法  */
    /*1. 获取页面数据 ,页面数据带到跳转到的全屏子页面*/
    function fullMap(){
    var qymc=$("#qymc").val();
    var fr=$("#fr").val();
    var frlxdh=$("#frlxdh").val();
    var zs=$("#zs").val();
    var qrr=$("#qrr").val();
    var qrrlxdh=$("#qrrlxdh").val();
    var jd = $("#jd").val();
    var wd = $("#wd").val();
    window.open(model+"!fullMap.action?jd="+jd+"&wd="+wd+"&qymc="+qymc+"&fr="+fr+"&frlxdh="+frlxdh+"&zs="+zs+"&qrr="+qrr+"&qrrlxdh="+qrrlxdh,"地图标注");
    }

    /* 2.被window.open子页面调用的父方法 */
    function allSelect(jd,wd){
    document.getElementById('jd').value=jd;
    document.getElementById('wd').value=wd;
    var point = new BMap.Point(jd, wd);   //创地图对象,设置上已经添加的经纬度
      map.centerAndZoom(point,15); // 初始化地图
      addMarker(point);  //标注初始化经纬度
     
      /* 地图文字标注 */
     var opts = {
         position : point,    // 指定文本标注所在的地理位置
         offset   : new BMap.Size(-45, -0)    //设置文本偏移量
       };
     var label2 = new BMap.Label("市场主体名称:"+"${dt.qymc}"+"<br/>"+"法定代表人:"+"${dt.fr}"+"<br/>" +"法定代表人联系电话:"+"${dt.frlxdh}"+"<br/>"+"经营地址:"+"${dt.zs}", opts);  // 创建文本标注对象
         label2.setStyle({
              color : "black",     //文本字体颜色s
              fontSize : "15px" // 文本内字体大小
         });
     
      map.enableScrollWheelZoom(true);   //滚动条
    }
    </script>
    </html>



    全屏页面(相当于用父页面传值给子页面):

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <html>
      <head>
      <style type="text/css">
          /*定义地图容器  */
       body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
    /* 取消百度地图logo方法 */
       .BMap_cpyCtrl  
       {  
           display:none;   
       }  
       .anchorBL{  
           display:none;   
       }   
      </style>
     
      <!-- 百度地图api -->
       <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=FtppmMikPUX6swgTT3L75eKXX6j1ZsRC"></script>  
      <!-- 页面布局 -->
      <link href="resource/css/rcms_edit.css" rel="stylesheet" type="text/css" />
      <link rel="stylesheet" type="text/css" href="resource/css/list.css" media="all" />
      <script type="text/javascript" src="resource/js/jquery.js"></script>
      <!-- 全屏 -->
      <script type="text/javascript">
      var model="${MODEL_CODE}";
      //window.parent.aa();//调取aa函数
    function choosePlace(){
    var jd=$('#jd').val();
    var wd=$('#wd').val();
    window.opener.allSelect(jd,wd); //调用父页面的allsselect方法
    window.close();
       }
     
    /* 退出全屏 */
      function excitfullmap(){
      window.close();
      }
      </script>
      </head>
      
      <body>
      <div id="noprint"   align="center">
      <input  id="btn"   type="button"  class="btn"  style="border:none;"  value="选择" οnclick="choosePlace()" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <input  id="btn"   type="button"  class="btn"  style="border:none;"  value="退出全屏" οnclick="excitfullmap()" />
      </div>
    <div style="width:100%;height:100%;border:2px solid gray" id="allmap"></div>
    <input type="hidden" id="jd" name="jd" value="">
    <input type="hidden" id="wd" name="wd" value="">
      </body>
      
      <script type="text/javascript">
    var jd="${jd}";
      var wd="${wd}";
      /* 从父标签获取标签 */
      var initjd=window.opener.jd;
    var initwd=window.opener.wd;

     
     if(initjd==null||initjd==''||initjd==undefined){
     
      var map = new BMap.Map("allmap",{enableMapClick:false});  
      var point = new BMap.Point(jd,wd);   //创地图对象,设置上已经添加的经纬度
      map.centerAndZoom(point,15); // 初始化地图
      map.enableScrollWheelZoom(true);   //滚动条
      var mk = new BMap.Marker(point);  
    map.addOverlay(mk);  
     }else{
     
     var map = new BMap.Map("allmap");  
       var point = new BMap.Point(jd,wd);   //创地图对象,设置上已经添加的经纬度
    map.centerAndZoom(point,15); // 初始化地图
    map.enableScrollWheelZoom(true);   //滚动条
    var mk = new BMap.Marker(point);  
    map.addOverlay(mk);
    /* 地图文字标注 */
     var opts = {
         position : point,    // 指定文本标注所在的地理位置
         offset   : new BMap.Size(-45, -0)    //设置文本偏移量
       };
     var label = new BMap.Label("市场主体名称:"+"${dt.qymc}"+"<br/>"+"法人代表:"+"${fr}"+"<br/>" +"法人联系电话:"+"${frlxdh}"+"<br/>"+"地址:"+"${zs}", opts);  // 创建文本标注对象
         label.setStyle({
              color : "black",     //文本字体颜色
              fontSize : "15px" // 文本内字体大小
         });
         map.addOverlay(label); 
     }
     
         
         //清除标识  
         function clearOverlays() {  
             if (markersArray) {  
                 for (i in markersArray) {  
                     map.removeOverlay(markersArray[i]);
        }  
             }  
         }  
         
         var markersArray = [];  
         //地图上标注  
         function addMarker(point) {  
             var marker = new BMap.Marker(point);  
             markersArray.push(marker);  
             clearOverlays();  
             /* 测试 */
             map.removeOverlay(mk);
             
             map.addOverlay(marker);  
         }  
         
        var geoc = new BMap.Geocoder();   //  手动点击位置
    map.addEventListener("click", showInfo); 
       //点击地图时间处理  
         function showInfo(e) {  
             document.getElementById('jd').value = e.point.lng;   //经度的赋值
             document.getElementById('wd').value =  e.point.lat;   //维度的赋值
             geoc.getLocation(e.point, function (rs) {  
                 var addComp = rs.addressComponents;  
                 var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;  
                 if (confirm("确认:地址为" + address + "?")) {  
                 }  
             });  
             addMarker(e.point);  
         }
       
      </script>
      
    </html>



    我的action方法:


    /*电子地图_全屏功能*/
    @RequestMapping(value = "/"+MODEL_CODE+"!fullMap.action")
    public String fullMap(String jd,String wd,String qymc,String fr,String frlxdh,String zs,String qrr,String qrrlxdh) throws Exception {  // 
    if(StringUtils.isBlank(jd)|| StringUtils.isBlank(wd)){
    //后台存储页面数据,向子页面 "dzbt_fullmapPage"输出
    String newfr=new String(fr.getBytes("ISO-8859-1"),"utf-8"); // 将页面传来的iso-8859-1数据转为utf-8编码形式
    String newqymc=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    String newzs=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    String newqrr=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    setParamToRequest("jd", "112.508074");
    setParamToRequest("wd", "23.056833");
    setParamToRequest("qymc", newqymc);
    setParamToRequest("fr",newfr );
    setParamToRequest("frlxdh", frlxdh);
    setParamToRequest("zs", newzs);
    setParamToRequest("qrr", newqrr);
    setParamToRequest("qrrlxdh", qrrlxdh);
    setParamToRequest("MODEL_CODE", MODEL_CODE);
    return FOLDER+"dzbt_fullmapPage";
    }
    String newfr=new String(qymc.getBytes("ISO-8859-1"),"utf-8"); 
    String newqymc=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    String newzs=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    String newqrr=new String(fr.getBytes("ISO-8859-1"),"utf-8"); 
    setParamToRequest("jd", jd);
    setParamToRequest("wd", wd);
    setParamToRequest("qymc", newqymc);
    setParamToRequest("fr",newfr );
    setParamToRequest("frlxdh", frlxdh);
    setParamToRequest("zs", newzs);
    setParamToRequest("qrr", newqrr);
    setParamToRequest("qrrlxdh", qrrlxdh);
    setParamToRequest("MODEL_CODE", MODEL_CODE);
    return FOLDER+"dzbt_fullmapPage";
    }




    展开全文
  • 自定义:地图标注(大头针)

    千次阅读 2015-09-12 20:21:59
    地图标注所谓的地图标注就是我们俗称的大头针 添加多个大头针 移除一个大头针

    地图标注

    所谓的地图标注就是我们俗称的大头针:
    钉在某个具体位置,用来标识这个位置上有特定的事物(比如地图某位置上标注有家餐馆)

    大头针的基本操作

    添加单个大头针
    - (void)addAnnotation:(id <MKAnnotation>)annotation;
    添加多个大头针
    - (void)addAnnotations:(NSArray *)annotations;
    移除一个大头针
    - (void)removeAnnotation:(id <MKAnnotation>)annotation;
    移除多个大头针
    - (void)removeAnnotations:(NSArray *)annotations;

    (id <MKAnnotation>)annotation参数是什么东西?
    大头针模型对象:用来封装大头针的数据,比如大头针的位置、标题、子标题等数据

    大头针模型

    新建一个大头针模型类

    #import <Foundation/Foundation.h>
    #import <MapKit/MapKit.h>
    @interface YXYMKAnnotation : NSObject<MKAnnotation>// 遵守协议,自定义大头针数据模型
    /** 坐标位置 */
    @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
    /** 标题 */
    @property (nonatomic, copy) NSString *title;
    /** 子标题 */
    @property (nonatomic, copy) NSString *subtitle;
    /** 图标字符串 */
    @property (nonatomic, copy) NSString *icon;
    @end

    自定义大头针

    如何自定义大头针:
    1.设置MKMapView的代理

    2.实现下面的代理方法,返回大头针控件
    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

    3.根据传进来的(id )annotation参数创建并返回对应的大头针控件

    代理方法的使用注意!
    如果返回nil,显示出来的大头针就采取系统的默认样式
    标识用户位置的蓝色发光圆点,它也是一个大头针,当显示这个大头针时,也会调用代理方法
    因此,需要在代理方法中分清楚(id )annotation参数代表自定义的大头针还是蓝色发光圆点

    #pragma mark - MKMapViewDelegate 封装过的代码
    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
        // 判断如果是定位用户的大头针,用系统自己的大头针样式,而不是用自定义的,防止崩溃
        // 返回nil就会按照系统的默认方法创建
        if (![annotation isKindOfClass:[YXYMKAnnotation class]]){
            return nil;
        }
        // 调用自定义大头针的方法 -- 获得大头针控件
       YXYAnnotationView *annotationView = [YXYAnnotationView annotationViewWithMapView:mapView];
    
        // 传数据(annotationView.annotation是 MKAnnotationView本身具备的属性)
        annotationView.annotation = annotation;
    
        return annotationView;
    }

    MKAnnotationView

    地图上的大头针控件是MKAnnotationView

    MKAnnotationView的属性
    大头针模型
    @property (nonatomic, strong) id <MKAnnotation> annotation;
    显示的图片
    @property (nonatomic, strong) UIImage *image;
    是否显示标注
    @property (nonatomic) BOOL canShowCallout;
    标注的偏移量
    @property (nonatomic) CGPoint calloutOffset;
    标注右边显示什么控件
    @property (strong, nonatomic) UIView *rightCalloutAccessoryView;
    标注左边显示什么控件
    @property (strong, nonatomic) UIView *leftCalloutAccessoryView;

    自定义MKAnnotationView

    示例代码:

    /**
     纬度范围:N 3°51′ ~  N 53°33′
     经度范围:E 73°33′ ~  E 135°05′
     */
    
    #import "ViewController.h"
    #import <MapKit/MapKit.h>
    #import "YXYMKAnnotation.h"// 引入自定义的大头针数据模型(必须自定义,否则敲不出MKAnnotation)
    #import "YXYAnnotationView.h"
    @interface ViewController ()<MKMapViewDelegate,MKAnnotation>
    @property (nonatomic, strong) MKMapView *mapView;
    @end
    
    @implementation ViewController
    - (MKMapView *)mapView{
        if (_mapView == nil) {
            _mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];
        }
        return _mapView;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.mapView.mapType = MKMapTypeStandard;
        self.mapView.userTrackingMode = MKUserTrackingModeFollow;
        self.mapView.delegate = self;
        [self.view addSubview:self.mapView];
    // 定位当前位置
        self.mapView.showsUserLocation = YES;
    
        YXYMKAnnotation *annotation = [[YXYMKAnnotation alloc]init];
        annotation.coordinate = CLLocationCoordinate2DMake(39.90989, 116.4);
        annotation.title = @"天朝";
        annotation.subtitle = @"天朝无线娱乐有限公司";
        annotation.icon = @"category_2@2x";
        [self.mapView addAnnotation:annotation];
    
        YXYMKAnnotation *annotation1 = [[YXYMKAnnotation alloc]init];
        annotation1.coordinate = CLLocationCoordinate2DMake(39.90989, 116.46);
        annotation1.title = @"天朝";
        annotation1.subtitle = @"天朝无线娱乐超市";
        annotation1.icon = @"category_1@2x";
        [self.mapView addAnnotation:annotation1];
    
    }
    

    示例代码:YXYAnnotationView.h文件中

    #import <MapKit/MapKit.h>
    @interface YXYAnnotationView : MKAnnotationView// 自定义大头针样式
    #pragma mark 创建annotationView
    + (instancetype)annotationViewWithMapView:(MKMapView *)mapView;
    @end

    示例代码:YXYAnnotationView.m文件中

    #import "YXYAnnotationView.h"
    #import "YXYMKAnnotation.h"
    
    @interface YXYAnnotationView ()
    @property (nonatomic, weak) UIImageView *iconView;
    @end
    
    @implementation YXYAnnotationView
    
    // 创建annotationView -- 与重用cell方法很像
    + (instancetype)annotationViewWithMapView:(MKMapView *)mapView{
        static NSString *ID = @"custom";// 标示符
        YXYAnnotationView *annotationView = (YXYAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
        if (annotationView == nil) {// 传入循环利用标识来创建大头针控件
            annotationView = [[YXYAnnotationView alloc]initWithAnnotation:nil reuseIdentifier:ID];
        }
        return annotationView;
    }
    
    - (instancetype)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{
        if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) {
            // 显示标题和子标题
            self.canShowCallout = YES;
    
            // 左边显示一个图片
            UIImageView *iconView = [[UIImageView alloc]init];
            iconView.bounds = CGRectMake(0, 0, 50, 50);
            self.leftCalloutAccessoryView = iconView;
            self.iconView = iconView;
        }
        return self;
    }
    
    #pragma mark 重写 annotation 的setter方法
    - (void)setAnnotation:(YXYMKAnnotation *)annotation{
        // 初始化父类的三个属性
        [super setAnnotation:annotation];
        // 设置大头针图标,在父类的三个属性基础上 添加一个图片属性
        self.image = [UIImage imageNamed:annotation.icon];
        // 给标题中的辅助图设置图片
        self.iconView.image = self.image;
    }
    @end
    

    MKPinAnnotationView

    MKPinAnnotationView是MKAnnotationView的子类
    MKPinAnnotationView比MKAnnotationView多了2个属性
    大头针颜色
    @property (nonatomic) MKPinAnnotationColor pinColor;
    大头针第一次显示时是否从天而降
    @property (nonatomic) BOOL animatesDrop;

    创建系统自带的大头针样式(MKPinAnnotationView):

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    {
        // 1.先从缓存池中取出可以循环利用的大头针控件
        static NSString *ID = @"anno";
        MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
    
        // 2.缓存池中没有可以循环利用的大头针控件
        if (annotationView == nil) {
            // 传入循环利用标识来创建大头针控件
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:ID];
            // 设置头的颜色
            annotationView.pinColor = MKPinAnnotationColorPurple;
            // 从天而降
            annotationView.animatesDrop = YES;
            // 显示标题和子标题
            annotationView.canShowCallout = YES;
              // 标题view的位置偏移量
    //        annotationView.calloutOffset = CGPointMake(0, -10);
              //  annotationView 可以设置左右辅助视图
    //        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
    //        annotationView.leftCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeInfoDark];
    
            // 往大头针里面添加一个按钮(测试)
    //        [annotationView addSubview:[UIButton buttonWithType:UIButtonTypeContactAdd]];
        }
    
        // 3.传递模型(更新大头针数据,覆盖掉之前的旧数据)
        annotationView.annotation = annotation;
        // 4.设置图片
        // annotationView.image = [UIImage imageNamed:annotation.icon];
        return annotationView;
    }
    
    展开全文
  • 关于iOS百度地图标注

    千次阅读 2015-09-25 14:03:56
    为什么要把这个拿出来单独写呢,因为标注地图开发中经常用到的东西,而且需求各种各样,提供的默认标注不足以满足需求。在百度地图的官方文档里面也没有很详细的说明,就把自己的使用心得拿出来记录一下。 首先,...

    为什么要把这个拿出来单独写呢,因为标注是地图开发中经常用到的东西,而且需求各种各样,提供的默认标注不足以满足需求。在百度地图的官方文档里面也没有很详细的说明,就把自己的使用心得拿出来记录一下。
    首先,要理清楚他们之间的关系。
    参考一下百度的类继承关系:
    http://wiki.lbsyun.baidu.com/cms/iossdk/doc/v2_8_0/html/hierarchy.html
    标注View的继承关系

    标注点的继承关系

    可以看到,BMKPinAnnotationView继承的BMKAnnotationView,然后BMKActionPaopaoView、BMKAnnotationView和BMKMapView都是继承的UIVIew,属于同一级别。

    然后就是标注点,其实就是协议,想要添加标注,就必须实现协议。
    这里写图片描述
    一般的,我们去创建一个BMKPointAnnotation对象,然后给这个对象的coordinate赋值,coordinate是一个CLLocationCoordinate2D对象,就是坐标点。这样就能在地图上确定位置了。同时还有一个title和subtitle ,设置上这两个属性就会有气泡了,但是气泡的显示还需要在View里面设置的,请继续往先看。
    这里引入一段代码:

    /**
     * 初始化一个标注
     * 注意:一定要在设置代理之后去添加,不然不会走代理方法,这样就会显示一个默认标注,没有自定义效果了
     */
    - (void)initAnnotataion{
        
        BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc]init];
        
        annotation.coordinate = CLLocationCoordinate2DMake(39.915, 116.404);
        annotation.title = @"我在这里ARFAA~~~";
        annotation.subtitle = @"SS";
        
        //在地图上添加Annotation后才会有标注
        [self.mapView addAnnotation:annotation]; 
    }
    

    这里可以进行自定义,自定义的只要继承了BMKPointAnnotation就行,然后自己添加一些属性方法之类的,这里就不细说了。

    添加完标注,接下来就要走代理方法了。 先看代码

    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
    {
    	//这是错误的,放在这里警示一下
        if ([annotation isKindOfClass:[BMKUserLocation class]]) {
            BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
            newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
            newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
            return newAnnotationView;
        }
        
        //这是正确的写法
        if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
            //设置复用
            CustomAnnotationView *pointAnnotation = (CustomAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
            if (!pointAnnotation)
            {
                pointAnnotation = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
            }
            //动画效果
            //pointAnnotation.animatesDrop = YES;
            //可以拖动
            pointAnnotation.draggable = YES;
            //设置title,选中弹出气泡
            pointAnnotation.canShowCallout = YES;
            //设置自定义标注图标
            pointAnnotation.image = [UIImage imageNamed:@"icon_passenger"];
            
            return pointAnnotation;
        }
        
        return nil;
    }
    

    在if里面判断一下是否有此标注,如果有,然后进行下一步。还有一点,如果使用了自定义的标注,最好是判断自定义的类,而不是判断BMKPointAnnotation。因为在之后的话,要使用到这个对象需要强转,父类强转子类对象如果不一致,会崩溃的。
    定位其实也是一种标注,在其他地图里是可以这么写的,因为UserLocation会去实现< BMKAnnotation>这个协议,但是百度的没有,猜测可能是在.m中去实现了协议方法。关于如何自定义定位标注,后面再说。
    之后我们进行创建View。这个地方我创建了一个自定义的view。自定义的只需要去继承一下BMKPinAnnotationView或者BMKAnnotationView就可以了。之前说过了BMKPinAnnotationView是BMKAnnotationView的子类,继承BMKPinAnnotationView会有默认大头针而已。
    我这里自定义的只是为了设置一个自定义泡泡。

    - (instancetype)initWithAnnotation:(id<BMKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
        if (self) {
            self.paopaoView = [[BMKActionPaopaoView alloc]initWithCustomView:self.calloutView];
        }
        return self;
    }
    
    - (CustomCalloutView *)calloutView
    {
        if (!_calloutView) {
            _calloutView = [[CustomCalloutView alloc] initWithFrame:CGRectMake(0, 0, kCalloutWidth, kCalloutHeight)];
        }
        
        return _calloutView;
    }
    
    -(void)setAnnotation:(id<BMKAnnotation>)annotation
    {
        [super setAnnotation:annotation];
        
        self.paopaoView = [[BMKActionPaopaoView alloc]initWithCustomView:self.calloutView];
    }
    
    

    这里就是给self.paopaoView赋值而已,没什么特别的。至于CustomCalloutView里面怎么写的,就不详细说明了,其实就是一个View。

    这样就完成了自定义标注及气泡。

    最后再说一下定位标注。

    关于更改定位的样式,百度提供的方式是用mapView设置Param。方法为:
    -(void)updateLocationViewWithParam:(BMKLocationViewDisplayParam*)locationViewDisplayParam;
    首先创建一个BMKLocationViewDisplayParam对象,设置它的属性。

    BMKLocationViewDisplayParam *param = [[BMKLocationViewDisplayParam alloc]init];
        param.locationViewImgName = @"icon_nav_waypoint";
        [_mapView updateLocationViewWithParam:param];
    

    但是要注意,这里的图片一定要在mapapi.bundle资源文件库里,不然无效。

    还有一种办法,定位是可以获取到坐标的,完全可以不用系统给出的定位显示,根据定位的坐标自己创建标注,这样就可以更加灵活的去实现显示。

    展开全文
  • 地图标注常见于应用当中,比如常见情景: 1、地图应用当中当你需要点击收藏某个地点时,就相当于把这个坐标信息标注出来。 2、地图定位中的小蓝点,相当于在地图上的一个标注。 实现地图上的标注通常有以下几步: ...

    地图标注常见于应用当中,比如常见情景:

    1、地图应用当中当你需要点击收藏某个地点时,就相当于把这个坐标信息标注出来。

    2、地图定位中的小蓝点,相当于在地图上的一个标注。


    实现地图上的标注通常有以下几步:

    1、新建一个实现了MKAnnotation协议的类。

        主要去实现其中的CLLocationCoordinate2D、title、subtitle三个属性方法;

    2、创建MKAnnotation对象,并初始化其中的CLLocationCoordinate2D、title、subtitle属性。


    3、新建MKMapView并设置显示坐标、缩放级别及其代理方法。添加标注时候,注意可以添加单个标注也可以添加多个标注,删除标注方法也类似。

        [_mapViewremoveAnnotations:_mapView.annotations];

        [_mapView addAnnotations:_annotations];


    4、当调用添加标注方法时,调用mapView的代理方法显示标注详情:

    - (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

    添加标注。


    注意其中几点:

    a、重用机制,主要用来减少对象的重复创建。

    首先先从某个容器去看有没有没用的对象,有就使用,只需要替换其中的值,没有则新创建对象


    b、如果是大头针有两个设置需要注意:

            pinAnotationView.animatesDrop = YES; 表示显示标注时,出现动画

            pinAnotationView.canShowCallout = YES;点击显示详情。


    c、点击后的视图有左右两个视图设置。

    leftCalloutAccessoryView

    rightCalloutAccessoryView


    详细代码如下:


    #import <Foundation/Foundation.h>

    #import <MapKit/MapKit.h>


    @interface LAnnotation :NSObject<MKAnnotation>

    @property (nonatomic,assign) CLLocationCoordinate2D coordinate;

    @property (nonatomic,copy) NSString *title;

    @property (nonatomic,copy) NSString *subtitle;

    @property (nonatomic,assign)NSInteger index;


    -(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate

                      title:(NSString *)title

                   subtitle:(NSString *)subtitle

                      index:(NSInteger) index;

    @end



    #import "LAnnotation.h"


    @implementation LAnnotation

    -(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate

                      title:(NSString *)title

                   subtitle:(NSString *)subtitle

                      index:(NSInteger)index{

        self= [superinit];

        if (self) {

            self.coordinate = coordinate;

            self.title = title;

            self.subtitle = subtitle;

            self.index = index;

        }

        return self;


    }

    @end




        _mapView = [[MKMapViewalloc]initWithFrame:CGRectMake(0,0, width, height-40)];

        CLLocationCoordinate2D location = {31.19316,121.43154};

        MKCoordinateSpan span ={0.05,0.05};

        MKCoordinateRegion region = {location,span};

        [ _mapView setRegion:region];

        _mapView.delegate =self;

        [self.viewaddSubview:_mapView];


        CLLocationCoordinate2D  cordination1= {31.196,121.433};

        _annotations = [[NSMutableArrayalloc]initWithCapacity:3];

        

        LAnnotation *annotation1 = [[LAnnotationalloc]initWithCoordinate:cordination1title:@"中心路"subtitle:@"光源西擦"index:0];

        [_annotations addObject:annotation1];

        

        CLLocationCoordinate2D  cordination2= {31.197,121.434};

        LAnnotation *annotation2 = [[LAnnotationalloc]initWithCoordinate:cordination2title:@"中心dd"subtitle:@"光源西擦dd"index:1];

            

        CLLocationCoordinate2D  cordination3= {31.198,121.435};

        LAnnotation *annotation3 = [[LAnnotationalloc]initWithCoordinate:cordination3title:@"中擦路"subtitle:@"光钱财"index:2];

        [_annotations addObject:annotation2];

        [_annotations addObject:annotation3];


    -(void)flagButton:(id)sender{

        [_mapViewremoveAnnotations:_mapView.annotations];

        [_mapView addAnnotations:_annotations];

        

    }



    #pragma mark -MKMapViewDelegate

    - (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

        

        if (![[annotation class]isSubclassOfClass:[LAnnotationclass]]) {

            return  nil;

        }

        LAnnotation *blAnnotation = (LAnnotation *)annotation;

        

        static NSString *annotationIdentifier =@"reuserIdentifier";

        

        MKPinAnnotationView  *pinAnotationView = (MKPinAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        

        if (pinAnotationView==nil) {

            pinAnotationView = [[MKPinAnnotationViewalloc]initWithAnnotation:blAnnotationreuseIdentifier:annotationIdentifier];

            pinAnotationView.animatesDrop = YES;

            pinAnotationView.canShowCallout = YES;

            

            UIButton *leftButton = [[UIButtonalloc]initWithFrame:CGRectMake(0,0, 30, 30)];

            leftButton.backgroundColor = [UIColorredColor];

            pinAnotationView.leftCalloutAccessoryView = leftButton;


            

            UIButton *rightButton = [UIButtonbuttonWithType:UIButtonTypeDetailDisclosure];

            pinAnotationView.rightCalloutAccessoryView = rightButton;

        }

        

        if (blAnnotation.index ==0) {

            pinAnotationView.pinColor = MKPinAnnotationColorGreen;

            pinAnotationView.leftCalloutAccessoryView.tag =0;

        }else if (blAnnotation.index ==1) {

            pinAnotationView.pinColor = MKPinAnnotationColorPurple;

        }else if (blAnnotation.index ==2) {

            pinAnotationView.pinColor = MKPinAnnotationColorRed;

        }

        pinAnotationView.tag = blAnnotation.index;


        

        return  pinAnotationView;

    }


    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {

        switch (view.tag) {

            case 0:

                NSLog(@"第一个");

                break;

                

            default:

                NSLog(@"第其它个");


                break;

        }

    }






    展开全文
  • 百度地图API示例之小实践 添加代理标注 地图坐标无非是经度纬度。 每个代理商都有他的经度纬度参数,就能够在地图标注出来了。 效果如下: 功能包括 标记代理商 显示导航 显示距离 ...
  • 关于高德地图标注的那些坑

    千次阅读 2017-03-21 17:38:32
    关于高德地图标注的那些坑。先说一下自己遇到的问题:在地图加载完成后自动弹出 自定义的标注点 和 气泡框,然后当点击气泡框的时候,可以直接响应气泡框上的Button事件。
  • 一、地图标注  第一步:首先创建 BMKMapView 视图  第二步:在视图完全显示出来后设置,并实现代理方法  第三步:运行程序,此时大头针效果可以正常显示 二、POI检索  第一步:延时加载对象  第二步:实现...
  • 练习使用百度地图时,了解了每添加一个标注  [_mapView addAnnotation:annotation];   就会实现 &lt;BMKMapViewDelegate&gt; 协议中的 mapView:viewForAnnotation:回调函数,设置标注样式   所以在...
  • iOS-地图标注(大头针)

    千次阅读 2015-07-05 15:22:18
    地图标注常见于应用当中,比如常见情景: 1、地图应用当中当你需要点击收藏某个地点时,就相当于把这个坐标信息标注出来。 2、地图定位中的小蓝点,相当于在地图上的一个标注。 实现地图上的标注通常有以下...
  • ios 地图 自定义标注

    千次阅读 2013-05-28 17:42:10
    MKMapView学习笔记(转) 一....在iPhone中利用MapKit框架可以很方便的显示Google地图,并且可以在地图上添加标注。 二.具体介绍 1.MKMapView的显示 (1)创建MKMapView CGRect rect = CGRe
  • 我们分析项目时,千万不要局限于线上,线下,其实很多时候线上和线下是...地图标注,是将商家或企业的线下地址信息标注到互联网电子地图、手机电子地图或导航地图中,这样用户在当地的电子地图上就可以看到商家的店铺信
  • 2. 地图标注的添加 在实现地图的基础上,实现过个地图标注 (1). 在实现地图的ViewController实现接口 MKMapViewDelegate (2). 地图标注类需要自定义,创建MapPoint类,实现接口 MapPoint.h 文件 #import #...
  • - (MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(idMKAnnotation>)annotation//mapView的代理方法 {   if([annotation isKindOfClass:[MKUserLocation class]]){   return nil;  
  • 位置与地图(二)地图的使用以及标注地图

    千次阅读 多人点赞 2014-06-23 11:52:28
    继上一章,使用CoreLocation框架获取了当前设备的位置,这一章介绍地图的使用.  首先,导入框架  #import @main代码示例 main.h #import #import // 引用地图协议 @interface HMTMainViewController : ...
  • 百度地图开发动态设置标注图片

    千次阅读 2018-04-13 16:10:56
    一个百度地图开发练习,由于自定义annoationView时创建类总是显示头文件not found,所以在控制器中实现。 根据官方文档自定义标注图片后所有图片都是一样的(白色的点先忽略),根据需要得设置两种颜色的标注   ...
  • 女朋友的一个项目里需要用到百度地图标注功能,也就是大头针戳点,需要响应用户点击事件,但是代码看起来完全没问题,可是didSelectAnnotationView方法死活调用不到,然后我自己做的一个App里,也遇到了相同的问题...
  • 没有营业执照怎么标注百度地图

    千次阅读 2016-12-27 19:22:31
    由于现在百度地图标注公司是免费的,需要营业执照的,但有很多小店商家没有营业执照,想标注百度地图,不知道如何办?现在我们全程代理百度地图业务,通过特殊渠道内部提交,解决你的所有问题。百度地图的权重非常高...
  • 加到地图上,地图代理 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation 返回要 MKPinAnnotationView的视图,当用户选择这个MKPinAnnotationView时,我们再...
  • iOS Swift百度地图 添加多个标注

    千次阅读 2015-11-23 23:41:33
    搞了一天终于把添加多个标注做出来了,又深刻的反应了写代码一味的copy,不知其所以然的后果太严重,一点错误找个大半天,好了,不过多bb,说说添加多个标注要注意的一些东西吧。 首先,添加大头针的方法要实现在_...
  • iOS-百度地图添加标注自定义气泡

    千次阅读 2016-03-25 19:44:54
    原地址:... 文/煜寒了(简书作者) ...著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 1.首先实现添加多个标注和自定义气泡 添加自定义标注 [_mapView addAnnotations:array
  • 怎么在百度地图标注公司地址

    千次阅读 2017-08-04 09:59:22
    从某种意义上来讲,现在的地图推广是非常重要的,百度地图,就相当于以百度的名义来为自己量身定做一种随时查阅的电子名片。这是非常不错的一种方法,通过这样的方式能够在第一时间快速的完成推广,能够让用户更加...
  • 关于百度地图的相关配置以及库的合并方法请查看官方文档,上面说的很详细, 下面是在配置好的基础上进行的。 1、引入百度地图的库的头文件 //百度地图 #import <BaiduMapAPI/BMapKit.h> #import <...
  • 高德地图api自定义标注点重复点击问题 1.在使用高德地图api以后,我们可以接入创建一个地图,并且将地图添加在我们的可视区域内 -(void)createMAMapView{ self.mapView = [[MAMapView alloc] init]; self.mapView...
  • 百度地图标注一组地理坐标<2>

    千次阅读 2014-11-13 11:32:27
    开发移动地图相关的应用有时会有这样的需求:在地图上显示自己的定位,然后想查看周边使用这个应用的有哪些人。当然完成这个功能需要后台数据的支持,你要把自己的位置信息发给后台,后台在根据你的位置查询数据库...
  • 提供关于百度地图标注(大头针)和折线的一些解决方法,包括大头针的创建删除,选择状态的与非选择状态的图片设置,图片上序号标题的设置,大头针删除,折线绘制和删除等问题
  • 我做的是点击按钮,弹出地图,使用鼠标在地图上添加一个标注,点击确定按钮,获取标注点的经纬度 1、进入腾讯的官网,申领自己的Key https://lbs.qq.com 2、建立一个js文件 export function TMap() { return new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,487
精华内容 994
关键字:

地图标注代理