SharpMap AjaxMapControl 中 Zoomin/Zoomout 操作时冻结问题

转载 2007年09月27日 18:03:00

1、现象:
在放大/缩小操作时,当 Map.width = Map.MaximumZoom 时再次执行Zoomout  或者当 Map.width = Map.MinimumZoom 时再次执行Zoomin,浏览器显示的地图处于冻结状态(刷新地图停止);同时,鼠标光标处于长久的等待(wait)状态。

2、原因:
客户端 javascript 脚本在响应鼠标事件处理时发生事件重入。

3、解决方法:
修改AjaxMap.js 中的SharpMap_BeginZoom 函数
function SharpMap_BeginZoom(obj,x,y,zoomval)
{
 if(obj.zoomEnded==0) return;
 if(obj.zoom/zoomval<obj.minZoom) zoomval = obj.zoom/obj.minZoom;
 if(obj.zoom/zoomval>obj.maxZoom) zoomval = obj.zoom/obj.maxZoom;
 //当控制动态缩放的zoomval值为1时停止动态缩放并退出
 if(Math.abs(1-zoomval)<0.0001) return;
 obj.zoomEnded=0;
 obj.container.style.cursor = 'wait';
 var position = WebForm_GetElementPosition(obj.container);
 var imgX = x-position.x;
 var imgY = y-position.y;
 var center = SharpMap_PixelToMap(imgX+(obj.container.offsetWidth*0.5-imgX)/zoomval,imgY+(obj.container.offsetHeight*0.5-imgY)/zoomval,obj);
 obj.zoom = obj.zoom/zoomval;
 obj.minX = center.x - obj.zoom*0.5;
 obj.maxY = center.y + obj.zoom*obj.container.offsetHeight/obj.container.offsetWidth*0.5;
 SharpMap_BeginRefreshMap(obj,1); //Start refreshing the map while we're zooming
 SharpMap_DynamicZoom((position.x-x)*(zoomval-1),(position.y-y)*(zoomval-1),zoomval,0.0,obj);
}

4、修改后的测试结果:
a) 解决了鼠标 Click 缩放操作冻结问题;
b) 鼠标滚轮缩放操作仍有冻结(原因猜测中……);
 

Qt QWidget实现手势缩放和平移(一)

由于项目要求,需要在QWidget中实现一个手势操作的功能,对图片进行放大/缩小/平移功能,并且还需要支持通过鼠标和键盘来实现该功能。其实这种功能在QGraphicsView中实现比较简单, 不过在Q...
  • luoyayun361
  • luoyayun361
  • 2017年01月13日 15:40
  • 2595

-zoom-in、zoom-out与图形放大、图形缩小的差别

zoom-in、zoom-out与图形放大、图形缩小的差别       许多人不知道zoom-in、zoom-out的确切意义,以为 zoom-in就是图形放大、 zoom-out就是 图形缩小...
  • zzwu
  • zzwu
  • 2016年11月28日 18:07
  • 3317

Sharpmap自定义图层

在sharpmap中,基础矢量地图,和切片地图都是现成的,直接就可以使用。如果做业务专题图层,就需要根据sharpmap的规则,添加相应的自定义图层,或者自定义数据源。如果几何对象没有太多的业务关系,...
  • zffp
  • zffp
  • 2014年01月06日 21:43
  • 1596

C# SharpMap 学习总结

SharpMap V1.1 For Web教程系列之——地图展示 SharpMap V1.1 For Web教程系列之——地图展示 开篇先说本次的开发环境吧。采用Vs2010,.Net  ...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年06月13日 12:44
  • 2806

SharpMap针对ShapeFile进行基本样式的渲染

一直做GIS的二次开发,都想通过一些示例来shi'xian
  • pubuzhixing
  • pubuzhixing
  • 2014年06月15日 18:50
  • 1150

基于SharpMap和DotNetBar的地图导航(地图缩放滑块)控件开发实践

因工作需要,最近想开发一个网络地图下载器,在编码的过程中想到以前谷歌、百度和现在的天地图、ArcGIS里面有一个地图导航控件,就尝试着自己做了一个。其实原理也简单,上下两个按钮,中间一个可上下移动的按...
  • ewyetc
  • ewyetc
  • 2016年06月24日 00:36
  • 1653

SharpMap源码学习<一>

1、SharpMap简介 SharpMap是一个基于.net Framework使用C#开发的Map渲染类库,可以渲染ESRI Shape、PostGIS、MS SQL等格式的GIS数据,通过扩展...
  • siyonggang226
  • siyonggang226
  • 2016年01月06日 23:25
  • 611

c# 从MySQL往sharpmap中加载矢量数据图层(一)

从MySQL往sharpmap加载数据的办法。
  • qq_23560347
  • qq_23560347
  • 2017年03月20日 23:08
  • 361

Sharpmap实时动态图层

在单位实习期间用sharpmap开源库写了一些小的程序,之后一些群友问怎么实现实时输入坐标,使得某个图层能够实时运动。我的解决方案比较简单就是每次动态输入坐标时刷新地图,在刷新之前要给动态图层传入新的...
  • LIJUNGANG1019473506
  • LIJUNGANG1019473506
  • 2016年10月11日 13:13
  • 715

jtopo限制滚轮缩放范围,zoomOut()与zoomIn()缩放限制

想要给jtopo的场景缩放加上限制,首先需要找到源代码中控制缩放的代码: // 在源码里ctrl+F搜索 onmousewheel 就能找到以下代码 function l(a)...
  • qq_39759115
  • qq_39759115
  • 2017年12月11日 16:40
  • 28
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SharpMap AjaxMapControl 中 Zoomin/Zoomout 操作时冻结问题
举报原因:
原因补充:

(最多只允许输入30个字)