有人碰到过百度地图如何检查内存泄露问题题吗

内存泄露?_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,768贴子:
内存泄露?收藏
我一次添加了100个polygon到地图上,然后执行clearOverlays();然后再添加100个polygon,再清除,循环n次,内存越来越大,按道理说应该是内存一直维持在一个恒定值啊,用sieve看inuse的dom每次都增加几百个,从不减少。 用getOverlays()获取覆盖物数组的长度,到是固定在100个,我感觉clearoverlays()只是从地图上移除了覆盖物,没有从浏览器里清除干净啊。js api ie8
网站建设,快速实现全网营销,费用超低
我也遇到同样问题
登录百度帐号推荐应用青青子衿, 悠悠我心, 但为君故, 沉吟至今
程序开发使用地图API时需注意的问题
  最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图。毕竟Google地图在技术和成熟度上完胜百度地图,当然百度也在慢慢追赶,希望有一天大家都能用上咱们自己的好用的地图服务。  现在把碰到的问题和解决方案罗列一下:
版权:如果是大量商用的话,还是得事先注意一下版权意识,不然到时候就很被动了。两者的免费版都不允许商业应用,具体可以看这里,。不过在万能的国度,也有其他解决方案,其他的大家可以google一下。
GPS偏差(仅限中国国大陆地区):刚开始在看API文档时,没太注意这样一句话[百度对外接口的坐标系,都是经过国家测绘局加密处理,符合国家测绘局对地理信息保密要求]&悲催了。这就是中国特色()。我们的需求是:根据手机GPS获得的坐标跟用户从地图上选择的坐标进行比较,然后决定是否在用户进入或离开该区域进行提醒。由于百度对外提供的坐标系是百度自己的坐标系,而手机GPS获得的是原始坐标,两者不在一个坐标系上,所以有很大的误差,我们测试了一下,误差在千米之外。所以必须得把两者换成统一坐标系。换成原始GPS坐标在国内原则上是违法的,所以只能统一成各个地图运营商自己的坐标系,比如百度坐标系或者google坐标系。
API性能比较,请参照:
如何转换成百度坐标系:官方文档给的是:坐标转换接口非公开。请将您的公司名称、项目名称、项目简介、联系人和联系方式,发邮件至咨询。有专人为您解答。说白了就是收钱,不过这个东西在网上有人透露了。我试过还挺好使。
http://api./ag/coord/convert?from=0&to=4&x=longitude&y=latitude
from: 来源坐标系&& (0表示原始GPS坐标,2表示Google坐标)
& to: 转换后的坐标& (4就是百度自己啦,好像这个必须是4才行)
&& x: 精度
&& y: 纬度
返回的结果是一个json字符串:
{&error&:0,&x&:&MTIxLjUwMDIyODIxNDk2&,&y&:&MzEuMjM1ODUwMjYwMTE3&}
error:是结果是否出错标志位,&0&表示OK
&&& x: 百度坐标系的精度(Base64加密)
&&& y: 百度坐标系的纬度(Base64加密)
百度还提供了js的转换工具,可参考官方链接:
如何转换成google坐标系:
/maps/vp?spn=0.0,0.0&z=18&vp=latitude,longitude注意,google的参数里经纬度是反过来的。相关详细见.cn/s/blog_65bd7eef0100hu5o.html
使用地图的时候也需要注意:1:使用BMapManager一定要最后调用stop和destroy2:使用MyLocationOverlay的时候,如果enableMyLocation之后一定接的disable掉3:其实就一个原则,记得及时安全的资源释放,特别是这种全局资源(用户很care的)
LocationManager.addProximityAlert()可以试用,但是不好控制,特别是他的启动间隔无法控制,最好还是自己实现相关的功能,然后在准确度和耗电上根据应用找到一个好的平衡点。
如何通过LocationManager获取用户的最佳当前位置 =》
  作者:foxracle,。
  除非注明,文章均为原创,转载请以链接形式标明本文地址
  本文地址:
