百度地图API之地图加载方式(同步、异步)

同步加载方式:

<%@page import="com.util.json.JSONArray"%>
<%@page import="com.util.json.JSONObject"%>
<%@page import="com.bean.CheckAttenceBean"%>
<%@page import="java.util.List"%>
<%@page import="com.service.impl.CheckAttenceService"%>
<%@page import="com.service.ICheckAttenceService"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
ICheckAttenceService checkAttenceService=new CheckAttenceService();
String beginDate="2012-12-12 00:00:00";
String endDate="2012-12-12 23:59:59";
JSONArray jsonArray = new JSONArray();
List<CheckAttenceBean> checkBeanList=checkAttenceService.queryCheckEmps(beginDate, endDate);
for(CheckAttenceBean chBean:checkBeanList){
JSONObject jObect = new JSONObject();
jObect.put("empLng", chBean.getCheckAttLng());// 经纬度
jObect.put("empLat", chBean.getCheckAttLat());// 经纬度
jsonArray.put(jObect);
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>调度查堪人员</title>
<link type="text/css" rel="stylesheet" href="<%=basePath%>css/common.css"></link>
<script type="text/javascript" src="<%=basePath%>js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/api?key=3e280f09aae77af4248eb99129b3badc&v=1.3&services=false"></script>
</head>
<body>
<div id="createCaseMap"></div>
<script type="text/javascript">
var empCount=0;//在勤的理赔人员总数
var tempPoints=new Array();//存放理赔人员的信息
var empPoints=new Array();//存放理赔人员的信息

tempPoints=eval('<%=jsonArray.toString()%>');
//alert(tempPoints);
for(var i=0,m=tempPoints.length;i<m;i++){
var obj=tempPoints[i];
empPoints[i]=obj.empLng+","+obj.empLat;
//alert(obj.empLng+"---"+obj.empLat);
}
//alert(empPoints.length);
var map=new BMap.Map("createCaseMap");
var point=new BMap.Point(106.540983, 29.560692);//初始化点坐标
map.centerAndZoom(point, 15);   //初始化地图,设置中心点坐标和地图级别   


var points =[];//存放标注查堪人员的对象
//alert("start:"+empPoints.length);
for(var i=0,k=empPoints.length;i<k;i++){
var onePoint=empPoints[i];
if(onePoint.indexOf(",")>-1){
var lng=onePoint.split(",")[0];
var lat=onePoint.split(",")[1];
points[i]=new BMap.Point(lng, lat);//动态的把所有的在勤理赔人员经纬度设置在points中 
}
} 

//自定义覆盖物
var myIcon =new BMap.Icon("<%=basePath%>/images/map/redflag.png", new BMap.Size(100, 70),{//小车图片
   offset: new BMap.Size(0, -5),    //相当于CSS精灵
   imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了使图片底部中心对准坐标点。
 });

//alert("addOverlay:"+points.length);
for(var j=0,m=points.length;j<m;j++){
//如果使用map.addOverlay添加大量数据时,会使浏览器变慢
map.addOverlay(new BMap.Marker(points[j],{icon:myIcon}));
}


map.setViewport(points);         //调整地图的最佳视野为显示标注数组point

map.addEventListener('click',function(e){
alert(e.point.lng+","+e.point.lat);
});

</script>
</body>
</html>

在上面的同步加载方式中,使用jquery的ajax同步加载可以实现上面的代码

ICheckAttenceService checkAttenceService=new CheckAttenceService();
String beginDate="2012-12-12 00:00:00";
String endDate="2012-12-12 23:59:59";
JSONArray jsonArray = new JSONArray();
List<CheckAttenceBean> checkBeanList=checkAttenceService.queryCheckEmps(beginDate, endDate);
for(CheckAttenceBean chBean:checkBeanList){
JSONObject jObect = new JSONObject();
jObect.put("empLng", chBean.getCheckAttLng());// 经纬度
jObect.put("empLat", chBean.getCheckAttLat());// 经纬度
jsonArray.put(jObect);
}

使用jqueyr的ajax方式如下:

function ajaxLoadRequestTask(){
	var addPointsArray="";
	$.ajax({
		type:'post',
		url:'task_getRequestTask.action',
		dataType:'json',
		async:false,//同步加载数据
		cache:false,
		success:function(json){
			addPointsArray=json["sendData"];
			/*for(var i=0;i<jsonArray.length;i++){
				var oneJson=jsonArray[i];
				alert(oneJson["emplId"]);
			}*/
		},
		error:function(json){
			$.messager.alert('提示','加载流转任务的数据失败!'); 
		}
		
	});
	return addPointsArray;
}
如果ajax的同步加载(async:false)不使用,采用默认的加载是异步,即async:true,这样加载出的数据不能赋值给一个js数组变量,使用同步加载方式就可以,是我在网上搜了很久,才找到了问题所在.其实说起ajax的同步与异常加载数据,一看就明白,但用起来不一定真的明白使用场景.

此处让我明白了同步与异步使用的不同场景.


异步加载方式:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>调度查堪人员</title>
<link type="text/css" rel="stylesheet" href="<%=basePath%>css/common.css"></link>
<script type="text/javascript" src="<%=basePath%>js/jquery-1.8.2.js"></script>
</head>
<body>
<div id="createCaseMap"></div>
<script type="text/javascript">
var empCount=0;//在勤的理赔人员总数
var empPoints=new Array();//存放理赔人员的信息

/**
*获取所有的在勤的理赔人员
*/
function getEmployeePostion(){
//alert("getEmployeePostion");
var empPointArray=new Array();
$.ajax({
type:'post',
url:'./checkatt_getCheckAttList.action',
dataType:'json',
success:function(data){
for(var i=0;i<data.length;i++){
var obj=data[i];
empPointArray[i]=obj.empLng+","+obj.empLat;
//alert(obj.empLng+"---"+obj.empLat);
}
},
error:function(data){
alert('error!');
}
});

return empPointArray;
}



function loadScript(){
empPoints=getEmployeePostion();//初始化所有的在勤人员
//alert("init emp:"+empPoints.length);
var scriptDom=document.createElement("script");
scriptDom.src="http://api.map.baidu.com/api?key=3e280f09aae77af4248eb99129b3badc&v=1.3&services=false&callback=initialize";
document.body.appendChild(scriptDom);

}

/**
*初始百度地图
*/
function initialize(){
var map=new BMap.Map("createCaseMap");
var point=new BMap.Point(106.540983, 29.560692);//初始化点坐标
map.centerAndZoom(point, 15);   //初始化地图,设置中心点坐标和地图级别   
empCount=empPoints.length;//设置所有 的理赔人员
var points =[];//存放标注查堪人员的对象
//alert(empCount);
for(var i=0,k=empPoints.length;i<k;i++){
var onePoint=empPoints[i];
//alert("for-->"+onePoint);
if(onePoint.indexOf(",")>-1){
var lng=onePoint.split(",")[0];
var lat=onePoint.split(",")[1];
points[i]=new BMap.Point(lng, lat);//动态的把所有的在勤理赔人员经纬度设置在points中
}
} 


//自定义覆盖物
var myIcon =new BMap.Icon("<%=basePath%>/images/map/redflag.png", new BMap.Size(100, 70),{//小车图片
   offset: new BMap.Size(0, -5),    //相当于CSS精灵
   imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了使图片底部中心对准坐标点。
 });


for(var m=0;m<empCount;m++){
//如果使用map.addOverlay添加大量数据时,会使浏览器变慢
map.addOverlay(new BMap.Marker(points[m],{icon:myIcon}));
}

map.setViewport(points);         //调整地图的最佳视野为显示标注数组point

map.addEventListener('click',function(e){
//1、TODO 处理经纬度相同的人员在地图上的显示问题
//不能通过经纬度来查询出员工的个人信息、任务量
alert(e.point.lng+","+e.point.lat);
});
//alert("map初始化完成");
}


window.οnlοad=loadScript;
</script>
</body>
</html>

在上面采用异步加载方式时,在FF浏览器下加载N次地图上的标注点都没问题,但在IE6、7、8、Chrome下只有第一次加载标注点的坐标可以,第二次后就不能了,不知为什么,麻烦知道是怎么回事的兄弟给我说下,目前我在项目中采用同步加载方式.

上面红色字体就是解决我异步加载数据时出现的问题.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack 异步加载的原理是利用 require.ensure 这个 API,它可以将指定的文件打包成一个可以异步加载的 chunk。具体步骤如下: 1. 在 webpack 配置文件中,通过引入 require.ensure API,将需要异步加载的文件进行单独打包。 2. 在 webpack 的输出的 runtime 代码中,会包含异步 chunk 的 id 及路径信息。 3. 当页面需要加载异步 chunk 时,会根据异步 chunk 的 id 发起请求,并将其下载到客户端。 4. 异步 chunk 下载完成后,可以通过回调函数或 Promise 的方式执行相应的代码逻辑。 以上就是 webpack 异步加载的基本原理。通过将需要异步加载的代码单独打包成 chunk,并在需要的时候动态加载,可以提高页面的加载速度和性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解webpack2异步加载套路](https://download.csdn.net/download/weixin_38520192/13606882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [从Webpack的同步/异步加载加载顺序到循环依赖到开发习惯](https://blog.csdn.net/weixin_42274805/article/details/123639416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Webpack的异步加载原理及分包策略](https://blog.csdn.net/qq_41581588/article/details/127007481)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值