js获取图片的坐标

废话不多说,上代码

	<img src="toImage.action" name="npcImg" id="npcImg" width="512" height="512" οnclick="vControl('GETMOUSEPOSINPIC',this)"/> 
下面是javascript部分
//点击图片 , 获取图片上对应的坐标,这个坐标y轴是反着的,应该是负y,但显示出来是正y
var JPos = {};
(function($){
$.$getAbsPos = function(p){
var _x = 0;
var _y = 0;
while(p.offsetParent){
_x += p.offsetLeft;
_y += p.offsetTop;
p = p.offsetParent;
}

_x += p.offsetLeft;
_y += p.offsetTop;

return {x:_x,y:_y};
};

$.$getMousePos = function(evt){
var _x,_y;
evt = evt || window.event;
if(evt.pageX || evt.pageY){
_x = evt.pageX;
_y = evt.pageY;
}else if(evt.clientX || evt.clientY){
_x = evt.clientX + document.body.scrollLeft - document.body.clientLeft;
_y = evt.clientY + document.body.scrollTop - document.body.clientTop;
}else{
return $.$getAbsPos(evt.target);

}
return {x:_x,y:_y};
}
})(JPos);


function vControl(pChoice){
switch(pChoice){
case "GETMOUSEPOSINPIC":
var mPos = JPos.$getMousePos();
var iPos = JPos.$getAbsPos(arguments[1]);
window.status = (mPos.x - iPos.x) + " " + (mPos.y - iPos.y);
alert(window.status);
window.location.href="convertToActualCoordinate.action?status="+window.status;
break;
}
}

注意:此时获取的坐标中y轴的正负号是反着的,具体的不记得了,貌似y轴一直是正的,但如果将图片左上角作为原点的话,y轴应该为负,所以以下double y取值的时候加了个负号

//根据前台图片显示坐标换算出实际坐标点
	@RequestMapping("/convertToActualCoordinate")
	public String convertToActualCoordinate(String status,Model model) {
		//TODO
		System.out.println("当前的坐标是:"+status);
		String[] coordinate = status.split(" ");
		double x = Double.parseDouble(coordinate[0]);
		double y = -Double.parseDouble(coordinate[1]);
		
		System.out.println("换算实际坐标前的x:"+x);
		System.out.println("换算实际坐标前的y:"+y);
		//slam发过来的地图大小像素是1024*1024,而网页显示的图片大小暂定是512*512,先转换成实际的地图大小
		System.out.println("width:"+width);
		System.out.println("height:"+height);
		float x1 =  (float) (width*x/512);
		float y1 =  (float) (height*y/512);
		//地图物理坐标与像素坐标变换 
		/*地图像素坐标以地图左上角端点为原点;物理坐标原点为地图中心点; 
		对于 1024*1024 的地图,地图中心点的像素坐标为(512,512),机器人在地图上物理坐标到像素坐标变
		换的解析为: 
		行:  512+x(m)/0.05  像素(pix) 
		列:  512-y(m)/0.05  像素(pix) 
		其中物理坐标(x,y)表示机器人的实际坐标,单位是  米(m)。 
		即:物理坐标(0,0.05)(米),地图上像素坐标为(512,513)(pix)。 */
		//现在换算的是物理坐标
		x1=(float) ((x1-width/2)*0.05);
		y1=(float) ((y1+height/2)*0.05);
		float yaw = (float) (y1/x1/3.14*180);
		System.out.println("换算成实际坐标后的x1:"+x1);
		System.out.println("换算成实际坐标后的y1:"+y1);
		System.out.println("换算成实际坐标后的yaw:"+yaw);
		model.addAttribute("x", x1);
		model.addAttribute("y", y1);
		model.addAttribute("yaw", yaw);
		return "WEB-INF/pages/SlamNavigation/SlamNavigation";
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值