一个屏幕坐标和地图坐标转换的js代码

js|转换

一个屏幕坐标和地图坐标转换的js代码

    在开发webgis的时候 在客户端 经常要处理 屏幕坐标和地图坐标的转换关系,特别是现在 web2.0时代,要求ie 交互和展现更加丰富,对坐标转换要求就更多了。因此在项目中写了个 通用的 转换 javascript代码。在实际项目 得到了较好的应用
具体代码如下 (需要prototype.js的支持)

/*
*共有三个类
*whpoint 点
*whrect 矩形
*whcoordchange坐标转换类
*/

whpoint=Class.create();

whpoint.prototype={
initialize:function(x,y){
this.x=x;
this.y=y;
}
};

whrect=Class.create();
whrect.prototype={
initialize:function(pointmin,pointmax){
this.point1=pointmin;
this.point2=pointmax;
this.width=this.point2.x-this.point1.x;
this.height=this.point2.y-this.point1.y;

},

getwidth:function(){
return this.point2.x-this.point1.x;
},

setwidth:function(newwidth){

this.width=newwidth;
},

getheight:function(){
return this.point2.y-this.point1.y;
},

setheight:function(newheight){
this.height=newheight;
},

setpointmax:function(pointmax){
this.point2=pointmax;
},

setpointmin:function(pointmin){
this.point1=pointmin;
},

getminx:function(){

return this.point1.x;
},
getminy:function(){
return this.point1.y;
},
getmaxx:function(){

return this.point2.x
},

getmaxy:function(){

return this.point2.y;
}

};

whcoordchange=Class.create();

whcoordchange.prototype={
initialize:function(screenrect,maprect){
this.screenrect=screenrect;
this.maprect=maprect;

},
getmapextent:function(screenpoint,twidth,theight){
var screenbl_x=screenpoint.x-twidth/2;
var screenbl_y=screenpoint.y+theight/2;
var tempscreenblp=new whpoint(screenbl_x,screenbl_y);
var resmapblp=this.screentomap(tempscreenblp);

var screenur_x=screenpoint.x+twidth/2;
var screenur_y=screenpoint.y-theight/2;
var tempscreenurp=new whpoint(screenur_x,screenur_y);
var resmapurp=this.screentomap(tempscreenurp);

return new whrect(resmapblp,resmapurp);
 
},

screentomap:function(screenpoint){

var resmapx=this.maprect.getminx()+

this.maprect.getwidth()*(screenpoint.x-this.screenrect.getminx())/this.screenrect.getwidth();
var resmapy=this.maprect.getmaxy()-

this.maprect.getheight()*(screenpoint.y-this.screenrect.getminy())/this.screenrect.getheight();

return new whpoint(resmapx,resmapy);
},

maptoscreen:function(mappoint){
var resscreenx=this.screenrect.getminx()+

this.screenrect.getwidth()*(mappoint.x-this.maprect.getminx())/this.maprect.getwidth();
var resscreeny=this.screenrect.getminy()+

this.screenrect.getheight()*(this.maprect.getmaxy()-mappoint.y)/this.maprect.getheight();
return new whpoint(Math.ceil(resscreenx),Math.ceil(resscreeny));

}

};

//////////////////////////////////////
/////////////////////////////////

实际页面中的应用实例
  
 
    var scminp=new whpoint(10,10);
    var scmaxp=new whpoint(400,300);
    var screct=new whrect(scminp,scmaxp);
   
     var mminp=new whpoint(120.235,30.235);
    var  mmaxp=new whpoint(120.265,30.265);   
   
    var mrect=new whrect(mminp,mmaxp);
   
    //建立 屏幕坐标和 地图坐标的对应关系 注意应该是 鹰眼的范围 对应 地图的范围
    var mycoordchange=new whcoordchange(screct,mrect);
   
    var scpoint1=new whpoint(10,300);
    var mapscpoint1=mycoordchange.screentomap(scpoint1);
   
    alert(mapscpoint1.x+";"+mapscpoint1.y);
   
     var mapoint1=new whpoint(120.250,30.250);
    var scmapoint1=mycoordchange.maptoscreen(mapoint1);
   
    alert(scmapoint1.x+";"+scmapoint1.y);
   
    //根据屏幕坐标点 相应鹰眼redbox的 width 和 height 获取相应的 地图extent,
    var maprect=mycoordchange.getmapextent(scmapoint1,195,145);
   
    alert (maprect.getminx()+";" + maprect.getminy()+";"+maprect.getmaxx()+";"+ maprect.getmaxy());
    

时间: 2024-12-01 03:04:04

一个屏幕坐标和地图坐标转换的js代码的相关文章

