百度地图

百度地图的放大缩小、平移、海量点、坐标方位标志及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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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;
  }
}

 

posted @ 2017-04-26 09:29  平林漠漠  阅读(455)  评论(0编辑  收藏  举报