赞助商广告
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.前一篇谈及到了整合的应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图、ECharts和HT for Web三者结合起来也做一个类似空气质量报告的报表+拓扑图应用,于是有了下面的Demo:
在这个Demo中,将拓扑图组件添加到百度地图组件中,覆盖在百度地图组件之上,并且在百度地图组件上和GraphView拓扑图组件上分别添加事件监听,相互同步经纬度和屏幕位置信息,从而来控制拓扑图上的组件位置固定在地图上,并在节点和节点之间的连线上加上了流动属性。右下角的图标框是采用的Panel面板组件结合ECharts图表组件完成的。
接下来我们来看看具体的代码实现:
1.百度地图是如何与HT for Web组件结合的;
map = new BMap.Map("map");
var view = graphView.getView();
view.className = 'graphView';
var mapDiv = document.getElementById('map');
mapDiv.firstChild.firstChild.appendChild(view);
首先需要在body中存在id为map的div,再通过百度地图的api来创建一个map地图对象,然后创建拓扑图组件,并获取GraphView组件中的view,最后将view添加到id为map的div的第二代孩子节点中。这时候问题就来了,为什么要将view添加到map的第二代孩子节点中呢,当你审查元素时你会发现这个div是百度地图的遮罩层,将view添加到上面,会使view会是在地图的顶层可见,不会被地图所遮挡。
2.百度地图和GraphView的事件监听;
map.addEventListener('moveend', function(e){
resetPosition();
map.addEventListener('dragend', function(e){
resetPosition();
map.addEventListener('zoomend', function(e){
resetPosition();
graphView.handleScroll = function(){};
graphView.handlePinch = function(){};
function resetPosition(e){
graphView.tx(0);
graphView.ty(0);
dataModel.each(function(data){
var lonLat,
if(data instanceof ht.HtmlNode){
if(data.getId() != 'chartTotal') {
position = data.getHost().getPosition();
position = {x: position.x + 168, y: position.y + 158};
data.setPosition(position.x, position.y);
} else if(data instanceof ht.Node){
lonLat = data.lonL
position = map.pointToPixel(lonLat);
data.setPosition(position.x,position.y);
首先监听map的三个事件:moveend、 dragend、 zoomend,这三个事件做了同一件事--修改DataModel中所有data的position属性,让其在屏幕上的坐标与地图同步,然后将GraphView的Scroll和Pinch两个事件的执行函数设置为空函数,就是当监听到Scroll或者Pinch事件时不做任何的处理,将这两个事件交给map来处理。
在resetPosition函数中,做的事情很简单:遍历DataModel中的data,根据它们各自在地图上的经纬度来换算成屏幕坐标,并将坐标设置到相应的data中,从而达到中的节点能够固定在地图上的效果。
3.创建右下角的图表组件:
ht.Chart = function(option){
var self = this,
view = self._view = document.createElement('div');
view.style.position = 'absolute';
view.style.setProperty('box-sizing', 'border-box', null);
self._option =
self._chart = echarts.init(self.getView());
if(option)
self._chart.setOption(option);
self._FIRST =
ht.Default.def('ht.Chart', Object, {
ms_fire: 1,
ms_ac: ['chart', 'option', 'isFirst', 'view'],
validateImpl: function(){
var self = this,
chart = self._
chart.resize();
if(self._FIRST){
self._FIRST =
chart.restore();
setSize: function(w, h){
var view = this._
view.style.width = w + 'px';
view.style.height = h + 'px';
function createPanel(title, width, height){
chart = new ht.Chart(option);
var c = chart.getChart();
c.on(echarts.config.EVENT.LEGEND_SELECTED, legendSelectedFun);
var chartPanel = new ht.widget.Panel({
title: title,
restoreToolTip: "Overview",
width: width,
contentHeight: height,
narrowWhenCollapse: true,
content: chart,
expanded: true
chartPanel.setPositionRelativeTo("rightBottom");
chartPanel.setPosition(0, 0);
chartPanel.getView().style.margin = '10px';
document.body.appendChild(chartPanel.getView());
首先定义了ht.Chart类,并实现了validateImpl方法,方法中处理的逻辑也很简单:在每次方法执行的时候调用图表的reset方法重新设定图标的展示大小,如果该方法是第一次执行的话,就调用图表的restore方法将图表还原为最原始的状态。会有这样的设计是因为ht.Chart类中的view是动态创建的,在没有添加到dom之前将一直存在于内存中,在内存中因为并没有浏览器宽高信息,所以div的实际宽高均为0,因此chart将option内容绘制在宽高为0的div中,即使你resize了chart,如果没用重置图表状态的话,图表状态将无法在图表上正常显示。
接下来就是创建panel图表组件了,这是的Panel组件的基本用法,其中content属性的值可以是HT for Web的任何组件或div元素,如果是HT fro Web组件的话,该组件必须实现了validateImpl方法,因为在panel的属性变化后将会调用content对应组件的validateImpl方法来重新布局组件内容。
4.ECharts和的交互:
legendSelectedFun = function(param) {
if(chart._legendSelect){
delete chart._legendS
var id = nodeMap[param.target],
dm = graphView.dm(),
data = dm.getDataById(id),
sm = dm.sm(),
selection = sm.getSelection();
if(param.selected[param.target]) {
sm.appendSelection([data]);
if(selectionData.indexOf(param.target) & 0){
selectionData.push(param.target);
sm.removeSelection([data]);
var index = selectionData.indexOf(param.target);
if(index &= 0){
selectionData.splice(index, 1);
sm.setSelection(selection.toArray());
graphView.mi(function(e){
(e.kind, e.data);
var c = chart.getChart(),
legend = c.component.legend,
selectedMap = legend.getSelectedMap();
if(e.kind === 'endRectSelect'){
chart._legendSelect =
for(var name in notes){
legend.setSelected(name, false);
notes = {};
graphView.dm().sm().each(function(data){
var note = data.s('note');
notes[note] = 1;
for(var name in notes){
legend.setSelected(name, true);
} else if(e.kind === 'clickData'){
chart._legendSelect =
var data = e.
if(data instanceof ht.Node){
var note = data.s('note');
var selected = legend.isSelected(note);
if(selected){
graphView.dm().sm().removeSelection([data]);
legend.setSelected(note, !selected);
legendSelectedFun函数是EChart图表的legend插件选中事件监听,其中处理的逻辑是:当legend插件中的某个节点被选中了,也选中在拓扑图中对应的节点,当取消选中是,也取消选中GraphView拓扑图中对应的节点。
在GraphView中添加交互监听,如果在GraphView中做了框选操作,在框选结束后,将原本legend插件上被选中的节点取消选中,然后再获取被选中节点,并在legend插件上选中对应节点;当GraphView上的节点被选中,则根据legend插件中对应节点选中情况来决定legend插件中的节点和graphView上的节点是否选中。
在GraphView交互中,我往chart实例中添加了_legendSelect变量,该变量的设定是为了阻止在GraphView交互中修改legend插件的节点属性后回调legendSelectedFun回调函数做修改GraphView中节点属性操作。
今天就写到这吧,希望这篇文章能够帮到那些有地图、、图表相结合需求的朋友,在设计上可能想法还不够成熟,希望大家不吝赐教。
浏览: 71706 次
好酷,这是怎么做的
推荐一本书,html5 canvas核心技术
图形、动画和游 ...
xhload3d 写道zhunengfei 写道你这个略叼,要 ...
zhunengfei 写道你这个略叼,要是有个Demo就好了, ...
你这个略叼,要是有个Demo就好了,你说的我没接触过 ,不过以 ...后使用快捷导航没有帐号?
暂时没有人问过相似的问题,你可以做第一个提问题的人
查看: 1536|回复: 12
内存泄露问题
在web地图调用PantTo定位地图,在使用聚合方式时存在严重的内存泄露问题,长时间使用导致浏览器崩溃!
好的,我们会调查一下这个问题。
谢谢,希望能尽快给个答复,工程项目中要用到
能详细的描述一下使用情境和代码么
本帖最后由 zxwqh_sf 于
11:21 编辑
能详细的描述一下使用情境和代码么
地图增加了若干报警点位置,使用demo中默认聚合点方式增加,根据收到报警定位到地图报警点。只要使用panto的noAnimation:true或者noAnimation:false方式以及centerAndZoom方式移动地图,均都发现浏览器中内存泄露,测试中移动比较频繁,长时间后浏览器崩溃。浏览器中增加大量object对象无法释放。_listeners下数组数量不断增加。
只要不调用panto或者centerAndZoom函数,就不存在内存泄露
(164.64 KB, 下载次数: 0)
11:19 上传
chrome profile截图
地图增加了若干报警点位置,使用demo中默认聚合点方式增加,根据收到报警定位到地图报警点。只要使用panto ...
好的,我们会调查一下这个问题。
谢谢,希望能尽快给个答复,工程项目中要用到
这个问题什么时候能答复啊,我也崩溃了
这个问题什么时候能答复啊,我也崩溃了
呵呵,我也在等,我比你还着急,问题解决了我会回复的
呵呵,我也在等,我比你还着急,问题解决了我会回复的
加我QQ,互相学习下
好的,我们会调查一下这个问题。
都10天了,调查有结果么,有没有解决方案,给个答复吧!!!
好的,我们会调查一下这个问题。
请问调查有结果了么!!
请问调查有结果了么!!
顶一下,请百度工程师给个答复吧,这样耗着怪难受啊!
本帖最后由 zxwqh_sf 于
09:35 编辑
好的,我们会调查一下这个问题。
问题反馈了23天了,自7月1日回复后再也没有消息了,帖子里问过几次,短消息也发过几会,好歹是中国互联网龙头企业之一,就这样不理不睬么?和亚马逊aws比,这服务差别是太大了!
问题反馈了23天了,自7月1日回复后再也没有消息了,帖子里问过几次,短消息也发过几会,好歹是中国互联网 ...
顶!!!!!!!!!!!!!!!!!!!!!!!!!
Powered by

我要回帖

更多关于 java内存泄露的问题 的文章

 

随机推荐