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

百度地图的异步加载方法 异步加载目的是在一些场景下,提升网页的渲染性能。 普通同步加载代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial- 阅读详情

同步加载方式:

<%@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.onload=loadScript;
</script>
</body>
</html>

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

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

百度webgis-api-异步加载 文章目录一、异步加载1. 为什么选择异步加载2. 处理js脚本的常规操作1). js和html混合在一起的场景2). js和html分开场景,js是单独的文件。3. 百度地图api提供的加载方式4. 加载百度地图示例5. 当百度api遇到vue1). 组件式封装产生的问题2). vue的异步加载 一、异步加载 1. 为什么选择异步加载 浏览器解析html文件时,从上向下解析构建DOM树。当解析到script标签时,会暂停DOM构建。先把脚本加载并执行完毕,才会继续向下解析。js脚本的存在会阻塞DOM解析,进 阅读详情

相关推荐

Echarts 百度地图API+散点图

这里写目录标题申请百度AK用echarts + 百度地图绘制散点图1、准备工作2、绘制地图3、绘制散点图4、自定义百度地图样式完整代码 申请百度AK 高德地图也差不多: https://lbs.amap.com/api/webservice/summary/ http://lbsyun.baidu.com/apiconsole/key?application=key 在控制台创建应用,根据自己的需求填写即可。 提交之后你就可以在"应用管理–>我的应用"里看到创建的应用,列表会有一个AK(API就

Sartin的博客 3337

vue 异步引入百度地图,不在index.html引入(不在登录页加载地图)

vue 异步引入百度地图,不在index.html引入(不在登录页加载地图)

zkkwe的博客 559

retrofit 解析百度地图api 返回数据_新版百度地图建筑数据含高度解析

注:本文中所述内容仅作为研究用途,不包括任何技术细节,不提供数据爬取、非法攻击的咨询和支持。另:百度建筑轮廓数据中存在明显签名式错误,下载使用容易被追求侵权。矢量瓦片:爬取百度地图必须要了解矢量瓦片。矢量瓦片是二进制数据。技术以maxbox为标准。详情可以参考矢量地理数据如何切片?WebGL:OpenGL的一个javascript绑定。WebGL可以为HTML5 Canvas提供硬件3D加速渲染,...

weixin_39747807的博客 3579

百度地图API异步加载,提高页面效率

//#region 获取函数名称 var getFnName = function (callee) { var _callee = callee.toString().replace(/[\s\?]*/g, ""), comb = _callee.length >= 50 ? 50 : _callee.length; _callee = _callee.substri

小z 3522

百度地图批量坐标的加载及其使用案例

场景 在页面中加载百度地图 数据模拟99棵树木 加载每一颗树木位置(采用覆盖物) 患病-红色 健康-黑色 鼠标悬浮覆盖物显示名称 问题 1:百度API目前一次最多只支持10个点坐标转换 超过时候data.status = 25 个数非法,超过限制(博客里有说明) 问题 2:坐标转换的callback是异步的,若在for循环中调用则会使坐标顺序打乱 当数据超过10,覆盖物显示不了name属性 解决办法: 1.将大数组分成小数组存放,每次解决10个 2.将每次的异步请求记录下 3.在springbo

荒的博客 1966

基于百度地图API的Web开发实战指南

随着互联网技术的发展,Web地图应用已成为各类信息系统中不可或缺的组成部分。通过地图服务,用户可以直观地获取地理位置信息、路径导航、周边资源等实用功能。百度地图API作为国内主流的地图服务平台之一,提供了丰富的功能接口,如地图初始化、标注、路线规划、地理编码等,广泛应用于LBS(基于位置的服务)、出行、物流、电商等多个领域。对于Web开发者而言,掌握地图应用的开发流程,能够显著提升产品的交互性与实用性。

weixin_31419153的博客 971

百度地图API ajax异步获取数据库信息 页面显示多点标注和标注框

var map = new BMap.Map("allmap");          // 创建地图实例       var point = new BMap.Point(108.955665, 34.274037);  // 创建点坐标       map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别   

weixin_39485364的博客 2881

基于百度地图API的地图测距应用实战详解

创建一个基本标记点只需传入一个BMap.Point实例:其中方法将标记添加至地图图层栈中。标记默认使用蓝色水滴图标,但可通过Icon类进行深度定制:});参数说明:- 第一个参数:图标图片URL;- 第二个参数:图标尺寸(width, height);anchor:图标锚点,决定地理坐标落在图标的哪个像素位置(如底部中心);:信息窗口开启时的相对偏移点;常见应用场景包括:- 使用车辆图标表示实时位置;

weixin_35750747的博客 1463

c语言接入百度地图api,百度地图API之地图加载方式(同步、异步)

[java]同步加载方式:[java]String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";ICheckAttenceService checkAttenceServ...

weixin_33872754的博客 827

百度地图应用,动态加载数据。

百度地图应用,有坐标转换,获取定位,点位的坐标和建筑物,动态加载数据。

通俗解析:霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器的实战选型指南

本文深入解析了霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器五大主流编码器的工作原理与核心特性。通过对比精度、环境耐受性、成本及寿命等关键维度,并结合消费电子、工业自动化、汽车电子及极端环境等典型应用场景,提供了一份清晰的实战选型指南,旨在帮助工程师根据具体需求,在性能、可靠性与成本间做出最优决策。

weixin_29216353的博客 253

