`
Peerless_
  • 浏览: 4337 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

地图模拟

阅读更多
<!DOCTYPE html>
<html>
<head>
<title>MyHtml.html</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="js/common/jquery-1.8.3.js"></script>
<style type="text/css">
#handle-map {
	position: fixed;
	right: 10px;
	top: 10px;
	z-index: 100;
}
#thump-map{
	position: fixed;
	top: 10px;
	left: 10px;
	z-index: 100;
	font-size: 0;
	width: 20%;
	height: 20%;
	border: 1px solid blue;
}
#thump-map img{
	width: 100%;
	height: 100%;
}
#radar{
	position: absolute;
	left: 0;
	top: 0;
	width: 100%;
	height: 100%;
	border: 1px solid red;
	box-sizing: border-box;
}
html,body,#container,#wrapper-map,#map-div {
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0;
}

#map-div {
	position: relative;
	overflow: hidden;
}

#map {
	width: 100%;
	height: 100%;
	position: absolute;
	top: 0;
	left: 0;
}
</style>
<script type="text/javascript">
	{
	var isMouseDown_map = false, isMouseDown_radar = false;;
	var original_pos = {}, old_map_pos = {};
	// 當前縮放比例
	var _rate = 100;
	var $map, $radar;
	// 每次縮放比例
	var _scale = _rate/5;
	// 最大,最小比例
	var _MAX_ = 30*_scale, _MIN_ = 5*_scale;
	var _width, _height;
}
$(function() {
	_width = $('#map-div').width();
	_height = $('#map-div').height();
	$map = $('#map');
	$radar = $('#radar');
	
	$('#hide').click(function(){
		if($(this).val()=='隱藏'){
			$('#thump-map').hide();
			$(this).val('顯示');
		}else{
			$('#thump-map').show();
			$(this).val('隱藏');
		}
	});
	$('#big').click(scaleMap);
	$('#small').click(scaleMap);
	$('#handle-up').click(moveMap);
	$('#handle-down').click(moveMap);
	$('#handle-left').click(moveMap);
	$('#handle-right').click(moveMap);
	
	$map.add($radar).on({
		'mousedown': mouseDown,
		'mouseup': mouseUp
	});
	$map.mousemove(mouseMoveForMap);
	$radar.mousemove(mouseMoveForRadar);
});
{
	// 地圖事件
	function mouseUp(){
		window['isMouseDown_'+this.id] = false;
		$(this).css('cursor', 'default');
		original_pos = {};
		old_map_pos = {};
	}
	function mouseDown(e){
		window['isMouseDown_'+this.id] = true;
		$(this).css('cursor', 'move');
		original_pos.x = e.clientX;
		original_pos.y = e.clientY;
		old_map_pos.x = parseInt($(this).css('left'));
		old_map_pos.y = parseInt($(this).css('top'));
	}
	function mouseMoveForMap(e){
		if (isMouseDown_map) {
			var moveX = e.clientX - original_pos.x;
			var moveY = e.clientY - original_pos.y;
			var left_ = old_map_pos.x + moveX;
			var top_ = old_map_pos.y + moveY;
			if(left_>0){
				left_ = 0;
			}else if(left_<-_width*((_rate-100)/100)){
				left_ = -_width*((_rate-100)/100);
			}
			if(top_>0){
				top_ = 0;
			}else if(top_<-_height*((_rate-100)/100)){
				top_ = -_height*((_rate-100)/100);
			}
			
			$map.css({
				'left' : left_ + 'px',
				'top' : top_ + 'px'
			});
			$radar.css({
				'left' : -left_*(20/_rate) + 'px',
				'top' : -top_*(20/_rate) + 'px'
			});
		}
	}
	function mouseMoveForRadar(e){
		if (isMouseDown_radar) {
			var moveX = e.clientX - original_pos.x;
			var moveY = e.clientY - original_pos.y;
			var left_ = old_map_pos.x + moveX;
			var top_ = old_map_pos.y + moveY;
			var radarWidth = $radar.width();
			var radarHeight = $radar.height();
			if(left_<0){
				left_ = 0;
			}else if(left_>(_width*.2-radarWidth-2)){ // 此處-2為radar的邊框
				left_ = _width*.2-radarWidth-2;
			}
			if(top_<0){
				top_ = 0;
			}else if(top_>(_height*.2-radarHeight-2)){ // 此處-2為radar的邊框
				top_ = _height*.2-radarHeight-2;
			}
			$radar.css({
				'left' : left_ + 'px',
				'top' : top_ + 'px'
			});
			$map.css({
				'left' : -left_/(20/_rate) + 'px',
				'top' : -top_/(20/_rate) + 'px'
			});
		}
	}
	function scaleMap() {
		if ($(this).is('#big')) {
			_rate += _scale;
		} else {
			_rate -= _scale;
			_scale = -Math.abs(_scale);
		}
		if(_rate>_MAX_){
			_rate = _MAX_;
			return;
		}
		if(_rate<_MIN_){
			_rate = _MIN_;
			_scale = Math.abs(_scale);
			return;
		}
		
		var top_ = parseFloat($map.css('top'));
		var left_ = parseFloat($map.css('left'));
		$map.css({
			'width' : _rate + '%',
			'height' : _rate + '%',
			'left' : (left_ - _scale / 100 / 2 * _width) + 'px',
			'top' : (top_ - _scale / 100 / 2 * _height) + 'px'
		});
		$radar.css({
			'width' : 10000/_rate + '%',
			'height' : 10000/_rate + '%',
			'left' : -(left_ - _scale / 100 / 2 * _width)*(20/_rate) + 'px', // 此處20為小圖占大圖的比例
			'top' : -(top_ - _scale / 100 / 2 * _height)*(20/_rate) + 'px'
		});
		_scale = Math.abs(_scale);
	}
	function moveMap() {

		var direction = this.id;
		var top_ = parseInt($map.css('top'));
		var left_ = parseInt($map.css('left'));
		switch (direction) {
		case 'handle-up':
			top_ = top_ - 20;
			break;
		case 'handle-down':
			top_ = top_ + 20;
			break;
		case 'handle-left':
			left_ = left_ - 20;
			break;
		case 'handle-right':
			left_ = left_ + 20;
			break;

		}
		if(left_>0){
			left_ = 0;
		}else if(left_<-_width*((_rate-100)/100)){
			left_ = -_width*((_rate-100)/100);
		}
		if(top_>0){
			top_ = 0;
		}else if(top_<-_height*((_rate-100)/100)){
			top_ = -_height*((_rate-100)/100);
		}
		$map.css({
			'top': top_ + 'px',
			'left': left_ + 'px'
		});
		$radar.css({
			'top': -top_*(20/_rate) + 'px',
			'left': -left_*(20/_rate) + 'px'
		});
	}
}
</script>
</head>
<body>
	<div id="container">
		<div id="wrapper-map">
			<div id="thump-map">
				<img src="thumb_map.jpg">
				<div id="radar"></div>
			</div>
			<div id="handle-map">
				<input type="button" id="hide" value="隱藏">
				<input type="button" id="big" value="放大">
				<input type="button" id="small" value="縮小">
				<br>
				<input type="button" id="handle-up" value="上">
				<input type="button" id="handle-down" value="下">
				<input type="button" id="handle-left" value="左">
				<input type="button" id="handle-right" value="右">
			</div>
			<div id="map-div">
				<img src="map.jpg" id="map" draggable="false" usemap="#factoryInfo">
				<map name="factoryInfo" id="factoryInfo">
					<area shape="poly" coords="200,0,300,0,300,150,200,150" href="javascript: alert()"/>
				</map>
			</div>

		</div>
	</div>
	
</body>
</html>

分享到:
评论

相关推荐

    Googel地图模拟

    【标题】"Googel地图模拟"涉及到的是利用编程技术实现对Google地图的模拟,这是一种在桌面应用中重现Google地图在线服务的方式。这种技术通常用于创建自定义的地图应用或者在离线环境中使用地图数据。 【描述】...

    JS高德地图模拟驾车路线规划绘制代码

    总结来说,JS高德地图模拟驾车路线规划绘制代码涉及到以下几个关键点: 1. 引入高德地图API库。 2. 创建地图实例并设置初始视图。 3. 使用`AMap.Driving`类进行路线规划。 4. 自定义函数绘制路线。 5. 可能结合图片...

    JS高德地图模拟驾车路线规划绘制代码.zip

    在本压缩包“JS高德地图模拟驾车路线规划绘制代码.zip”中,包含了一个使用HTML5技术实现的JavaScript示例,主要展示了如何利用高德地图API来规划并绘制驾车路线。这个项目对于开发者来说,是一个很好的学习和实践...

    前端echarts可视化模拟航线以及中国地图

    本文将深入探讨如何利用ECharts实现前端的航线模拟以及中国地图的可视化。 首先,ECharts是一个基于JavaScript的开源图表库,它支持多种图表类型,如折线图、柱状图、饼图,以及地理图等。ECharts的特点在于其轻量...

    3D游戏地图的模拟程序

    在这个3D地图模拟程序中,MFC可能被用作用户界面框架,它简化了窗口管理、菜单、对话框和事件处理等任务。开发者可以利用MFC的类来创建和管理应用程序的主窗口,接收用户输入,以及与其他系统组件进行交互。 在3D...

    实现全景效果,线路规划并模拟运动轨迹 百度地图

    百度地图API提供了动态标注功能,可以通过定时更新位置信息,让标注点按照设定的速度和方向在地图上移动,模拟出物体的运动轨迹。为了实现更逼真的效果,还可以调整标注点的动画样式,如平滑移动、渐变颜色等。 在...

    Android百度地图 线路规划,模拟运动轨迹,及全景效果源码

    在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的地图功能,包括线路规划、模拟运动轨迹以及全景效果等。下面将详细讲解这些知识点。 首先,**线路规划**是地图应用中的核心功能之一。在Android...

    上海地图2010版 外环城区图

    上海地图2010版,外环城区图,但感觉应该还是2009年下半年的

    模拟城市4非常漂亮的地图灰度图

    LOVE-C,微笑群岛,很漂亮的地图,有河流很多,

    js模拟百度地图

    1、用JS实现和百度地图一样的地图--拖动,移动,放大、缩小、还原、标注、图例 2、不需搭建gis服务器,不需第三方API支持。 3、地图的图片直接从百度地图中选择所需的比例,直接截图,然后PS拼接一下就OK了(示例为...

    上海市MAPINFO格式地图

    标题中的“上海市MAPINFO格式地图”指的是以MAPINFO专业地理信息系统软件所支持的特定数据格式存储的上海市区域地图。这种地图数据集包含了上海市的地理坐标、行政区划、道路网络、地标点等信息,通常用于地理信息...

    U3D卫星地图,可用于模拟飞行

    U3D卫星地图,可用于模拟飞行

    全国地图 热图模拟页面

    全国地图热图模拟页面是一种基于Web的交互式可视化技术,用于展示不同地区数据的热度分布。这个项目的主要目的是创建一个用户友好的界面,通过热力图的形式,清晰地展示中国各地的数据强度或频率。热图的颜色梯度...

    仿造 Google Map 地图导航效果

    在IT行业中,构建一个类似Google Map的地图导航效果是一项复杂而精细的工作,涉及到多个技术领域,如Web开发、地理信息系统(GIS)、数据可视化以及用户界面设计等。以下将详细阐述实现这一效果所需的关键知识点: ...

    基于模拟退火算法的自动地图注记配置研究

    ### 基于模拟退火算法的自动地图注记配置研究 #### 重要知识点解析: **1. 模拟退火算法(Simulated Annealing)** - **起源与概念**:模拟退火算法的灵感来源于物理学中的固体物质退火过程,即金属加热至熔点后...

    echarts整合百度地图实现模拟迁移

    echarts整合百度地图实现模拟迁移,可直接打开展示,代码很详细,自行修改 echarts整合百度地图实现模拟迁移,可直接打开展示,代码很详细,自行修改 echarts整合百度地图实现模拟迁移,可直接打开展示,代码很详细...

    MATLAB轻松绘制地图路线-Dijkstra(迪杰斯特拉)算法最短路径规划

    本文将深入探讨如何使用MATLAB这一强大的计算工具来实现Dijkstra算法,并结合实际地图数据,轻松绘制出最短路线。MATLAB不仅支持数值计算,还拥有丰富的图形界面,使得算法可视化变得更加直观和易懂。 Dijkstra算法...

    echarts地图

    在实现ECharts地图模拟迁徙的过程中,我们需要关注以下几个关键点: 1. **数据准备**:首先,你需要有包含起点、终点和可能的路径数据。这些数据通常包括地理位置坐标(如经纬度)和时间戳,以便在地图上绘制出动态...

    地图推演.zip

    标题“地图推演.zip”可能指的是一个包含有关地图模拟或地理信息系统(GIS)演示的压缩文件。虽然没有具体的标签提供更多信息,但从文件名“20221207_155313.mp4”来看,这可能是一个视频文件,记录了2022年12月7日...

Global site tag (gtag.js) - Google Analytics