百度地图
百度地图的放大缩小、平移、海量点、坐标方位标志及GPS经纬度与百度经纬度之间的转换。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page isErrorPage="true"%> <%@ page import="net.sf.json.JSONObject"%> <%@ page language="java" import="java.net.URLDecoder"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/"; String params = request.getParameter("params");//openPostWindow传递的Jason参数集合 String menuUrl = request.getParameter("menuUrl");//站址类型 params=URLDecoder.decode(URLDecoder.decode(params,"utf-8"),"utf-8");//解码 JSONObject jsonObj = JSONObject.fromObject(params); String ds = jsonObj.getString("ds");//地市 String qx = jsonObj.getString("qx");//地市 String wgzwymc = jsonObj.getString("wgzwymc");//地市 %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <title>地图查看</title> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="<%=basePath%>js/jquery-easyui-1.4.1/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="<%=basePath%>js/jquery-easyui-1.4.1/themes/icon.css"> <link rel="stylesheet" type="text/css" href="<%=basePath%>js/jquery-easyui-1.4.1/demo/demo.css"> <link rel="stylesheet" type="text/css" href="<%=basePath%>fzgh/showMap/css/mapTool.css"> <!--公共样式 --> <link rel="stylesheet" type="text/css" href="<%=basePath%>fzgh/common/css/selector.css"> <!-- easyui --> <script type="text/javascript" src="<%=basePath%>js/jquery-easyui-1.4.1/jquery.min.js"></script> <script type="text/javascript" src="<%=basePath%>js/jquery-easyui-1.4.1/jquery.easyui.min.js"></script> <script type="text/javascript" src="<%=basePath%>js/jquery-easyui-1.4.1/locale/easyui-lang-zh_CN.js"></script> <!-- servicebreak的 --> <%@ include file="/pms/platform/resources.jsp"%> <script type="text/javascript" src="<%=request.getContextPath()%>/pms/platform/tool/Json.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/pms/platform/form/invokingserviceBreakSync.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/fzgh/common/GridList.js"></script> <!-- 百度地图2.0 --> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=CA75b11ef9caac12d2c5370ffc28d59a"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script> <style type="text/css"> body,html { width: 100%; height: 100%; margin: 0; font-family: "微软雅黑"; } #r-result { width: 100%; } </style> </head> <body style="width: 97%; height: 92%; margin-top: 10px;"> <!-- 功能选项--> <table style="height: 40px; width: 100%; float: right" border="0"> <tr> <td width="20%"> <img style="width: 20px; height: 20px; float: left;" alt="" src="<%=basePath%>fzgh/image/coverage.png"> <a class="font hover-color" style="text-decoration: none;" href="javascript:coverage()">图层管理</a> </td> <%-- <td width="20%"> <img style="width: 20px;height: 20px;float:left;" alt="" src="<%=basePath%>fzgh/image/baidu.png"> <a class="font hover-color" style="text-decoration: none;" href="javascript:getGhStation(31)">百度地图</a> </td> --%> <td width="20%"></td> <td width="20%"></td> </tr> </table> <!-- 图层管理 --> <div id="dlgCoverage" class="easyui-dialog" style="width: 615px; height: 350px; padding: 5px 10px 5px 10px" closed="true"> <table border="0" style="width: 100%; margin-top: 20px; text-align: left;"> <tr> <td width="25%" align="right"> 站点类型: </td> <td width="15%" align="right"> 2G站点 </td> <td width="10%"> <input name="id" style="width: 16px; height: 16px; line-height: 16px; border: 0" type="radio" onClick="" id="zd2g" /> </td> <td width="15%" align="right"> 3G站点 </td> <td width="10%"> <input name="id" style="width: 16px; height: 16px; line-height: 16px; border: 0" type="radio" onClick="" id="zd3g" /> </td> <td width="15%" align="right"> 4G站点 </td> <td width="10%"> <input name="id" style="width: 16px; height: 16px; line-height: 16px; border: 0" type="radio" onClick="" id="zd4g" /> </td> </tr> </table> <div class="line-u"></div> <div class="line-u"></div> <table border="0" style="margin-top: 20px; width: 100%; text-align: left;"> <tr> <td width="25%" align="right"> 地市: </td> <td width="25%"> <select class="easyui-combobox" id="ds" name="ds" style="height: 25px; width: 162px;" data-options="panelHeight:'300px',editable:true,valueField:'id',textField:'text',onChange:dsChange"> </select> </td> <td width="25%" align="right"> 区县 </td> <td width="25%"> <select class="easyui-combobox" id="qx" name="qx" style="height: 25px; width: 162px;" data-options="panelHeight:'300px',disabled:true,editable:true,valueField:'id',textField:'text'"> </select> </td> </tr> <tr height="10px"> </tr> <tr> <td width="20%" align="right"> 网管中网元名称: </td> <td width="50%"> <input style="width: 90%; height: 16px" id="wgzwymc"> </td> <td width="20%" align="right"></td> <td width="30%"> <a class="myButton" style="text-decoration: none;" href="javascript:toggle()"> <img style="width: 20px; height: 20px; margin-top: 6px; float: left;" src="<%=basePath%>fzgh/image/ss.png"></img> <font color="white" style="font-size: 15px">筛选</font> </a> </td> </tr> </table> </div> <!-- 地图 --> <div id="allmap" style="width: 100%; height: 94%; float: right;"></div> <script type="text/javascript"> var menuUrl = "<%=menuUrl%>";//站址类型 var ds = "<%=ds%>";//地市 if(ds==null||ds=="null"||ds==("--不限--")){ ds=""; } var qx = "<%=qx%>";//区县 if(qx==null||qx=="null"||qx==("--不限--")){ qx=""; } var wgzwymc = "<%=wgzwymc%>";//网管中网元名称 if(wgzwymc==null||wgzwymc=="null"||wgzwymc==("--不限--")){ wgzwymc=""; } //alert("地市:"+ds+"区县:"+qx+"网管中网元名称:"+wgzwymc); var map = new BMap.Map("allmap");//创建Map实例 var mapType2 = new BMap.MapTypeControl({anchor: BMAP_ANCHOR_TOP_LEFT}); map.addControl(mapType2); map.setCurrentCity("北京"); if(qx==""){ if(ds==""){ map.centerAndZoom("济南,历下", 15);// 初始化地图,设置中心点坐标和地图级别 }else{ map.centerAndZoom(ds, 15);// 初始化地图,设置中心点坐标和地图级别 } }else{ map.centerAndZoom(ds,qx, 15);// 初始化地图,设置中心点坐标和地图级别 } map.enableScrollWheelZoom(true);//启用地图滚轮放大缩小 map.addControl(new BMap.ScaleControl()); //添加比例尺 var marker=[]; //设置图层选择默认值 if(menuUrl=="2GXX"){ $("#zd2g").attr("checked",true); $("#zd3g").attr("checked",false); $("#zd4g").attr("checked",false); }else if(menuUrl=="3GXX"){ $("#zd2g").attr("checked",false); $("#zd3g").attr("checked",true); $("#zd4g").attr("checked",false); }else if(menuUrl=="4GXX"){ $("#zd2g").attr("checked",false); $("#zd3g").attr("checked",false); $("#zd4g").attr("checked",true); }debugger; //数据查询 var base = new Object(); var lists1 = new Array(); base["ds"] = ds;//地市 base["qx"] = qx;//区县 base["wgzwymc"] = wgzwymc;//网管中网元名称 base["type"] = menuUrl;//站点类型 lists1.push(base); var data = invokingserviceBreakSync("com.sdjxd.cssj.dao.XwsjShowMap", "getCssjZdXx",[JSON.stringify(lists1)]); var jsonArray = JSON.parse(data); if(jsonArray.length>0){ //第一次加载 if(jsonArray.length>200){ var point = new BMap.Point(jsonArray[0]["BDJD"],jsonArray[0]["BDWD"]); // 创建点坐标 map.centerAndZoom(point, 15); var points = []; //添加海量点数据 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var pt = new BMap.Point(bdjd, bdwd); points.push(pt); points[i]["ghinfoIndex"] = i; } var options = { size: BMAP_POINT_SIZE_BIG, shape: BMAP_POINT_SHAPE_STAR,//形状 color: '#d340c3' }; var pointCollection = new BMap.PointCollection(points,options); // 初始化PointCollection pointCollection.addEventListener('click',function(e){ showinfoMass(e); }); map.addOverlay(pointCollection); // 添加Overlay }else{//第一次加载显示200个以内的点 for(var i=0;i<jsonArray.length;i++){ var bdjd = jsonArray[i]["BDJD"];//展示站点的经度 var bdwd = jsonArray[i]["BDWD"];//展示站点的纬度 var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 //创建自定义图标 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 map.setViewport({center:new BMap.Point(bdjd,bdwd),//中心点 zoom:14}); vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCovq(e);//展示站点信息 }); } } //放大缩小地图 map.addEventListener("zoomend", function () { var s = 0;//记录点数 var zoomN = map.getZoom();//当前地图级别 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ s = s+1; } } if(s>=200){ remove_overlay();//清除覆盖物 var points = []; //添加海量点数据 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var pt = new BMap.Point(bdjd, bdwd); points.push(pt); points[i]["ghinfoIndex"] = i; } var options = { size: BMAP_POINT_SIZE_BIG, shape: BMAP_POINT_SHAPE_STAR,//形状 color: '#d340c3' }; var pointCollection = new BMap.PointCollection(points,options); // 初始化PointCollection pointCollection.addEventListener('click',function(e){ showinfoMass(e); }); map.addOverlay(pointCollection); // 添加Overlay }else{ remove_overlay();//清除覆盖物 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 var bs = map.getBounds();//获取可视区域 var bsne = bs.getNorthEast();//可视区域右上角 var bssw = bs.getSouthWest();//可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ //创建自定义图标 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCovq(e);//展示站点信息 }); } } } }); //平移地图 map.addEventListener("dragend", function(){ var s = 0;//记录点数 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ s = s+1; } } if(s<=200){ remove_overlay();//清除覆盖物 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ //创建自定义图标 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 //坐标单击展示信息 vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCovq(e);//展示站点信息 }); } } } }); //清除覆盖物 function remove_overlay(){ map.clearOverlays(); } } //最简单的用法,生成一个marker数组,然后调用markerClusterer类即可。 function showinfoCovq(e){//展示站点信息 if(e.target.lang==""){ return; } var sContent ="<div style='margin:0px;padding:0px;line-height:1.5;font-size:12px;text-indent:2px'>网管中网元名称:"+jsonArray[e.target.dH]["WGZWYMC"]+"</div>" + "<div style='margin:0px;padding:0px;line-height:1.5;font-size:12px;text-indent:2px'>方位角:"+jsonArray[e.target.dH]["FWJ"]+"</div>" + "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>所属地市:"+jsonArray[e.target.dH]["SSDS"]+"</span> <span>所属区县:"+jsonArray[e.target.dH]["SSQX"]+"</span></div>"+ "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>经度:"+jsonArray[e.target.dH]["JD"]+"</span> <span>纬度:"+jsonArray[e.target.dH]["WD"]+"</span></div>"; var infoWindow = new BMap.InfoWindow(sContent); var point = new BMap.Point(jsonArray[e.target.dH]["BDJD"], jsonArray[e.target.dH]["BDWD"]); map.openInfoWindow(infoWindow,point); //开启信息窗口 }; //海量点 function showinfoMass(e){ if(e.target.lang==""){ return; } var sContent ="<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>所属地市:"+jsonArray[e.point.ghinfoIndex]["SSDS"]+"</span> <span>所属区县:"+jsonArray[e.point.ghinfoIndex]["SSQX"]+"</span></div>"+ "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>经度:"+jsonArray[e.point.ghinfoIndex]["JD"]+"</span> <span>纬度:"+jsonArray[e.point.ghinfoIndex]["WD"]+"</span></div>"; var infoWindow = new BMap.InfoWindow(sContent); var point = new BMap.Point(jsonArray[e.point.ghinfoIndex]["BDJD"], jsonArray[e.point.ghinfoIndex]["BDWD"]); map.openInfoWindow(infoWindow,point); //开启信息窗口 }; map.enableScrollWheelZoom(true);//启用地图滚轮放大缩小 </script> <script type="text/javascript"> //图层管理 function coverage(){ $("#dlgCoverage").dialog({ modal:true }); $("#dlgCoverage").dialog("open").dialog("setTitle","图层管理"); } //下拉框 $(function(){ var dsData=invokingserviceBreakSync("com.sdjxd.fzgh.common.DataDictionaryDao", "getDsCombo",[""]); if(dsData!=[]){ var jsonArray = JSON.parse(dsData); $("#ds").combobox("loadData",jsonArray); } }); //地市取值变化联动区县下拉框 function dsChange(newValue, oldValue){ if(newValue == ''){ $('#qx').combobox('clear'); $('#qx').combobox({disabled:true}); }else{ $('#qx').combobox({disabled:false}); var qxData=invokingserviceBreakSync("com.sdjxd.fzgh.common.DataDictionaryDao", "getQxCombo",[newValue.toString()]); if(qxData!=[]){ var jsonArray = JSON.parse(qxData); $("#qx").combobox("loadData",jsonArray); } } } //图层查询 function toggle(){ var base = new Object(); var lists = new Array(); var role = "";//站点类型 //图层是否选择 if(document.getElementById("zd2g").checked){ role="2G"; }else if(document.getElementById("zd3g").checked){ role="3G"; }else if(document.getElementById("zd4g").checked){ role="4G"; } //地市 var ds = $("#ds").combobox("getText"); if(ds==""){ ds=null; } //区县 var qx = $("#qx").combobox("getText"); if(qx==""){ qx=null; } //网管中网元名称 var wgzwymc = $("#wgzwymc").val(); if(wgzwymc==""){ wgzwymc=null; } if((ds==null||ds=="null"||ds==("--不限--"))&&(wgzwymc==null||wgzwymc=="null")){ alert("请选择您要查询的地区或网管中网元名称!"); }else{ base["ds"] = ds;//地市 base["qx"] = qx;//区县 base["wgzwymc"] = wgzwymc;//网管中网元名称 base["role"] = role;//站点类型 lists.push(base); var data=invokingserviceBreakSync("com.sdjxd.cssj.dao.XwsjShowMap", "getMapCssjTc",[JSON.stringify(lists)]); var jsonArray = JSON.parse(data); remove_overlay();//清除覆盖物 if(jsonArray!=""){ //图层第一次加载 if(jsonArray.length>200){ var points = []; //添加海量点数据 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var pt = new BMap.Point(bdjd, bdwd); points.push(pt); points[i]["ghinfoIndex"] = i; } var options = { size: BMAP_POINT_SIZE_BIG, shape: BMAP_POINT_SHAPE_STAR,//形状 color: '#d340c3' }; var pointCollection = new BMap.PointCollection(points,options); // 初始化PointCollection pointCollection.addEventListener('click',function(e){ showinfoMass(e); }); map.addOverlay(pointCollection); // 添加Overlay }else{ for(var i=0;i<jsonArray.length;i++){ var bdjd = jsonArray[i]["BDJD"]; var bdwd = jsonArray[i]["BDWD"]; var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 map.setViewport({center:new BMap.Point(bdjd,bdwd),//中心点 zoom:14}); //坐标单击展示信息 vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCov(e);//展示站点信息 }); } } //图层放大缩小地图 map.addEventListener("zoomend", function () { var s = 0;//记录点数 var zoomN = map.getZoom();//当前地图级别 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ s = s+1; } } if(s>=200){ remove_overlay();//清除覆盖物 var points = []; //添加海量点数据 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var pt = new BMap.Point(bdjd, bdwd); points.push(pt); points[i]["ghinfoIndex"] = i; } var options = { size: BMAP_POINT_SIZE_BIG, shape: BMAP_POINT_SHAPE_STAR,//形状 color: '#d340c3' }; var pointCollection = new BMap.PointCollection(points,options); // 初始化PointCollection pointCollection.addEventListener('click',function(e){ showinfoMassQ(e); }); map.addOverlay(pointCollection); // 添加Overlay }else{ remove_overlay();//清除覆盖物 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 var bs = map.getBounds();//获取可视区域 var bsne = bs.getNorthEast();//可视区域右上角 var bssw = bs.getSouthWest();//可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ //创建自定义图标 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 //展示站点信息 vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCov(e); }); } } } }); //图层平移地图 map.addEventListener("dragend", function(){debugger; var s = 0;//记录点数 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ s = s+1; } } if(s<=200){ remove_overlay();//清除覆盖物 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var bdfwj = jsonArray[i]["FWJ"];//展示站点的方位角 var bs = map.getBounds(); //获取可视区域 var bsne = bs.getNorthEast(); //可视区域右上角 var bssw = bs.getSouthWest(); //可视区域左下角 var rightLng = bsne.lng;//右上角经度 var topLat = bsne.lat;//右上角纬度 var leftLng = bssw.lng;//左下角经度 var bottomLat = bssw.lat;//左下角纬度 if(bdjd<=rightLng && bdjd>leftLng && bdwd>=bottomLat && bdwd<topLat){ //创建自定义图标 var vectorBOArrow = new BMap.Marker(new BMap.Point(bdjd,bdwd), { icon: new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {//图标 scale: 2,//尺寸大小 strokeWeight: 1,//图标边线 rotation: bdfwj,//顺时针旋转角度 fillColor: 'red',//颜色 fillOpacity: 0.8//透明度 }) }); //打点 map.addOverlay(vectorBOArrow);//方向向上的闭合箭头1 //坐标单击展示信息 vectorBOArrow.dH = i; vectorBOArrow.addEventListener('click',function(e){ showinfoCov(e);//展示站点信息 }); } } }else{ remove_overlay();//清除覆盖物 var points = []; //添加海量点数据 for(var i=0;i<jsonArray.length;i++){ var bdjd =jsonArray[i]["BDJD"]; var bdwd =jsonArray[i]["BDWD"]; var pt = new BMap.Point(bdjd, bdwd); points.push(pt); points[i]["ghinfoIndex"] = i; } var options = { size: BMAP_POINT_SIZE_BIG, shape: BMAP_POINT_SHAPE_STAR,//形状 color: '#d340c3' }; var pointCollection = new BMap.PointCollection(points,options); // 初始化PointCollection pointCollection.addEventListener('click',function(e){ showinfoMassQ(e); }); map.addOverlay(pointCollection); // 添加Overlay } }); } //关闭查询 $("#dlgCoverage").dialog("close"); resetValue();//重置 //图层最简单的用法,生成一个marker数组,然后调用markerClusterer类即可。 function showinfoCov(e){ if(e.target.lang==""){ return; } var sContent ="<div style='margin:0px;padding:0px;line-height:1.5;font-size:12px;text-indent:2px'>网管中网元名称:"+jsonArray[e.target.dH]["WGZWYMC"]+"</div>" + "<div style='margin:0px;padding:0px;line-height:1.5;font-size:12px;text-indent:2px'>方位角:"+jsonArray[e.target.dH]["FWJ"]+"</div>" + "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>所属地市:"+jsonArray[e.target.dH]["SSDS"]+"</span> <span>所属区县:"+jsonArray[e.target.dH]["SSQX"]+"</span></div>"+ "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>经度:"+jsonArray[e.target.dH]["JD"]+"</span> <span>纬度:"+jsonArray[e.target.dH]["WD"]+"</span></div>"; var infoWindow = new BMap.InfoWindow(sContent); var point = new BMap.Point(jsonArray[e.target.dH]["BDJD"], jsonArray[e.target.dH]["BDWD"]); map.openInfoWindow(infoWindow,point); //开启信息窗口 }; //图层海量点 function showinfoMassQ(e){ if(e.target.lang==""){ return; } var sContent ="<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>所属地市:"+jsonArray[e.point.ghinfoIndex]["SSDS"]+"</span> <span>所属区县:"+jsonArray[e.point.ghinfoIndex]["SSQX"]+"</span></div>"+ "<div style='margin:0;padding:0px;line-height:1.5;font-size:13px;text-indent:2px'><span style='width:160px'>经度:"+jsonArray[e.point.ghinfoIndex]["JD"]+"</span> <span>纬度:"+jsonArray[e.point.ghinfoIndex]["WD"]+"</span></div>"; var infoWindow = new BMap.InfoWindow(sContent); var point = new BMap.Point(jsonArray[e.point.ghinfoIndex]["BDJD"], jsonArray[e.point.ghinfoIndex]["BDWD"]); map.openInfoWindow(infoWindow,point); //开启信息窗口 }; } } //重置 function resetValue(){ $("#ds").combobox("setValue",""); $("#qx").combobox("setValue",""); $("#wgzwymc").val(""); if(menuUrl=="2GXX"){ $("#zd2g").attr("checked",true); $("#zd3g").attr("checked",false); $("#zd4g").attr("checked",false); }else if(menuUrl=="3GXX"){ $("#zd2g").attr("checked",false); $("#zd3g").attr("checked",true); $("#zd4g").attr("checked",false); }else if(menuUrl=="4GXX"){ $("#zd2g").attr("checked",false); $("#zd3g").attr("checked",false); $("#zd4g").attr("checked",true); } } </script> <script type="text/javascript"> var ruleSize = new BMap.Size(6,44); // 添加带有定位的导航控件 var navigationControl = new BMap.NavigationControl({ // 靠左上角位置 anchor: BMAP_ANCHOR_TOP_LEFT, // LARGE类型 type: BMAP_NAVIGATION_CONTROL_LARGE, // 启用显示定位 enableGeolocation: false, offset:ruleSize }); map.addControl(navigationControl); // 添加定位控件 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"> //右键菜单 var menu = new BMap.ContextMenu(); var txtMenuItem = [ { text:'放大', callback:function(){ map.zoomIn(); } }, { text:'缩小', callback:function(){ map.zoomOut(); } }, { text:'标尺', callback:function(){ var myDis = new BMapLib.DistanceTool(map); myDis.open(); //开启鼠标测距 } } ]; for(var i=0;i<txtMenuItem.length;i++){ menu.addItem(new BMap.MenuItem(txtMenuItem[i].text,txtMenuItem[i].callback,100)); } map.addContextMenu(menu); </script> <script type="text/javascript"> //添加控件 var size1 = new BMap.Size(80,20); var cr = new BMap.CopyrightControl({ anchor: BMAP_ANCHOR_TOP_RIGHT, offset: size1 }); //设置版权控件位置 map.addControl(cr);//添加版权控件 var bs = map.getBounds();//返回地图可视区域 cr.addCopyright({ id:1, content:"<div id='floatObj' style='border:solid 1px #D9E8FF;width: 85px;'><table id='itemObj' style='width: 85px;height: 30px;background-color:#FFF; ' >"+ "<tr><td width='35px'><img style='float:right ;' src='<%=basePath%>fzgh/showMap/image/gj.png'></td><td width='40px'><a onclick='slideToggle()' style='text-decoration:none;cursor: pointer;font-size: 14px' >工具</a> "+ "</td><td width='10px'><img onclick='slideToggle()' style='cursor: pointer;' src='<%=basePath%>fzgh/showMap/image/x.png'></td></tr></table><div class='line-u'></div><div class='line-d'></div>"+ "<div id='searchObj' style='display:none;width: 85px;background-color: #FFF;'><table style='width: 85px;height: 30px'><tr height='5px'></tr><tr><td width='25px'><img style='float:right;' src='<%=basePath%>fzgh/showMap/image/cj.png'></td>"+ "<td width='60px'><a onclick='range()' style='text-decoration:none; cursor: pointer;font-size: 14px' >测距</a></td></tr><tr height='6px'></tr><tr><td width='25px'><img style='float:right;' src='<%=basePath%>fzgh/showMap/image/bj.png'></td>"+ "<td width='60px'><a onclick='sign()' style='text-decoration:none; cursor: pointer;font-size: 14px' >标记</a></td></tr></table></div></div>", bounds:bs }); function slideToggle() { $("#searchObj").slideToggle(100);//窗帘效果的切换,点一下收,点一下开,参数可以无,参数说明同上 } $(function() { $("#searchObj").mouseleave(function() { $("#searchObj").hide(100); }); }); function range() { var myDis = new BMapLib.DistanceTool(map); myDis.open(); //开启鼠标测距 $("#searchObj").hide(100); } </script> </body> </html>
坐标获取部分
package com.sdjxd.cssj.dao; import com.google.gson.Gson; import com.sdjxd.json.JsonUtil; import com.sdjxd.pms.platform.data.DbOper; import java.io.UnsupportedEncodingException; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.RowSet; import net.sf.json.JSONObject; import sadmpweb.zzgl.CoordinateConvert; public class XwsjShowMap { public static String getCssjZdXx(String lists) throws SQLException { String[] str = JsonUtil.getStringArray4Json(lists); String st = "{" + str[(str.length - 1)].substring(1, str[(str.length - 1)].length() - 1) + "}"; JSONObject jsonObj = JSONObject.fromObject(st); String type = jsonObj.getString("type"); String ds = jsonObj.getString("ds"); if ((ds.equals(null)) || (ds.equals("null")) || (ds.equals("--不限--"))) { ds = ""; } String qx = jsonObj.getString("qx"); if ((qx.equals(null)) || (qx.equals("null")) || (qx.equals("--不限--"))) { qx = ""; } String wgzwymc = (jsonObj.getString("wgzwymc") == null) ? "" : jsonObj.getString("wgzwymc"); if ((wgzwymc.equals(null)) || (wgzwymc.equals("null"))) { wgzwymc = ""; } StringBuffer sb = new StringBuffer(); if ((ds.isEmpty()) && (qx.isEmpty()) && (wgzwymc.isEmpty())) { if (type.equals("2GXX")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_2G WHERE SSDS='济南' AND SSQX='历下区' "); else if (type.equals("3GXX")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_3G WHERE SSDS='济南' AND SSQX='历下区' "); else if (type.equals("4GXX")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,FWJ FROM V_SD_CSSJ_DATABASE_4G WHERE SSDS='济南' AND SSQX='历下区' "); } else { if (type.equals("2GXX")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_2G WHERE 1=1 "); else if (type.equals("3GXX")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_3G WHERE 1=1 "); else if (type.equals("4GXX")) { sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,FWJ FROM V_SD_CSSJ_DATABASE_4G WHERE 1=1 "); } if (!ds.isEmpty()) { sb.append(" AND SSDS = '" + ds + "' "); } if (!qx.isEmpty()) { sb.append(" AND SSQX = '" + qx + "' "); } if (!wgzwymc.isEmpty()) { sb.append(" AND WGZWYMC LIKE '%" + wgzwymc + "%' "); } } List list = new ArrayList(); RowSet re = DbOper.executeQuery(sb.toString()); while (re.next()) { Map map = new HashMap(); String jd = re.getString("JD"); String wd = re.getString("WD"); String bdjd = ""; String bdwd = ""; if ((!jd.isEmpty()) && (!wd.isEmpty())) { double gpsjd = Double.parseDouble(jd); double gpswd = Double.parseDouble(wd); double[] bdjdwd = CoordinateConvert.wgs2BD09(gpswd, gpsjd); bdjd = String.valueOf(bdjdwd[1]); bdwd = String.valueOf(bdjdwd[0]); } map.put("JD", jd); map.put("WD", wd); map.put("BDJD", bdjd); map.put("BDWD", bdwd); map.put("SHEETID", re.getString("SHEETID")); map.put("SSDS", re.getString("SSDS")); map.put("SSQX", re.getString("SSQX")); map.put("WGZWYMC", re.getString("WGZWYMC")); map.put("FWJ", re.getString("FWJ")); list.add(map); } Gson gson = new Gson(); return gson.toJson(list); } public static String getMapCssjTc(String lists) throws SQLException, UnsupportedEncodingException { String[] str = JsonUtil.getStringArray4Json(lists); String st = "{" + str[(str.length - 1)].substring(1, str[(str.length - 1)].length() - 1) + "}"; JSONObject jsonObj = JSONObject.fromObject(st); String type = jsonObj.getString("role"); if ((type.equals(null)) || (type.equals("null"))) { type = ""; } String ds = jsonObj.getString("ds"); if ((ds.equals(null)) || (ds.equals("null")) || (ds.equals("--不限--"))) { ds = ""; } String qx = jsonObj.getString("qx"); if ((qx.equals(null)) || (qx.equals("null")) || (qx.equals("--不限--"))) { qx = ""; } String wgzwymc = (jsonObj.getString("wgzwymc") == null) ? "" : jsonObj.getString("wgzwymc"); if ((wgzwymc.equals(null)) || (wgzwymc.equals("null"))) { wgzwymc = ""; } StringBuffer sb = new StringBuffer(); if (type.equals("2G")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_2G WHERE 1=1 "); else if (type.equals("3G")) sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,TXFX AS FWJ FROM V_SD_CSSJ_DATABASE_3G WHERE 1=1 "); else if (type.equals("4G")) { sb.append("SELECT SHEETID,SSDS,SSQX,WGZWYMC,JD,WD,FWJ FROM V_SD_CSSJ_DATABASE_4G WHERE 1=1 "); } if (!ds.isEmpty()) { sb.append(" AND SSDS = '" + ds + "' "); } if (!qx.isEmpty()) { sb.append(" AND SSQX = '" + qx + "' "); } if (!wgzwymc.isEmpty()) { sb.append(" AND WGZWYMC LIKE '%" + wgzwymc + "%' "); } List list = new ArrayList(); RowSet re = DbOper.executeQuery(sb.toString()); while (re.next()) { Map map = new HashMap(); String jd = re.getString("JD"); String wd = re.getString("WD"); String bdjd = ""; String bdwd = ""; if ((!jd.isEmpty()) && (!wd.isEmpty())) { double gpsjd = Double.parseDouble(jd); double gpswd = Double.parseDouble(wd); double[] bdjdwd = CoordinateConvert.wgs2BD09(gpswd, gpsjd); bdjd = String.valueOf(bdjdwd[1]); bdwd = String.valueOf(bdjdwd[0]); } map.put("JD", jd); map.put("WD", wd); map.put("BDJD", bdjd); map.put("BDWD", bdwd); map.put("SHEETID", re.getString("SHEETID")); map.put("SSDS", re.getString("SSDS")); map.put("SSQX", re.getString("SSQX")); map.put("WGZWYMC", re.getString("WGZWYMC")); map.put("FWJ", re.getString("FWJ")); list.add(map); } Gson gson = new Gson(); return gson.toJson(list); } }
GPS经纬度到百度经纬度的转换方法
package sadmpweb.zzgl; public class CoordinateConvert { private static double PI = 3.141592653589793D; private static double AXIS = 6378245.0D; private static double OFFSET = 0.006693421622965943D; private static double X_PI = PI * 3000.0D / 180.0D; public static double[] gcj2BD09(double glat, double glon) { double x = glon; double y = glat; double[] latlon = new double[2]; double z = Math.sqrt(x * x + y * y) + 2.E-005D * Math.sin(y * X_PI); double theta = Math.atan2(y, x) + 3.E-006D * Math.cos(x * X_PI); latlon[0] = (z * Math.sin(theta) + 0.006D); latlon[1] = (z * Math.cos(theta) + 0.0065D); return latlon; } public static double[] bd092GCJ(double glat, double glon) { double x = glon - 0.0065D; double y = glat - 0.006D; double[] latlon = new double[2]; double z = Math.sqrt(x * x + y * y) - 2.E-005D * Math.sin(y * X_PI); double theta = Math.atan2(y, x) - 3.E-006D * Math.cos(x * X_PI); latlon[0] = (z * Math.sin(theta)); latlon[1] = (z * Math.cos(theta)); return latlon; } public static double[] bd092WGS(double glat, double glon) { double[] latlon = bd092GCJ(glat, glon); return gcj2WGS(latlon[0], latlon[1]); } public static double[] wgs2BD09(double wgLat, double wgLon) { double[] latlon = wgs2GCJ(wgLat, wgLon); return gcj2BD09(latlon[0], latlon[1]); } public static double[] wgs2GCJ(double wgLat, double wgLon) { double[] latlon = new double[2]; if (outOfChina(wgLat, wgLon)) { latlon[0] = wgLat; latlon[1] = wgLon; return latlon; } double[] deltaD = delta(wgLat, wgLon); latlon[0] = (wgLat + deltaD[0]); latlon[1] = (wgLon + deltaD[1]); return latlon; } public static double[] gcj2WGS(double glat, double glon) { double[] latlon = new double[2]; if (outOfChina(glat, glon)) { latlon[0] = glat; latlon[1] = glon; return latlon; } double[] deltaD = delta(glat, glon); latlon[0] = (glat - deltaD[0]); latlon[1] = (glon - deltaD[1]); return latlon; } public static double[] gcj2WGSExactly(double gcjLat, double gcjLon) { double initDelta = 0.01D; double threshold = 1.E-009D; double dLat = initDelta; double dLon = initDelta; double mLat = gcjLat - dLat; double mLon = gcjLon - dLon; double pLat = gcjLat + dLat; double pLon = gcjLon + dLon; double i = 0.0D; double wgsLat; double wgsLon; do { wgsLat = (mLat + pLat) / 2.0D; wgsLon = (mLon + pLon) / 2.0D; double[] tmp = wgs2GCJ(wgsLat, wgsLon); dLat = tmp[0] - gcjLat; dLon = tmp[1] - gcjLon; if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold)) { break; } if (dLat > 0.0D) pLat = wgsLat; else mLat = wgsLat; if (dLon > 0.0D) pLon = wgsLon; else mLon = wgsLon; } while (++i <= 10000.0D); double[] latlon = new double[2]; latlon[0] = wgsLat; latlon[1] = wgsLon; return latlon; } public static double distance(double latA, double logA, double latB, double logB) { int earthR = 6371000; double x = Math.cos(latA * 3.141592653589793D / 180.0D) * Math.cos(latB * 3.141592653589793D / 180.0D) * Math.cos((logA - logB) * 3.141592653589793D / 180.0D); double y = Math.sin(latA * 3.141592653589793D / 180.0D) * Math.sin(latB * 3.141592653589793D / 180.0D); double s = x + y; if (s > 1.0D) s = 1.0D; if (s < -1.0D) s = -1.0D; double alpha = Math.acos(s); double distance = alpha * earthR; return distance; } public static double[] delta(double wgLat, double wgLon) { double[] latlng = new double[2]; double dLat = transformLat(wgLon - 105.0D, wgLat - 35.0D); double dLon = transformLon(wgLon - 105.0D, wgLat - 35.0D); double radLat = wgLat / 180.0D * PI; double magic = Math.sin(radLat); magic = 1.0D - OFFSET * magic * magic; double sqrtMagic = Math.sqrt(magic); dLat = dLat * 180.0D / ( AXIS * (1.0D - OFFSET) / (magic * sqrtMagic) * PI); dLon = dLon * 180.0D / (AXIS / sqrtMagic * Math.cos(radLat) * PI); latlng[0] = dLat; latlng[1] = dLon; return latlng; } public static boolean outOfChina(double lat, double lon) { if ((lon < 72.004000000000005D) || (lon > 137.8347D)) { return true; } return (lat < 0.8293D) || (lat > 55.827100000000002D); } public static double transformLat(double x, double y) { double ret = -100.0D + 2.0D * x + 3.0D * y + 0.2D * y * y + 0.1D * x * y + 0.2D * Math.sqrt(Math.abs(x)); ret += (20.0D * Math.sin(6.0D * x * PI) + 20.0D * Math.sin(2.0D * x * PI)) * 2.0D / 3.0D; ret += (20.0D * Math.sin(y * PI) + 40.0D * Math.sin(y / 3.0D * PI)) * 2.0D / 3.0D; ret += (160.0D * Math.sin(y / 12.0D * PI) + 320.0D * Math.sin(y * PI / 30.0D)) * 2.0D / 3.0D; return ret; } public static double transformLon(double x, double y) { double ret = 300.0D + x + 2.0D * y + 0.1D * x * x + 0.1D * x * y + 0.1D * Math.sqrt(Math.abs(x)); ret += (20.0D * Math.sin(6.0D * x * PI) + 20.0D * Math.sin(2.0D * x * PI)) * 2.0D / 3.0D; ret += (20.0D * Math.sin(x * PI) + 40.0D * Math.sin(x / 3.0D * PI)) * 2.0D / 3.0D; ret = ret + (150.0D * Math.sin(x / 12.0D * PI) + 300.0D * Math.sin(x / 30.0D * PI)) * 2.0D / 3.0D; return ret; } }