百度地图埋点动态插入到页面不生效, 定位发现是 document.write 缘故,不能异步引入该埋点 js

试了下放到各个位置, 都不行, 网上搜了下, 说是必须在 document.write 文档流还没关闭时引入, 所以不能异步引入 — 动态插入 script , 或者 async , defer 之类的。为提高页面加载速度, 根据地址的不同加载不同的 script (Vue 项目, 一份代码放到多个地址, 根据地址不同显示不同登录页), 结果引用的百度地图 api 失效。之前加上 script, 里面加上地址判断, 通过判断则用。加载百度地图埋点代码。

汤一飞 387

Linear超高PSRR线性稳压器-典型应用电路解析

本文整理完了LT3045数据手册内所有的典型应用电路,试图让沉默的电路开口,简单介绍了他们这样做的目的和原理,从中我们可以更加熟悉这颗经典芯片的应用。但也有一些电路并没有搞懂,遗留下了不少问题。

硬件工程师笔记 2937

QT QWebEngineView加载百度地图

Qt5.5之后使用新的QWebEngineView代替了之前的QWebKit,加载数据的方式也由同步变成了异步。所以访问网站页面和加载HTML页面都需要使用QWebEngineView类。 项目要求在程序中显示地图,并能够通过串口接收无人机上图传里的GPS实时传回来的经纬度,并在地图上画出无人机的飞行轨迹。由于需要在QT中加载百度地图,所以需要用QWebEngineView进行QT与HTML/JavaScript的交互,在HTML文件中调用百度地图的API显示地图和地图上的一些控件。因为要实时显示无人机的

Sakuya__的博客 6458

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可。

S_White_Island的博客 1万+

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 421

android开发调用百度地图api实现加载地图和定位

陈述一些使用百度地图SDK中遇到的问题以及解决方法

qq_53162179的博客 3332

网络可视化工具netron详细安装流程

netron安装目录1.netron 简介2.不同操作系统下的安装使用方式2.1 在线版本:只要有浏览器就可以2.2 不同操作系统安装使用3.netron支持的网络框架4.netron测试演示 1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构。如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构。 这时,就可以使用netron可视化工具,可以清晰的看到每一层的输入输出,网络总体的架构,而且支持各种不同网络框架,简单好用。 2.不同操作系统下的安装使用方式 2.1

江南研习社 12万+

JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined...

百度地图官网文档介绍使用JSSDK时,仅提供了2种引入方式: script引入 异步加载 实际工作场景中仅某一两个页面或者只是单纯有功能需要用到百度地图,所以没有必要在index.html中全局引用。 利用之前博客所写的JavaScript---动态加载script和style样式 进行操作,发现如下错误: Failed to execute 'write' on 'Do...

weixin_33969116的博客 1万+

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

WW、forever的博客 2152

机器学习笔记——30种常见机器学习算法简要汇总

本笔记介绍机器学习中常见的30种机器学习算法。

haopinglianlian的博客 3195

vue3整合百度地图,同步异步两种方式

首先说明这种没整合聚合库。如果要整合聚合库看下篇文章 1,在需要引入地图的页面加上 2,引入百度地图,在public文件夹下面的,index.html 然后直接new bmap 第二种,异步加载百度地图 删去index.html的那句引用,新建msp.js 在需要引入百度地图的页面加上 然后异步加载 谢谢大家!有什么不懂的可以留言......

m0_54804239的博客 1323

PCB仿真软件:Altium Designer_(18).PCB设计中的热管理

在PCB设计中,热管理是一个至关重要的环节。随着电子设备的集成度越来越高,功耗和发热量也随之增加,不合理的热设计可能导致电路板过热,从而影响电路的性能和可靠性。热管理不仅能够提高电路板的使用寿命,还能确保电路在各种环境条件下的稳定工作。本节将详细介绍如何在Altium Designer中进行有效的热管理,包括热分析、热设计和热仿真等关键步骤。

kkchenjj的博客 1984

百度地图API详解之地图初始化

从今天开始我会陆续写一些有关百度地图API开发的文章,每篇文章会针对API的某个功能进行详细的讲述。本文将介绍有关地图初始化部分的内容(本系列文章将使用最新版本的API)。 地图初始化是开发地图应用的第一步,只有初始化完成后才能开始其他功能的开发。否则地图将不能正常工作。 首先,我们要准备一个HTML容器用来显示地图,这里选用一个div元素,同时设置好宽度和高度。代码如下:

Dr_YINING的博客 2305

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HTML引用百度地图API

百度地图之HTML 参考API网址 -- Web开发 JavaScript API http://lbsyun.baidu.com/index.php?title=jspopularGL /* * 主JAVA后台开发,前端语法问题请自行优化^_^,留言提示 * 个人建议,新手先看开发指南,配好环境,然后去示例demo直接找相似功能拿代码,调试过程去看参考类 */ HTML <!DOCTYPE html> <html lang="en"> <head> <

weixin_45711444的博客 1707

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

nuxt项目以及vue项目中使用百度地图api

Question?如何在nuxt项目以及vue项目中使用百度地图api? 1》省略获取百度api密钥 2》新建map.js脚本 /**注意nuxt项目中此脚本放在plugins目录**/ if(process.browser){ !function (mapInit) { var script = document.createElement("script"); scrip...

菜鸟老五 2884

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: JAVA 使用httpclient、XFire方式调用Web Service的方法
下一篇: mysql获取按日期排序获取最新的记录
developerFBI
博客等级 码龄15年 174粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值