一个支持ff的modaldialog的js代码_javascript技巧

这是我看到的另一种方法了,虽然仍然不怎么样,不过了解一下也是不错的,目前代码不支持opera,我也没时间看能否支持=.= 原地址:http://www.koders.com/javascript ... 882713BA1C7DD0.aspx [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

实现一个购物网站的首页的js代码

使用text 和 css 可以解析 html 内容和 css 内容 语法是 text! + 路径 这个导出是 xxx.html 文件的内容 $css! + 路径 , 这个不需要导出,自动会渲染到当前引入的当前页面中 ``` difine(['swiper','template','flyer'],function(swiper,template,flyer){最外层}) 仿写:在实际工作中有待考虑 define(['text!./home.html','$css!./home.css'],fun

bat、vbs、js 原生混编(一个bat可以执行vbs,js代码)_DOS/BAT

发现 mshta 会把 file:// 协议指向的文件当作 html 来解析(注:IUnknown 与 happyxxdhaha 提醒此处必需使用绝对路径,否则不会执行),心里顿时有一万只草泥马奔过,原来如此简单的答案就在身边,却错过了四年 基本框架: 复制代码 代码如下: <!-- : bathome @echo off echo I'm Batch! mshta "file://%~f0" pause&exit 使用注释标签囊括批处理部分,条件是批处理部分不能出现注释

javascript-有没有分享3个人后才能进入一个页面的php/asp/html&amp;amp;amp;js代码

问题描述 有没有分享3个人后才能进入一个页面的php/asp/html&js代码 有没有分享3个人后才能进入一个页面的php/asp/html&js代码,只要代码,不局限微信等渠道,打算做个页面而已.最后也尽量不要api 解决方案 微信分享还是什么分享?不怕被举报k号? 微信分享有分享成功判断的api,自己看 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E6.AD.A5.E9.AA.A4.E4.

按比例微缩图片的一段小小的JS代码

js          自己写的一个非常简单的图片微缩JS代码,当然网上有很多类似的代码,在此确实是献丑了.         主要方法写在SetImgSize.js里面 SetImgSize.js 1 //智能微缩图片JS方法 2 //参数:imgID(图片的标识ID) 3 //参数:maxWidth(图片的最大宽度,值为0则表示不限制宽度) 4 //参数:maxHeight(图片的最大高度,值为0则表示不限制高度) 5 function setImgSize(imgID,maxWidth,ma

大话js代码静态检查

1.背景 首先必须承认,静态代码检查不能解决所有问题!比如说,QA不能指望着靠静态代码检查来发现rd的代码逻辑的bug.而对于javascript,可能就是代码某处少了个分号,或者是某些编码的bad –practice.这些问题可能很小很小,但是对用户体验足以造成巨大影响.因此,如果这种检查真的能发现问题,那么还是很有必要的. 之后的一个问题是成本:为了发现一个潜在的问题,我们要付出多少精力?静态检查给我们的印象是:飞速的扫描一遍代码然后返回一大堆信息--就像一个可能蕴藏金子的沙堆,我们必须有耐

ASP.net的UpdatePanel刷新时如何执行HEAD里面的JS代码

问题描述 各位:我的页面中有若干个UpdatePanel,每个UpdatePanel放一个按钮,点击该UpdatePanel中的按钮则向该UpdatePanel插入一个Chart,Chart是用Jqurey的Highcharts生成的.但Jqurey代码只会在页面第一次加载时运行,更新UpdatePanel无法再次运行,因此无法插入图表.网上搜了一下方法,说"局部刷新之后要重新注册js".我用了如下方法:<scripttype="text/javascript"

如何通过JS代码触发click事件?

问题描述 如何通过JS代码触发click事件? $("#content").on('click','.txtEdit',function(event){ alert("1111111111"); }); 我有这么一个click事件,如何通过JS代码去调用它? 解决方案 $("#content").trigger("click"); 解决方案二: $("#content").find("txtEdi

js-在空白页面实现百度地图各种功能 代码直接复制到另外一个前端框架 地图便无法显示 可能是什么问题

问题描述 在空白页面实现百度地图各种功能 代码直接复制到另外一个前端框架 地图便无法显示 可能是什么问题 我们项目要在一个国外的前端框架基础下完成 我负责项目里面地图这一块 我将写好的js代码放进一个空白的html里面 如期显示了我希望出现的地图 标记 缩放等功能 然后我将代码复制到那个前端框架中 便没有任何动静了 alert了一下 第一句还走 第二句就不走了 可能是什么原因?谢谢解答 解决方案 浏览器开发工具看下报什么错误,可能和你的那个框架冲突了. 解决方案二: 浏览器开发工具看下报什么错误