在html view中实现圆查询
来源:互联网 发布:android语音助手源码 编辑:程序博客网 时间:2024/04/29 18:29
由arcims design所创建的客户端程序,只有框选的查询,并没有圆选,然而圆选在应用程序当中甚为普遍,虽然个人私低下认为圆选跟框选没什么区别,只不过给客户的感觉好像是多了一个功能和选择。
需要即合理,只好自己想办法实现。
在html view中实现圆查询有三个问题:
1、如何用js在客户端画圆。
2、由于arcims不支持圆查询,只支持多边形,所以需要转换成多边形,也就是按一定距离,取得圆周上的点。
3、组织成arcxml语句。
详细说明和相关js代码如下:
第一、采用js代码在客户端画圆:
本人初学js,所以知道凭自己的脑瓜子是想不出来滴,幸亏是生在互联网的时代,什么问题,只要你有耐心和毅力,总能够在网上挖出答案来。挖出来的宝不敢独吞,链接地址如下:http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm,可有示例代码,并可下载js文件。
如果要实现随着鼠标的移动,动态的画出圆,则需要自己编写鼠标响应事件,代码:
var jsDraw=new jsGraphics("theTop");
//jsDraw.setColor(zoomBoxColor);
var x0=0; //圆心坐标
var y0=0;
var drawCircle=false;
var lastr=0; //上次画圆的半径
var drawSpace=20; //画圆间隔
jsDraw.setColor(zoomBoxColor); //设置圆周颜色
jsDraw.setStroke(1); //设置线的大小
var jsDraw=new jsGraphics("theTop");
//计算半径
function getRadii(x1,y1,x2,y2)
{
var x=(x1-x2)*(x1-x2);
var y=(y1-y2)*(y1-y2);
var xx=Math.sqrt(x+y);
return Math.round(xx);
}
//开始画圆
function drawMouseDown()
{
if(selectCircle)
{
drawCircle=true;
var eventsource=event.srcElement;
x0=event.x;
y0=event.y;
}
}
//画圆
function drawMouseMove()
{
if(drawCircle &&selectCircle)
{
var x2=event.x
var y2=event.y
var eventsource=event.srcElement;
var r=getRadii(x0,y0,x2,y2);
var detr=r-lastr;
if(detr<0) detr=detr*(-1);
if(detr>=drawSpace)
{
if(jsDraw)jsDraw.clear()
var x=x0-r;
var y=y0-r;
jsDraw.drawEllipse(x,y,r*2,r*2);
//alert("drawing");
jsDraw.paint();
lastr=r;
}
}
}
//结束画圆
function drawMouseUp()
{
if(selectCircle)
{
drawCircle=false;
}
}
在此遇到一个问题,写完代码后进行测试,并不能顺利的画出圆来,我检查了代码,并没有发现什么错误,后来把代码移到html文件中的<body></body>标记之中就可以了,本人对js不熟,不知道其中有何奥妙,如有路过的兄弟知道原委,还烦请留言告知。
另外一个需要注明的是drawSpace常量,刚开始没有这个常量的,结果用鼠标画圆的时候很不流畅,估计事件太频繁,机子反应不过来了。所以设置了这个参数,间隔一定距离才刷新圆。不知道是否还有其他更好的方式。
不知道是否还有其他更好的绘圆方式,比如,用透明的圆图片来代替,鼠标拉开距离就放大这个图片,否则就缩小,如同java view中一样流畅平滑,不知道能否用js来实现。
第二、取得圆上的点,并组织成arcXML查询语句。
var theString = '<ARCXML version="1.1">/n<REQUEST>/n'
theString += '<GET_FEATURES outputmode="xml" geometry="false" envelope="true" checkesc ="true"';
theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">/n';
theString += '<LAYER id="' + LayerID[layerIndex] + '" />/n';
theString += '<SPATIALQUERY subfields="' + '">';
theString += '<SPATIALFILTER relation="area_intersection">/n';
theString += circlePointString;
theString += '</SPATIALFILTER>/n';
theString += '</SPATIALQUERY>/n';
theString += '</GET_FEATURES>/n';
theString += '</REQUEST>/n';
theString += '</ARCXML>';
function getCirclePoint(x0,y0,r)//writed by xucj on 2006-06-29
{
pixelX = xDistance / iWidth;
pixelY = yDistance / iHeight;
circlePointString='<POLYGON>/n';
circlePointString+='<RING>/n';
for (var i = 0; i < 360; i = i + 1)
{
var tx = x0 + r * Math.cos((Math.PI / 180) * i);
var ty = y0 + r * Math.sin((Math.PI / 180) * i);
var theY = iHeight - ty;
var ly = pixelY * theY + eBottom;
var lx=pixelX * tx + eLeft;
circlePointString+='<POINT x="'+lx+'" y="'+ly+'" />/n';
}
circlePointString+='</RING>/n';
circlePointString+='</POLYGON>/n';
}
- 在html view中实现圆查询
- html view中实现多图层查询
- javascript在html中实现
- 在html frame中实现注销功能
- 在HTML中实现动态的时钟
- 在HTML中实现和使用遮罩层
- 在HTML中实现动画的方法
- 在oracle中实现分页查询sql
- 在oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在Oracle中实现搜索分页查询
- 在RPGLE中实现中文模糊查询
- 在 GRID 表中如何实现查询?
- JSP项目在网页中实现查询
- JSP实现HTML网页中分页查询Mysql数据库数据
- 在 ASP.NET 中实现 Model-View-Controller
- J2EE 面试题综合
- 【Linux device driver】网络设备驱动程序(二)
- 数据库打开
- 做广告的价值
- GetColor
- 在html view中实现圆查询
- 关于静态库(Static library or Archive library)
- java面试100题以及答案
- 【Linux device driver】网络设备驱动注意的问题(三)
- java面试题2
- 十二项错误的结婚理由
- QQ登陆文件LoginUinlist.dat探密之删除登陆号码
- 收藏文章一篇:J2EE应用程序中的性能提升
- .NET环境下水晶报表使用总结