openlayer轨迹简单DEMO

代码如下 

<html>
<head>
<title>openlayer轨迹简单DEMO</title>
<link rel="stylesheet" type="text/css" href="ol.css">
<script type="text/javascript" src="ol.js" charset="utf-8"></script>
<style>
.ol-popup {
  position: absolute;
  background-color: white;
  -webkit-filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
  filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
  padding: 15px;
  border-radius: 10px;
  border: 1px solid #cccccc;
  bottom: 12px;
  left: -50px;
  min-width: 280px;
}
.ol-popup:after, .ol-popup:before {
  top: 100%;
  border: solid transparent;
  content: " ";
  height: 0;
  width: 0;
  position: absolute;
  pointer-events: none;
}
.ol-popup:after {
  border-top-color: white;
  border-width: 10px;
  left: 48px;
  margin-left: -10px;
}
.ol-popup:before {
  border-top-color: #cccccc;
  border-width: 11px;
  left: 48px;
  margin-left: -11px;
}
.ol-popup-closer {
  text-decoration: none;
  position: absolute;
  top: 2px;
  right: 8px;
}
.ol-popup-closer:after {
  content: "✖";
}
</style>
</head>
<body>
<div id="map" style="width:100%;"></div>
<div id="popup" class="ol-popup">
      <a href="#" id="popup-closer" class="ol-popup-closer"></a>
      <div id="popup-content"></div>
    </div>
</body>
</html>
<script type="text/javascript">
var center = ol.proj.transform([117.18, 34.27], 'EPSG:4326', 'EPSG:3857');
var markSvgSize = [30, 30] // 及图标大小 
var pathBackTimer = null; //pathBackTimer定时器
var so = new ol.source.Vector();
var source = new ol.source.XYZ({
	url: 'http://192.168.90.50:8095/roadmap/{z}/{x}/{y}.png'//本例中地图瓦片保存在当前目录下的tile文件夹目录下
});
var tile = new ol.layer.Tile({
	source: source
});
var pl = []
  pl.push([117.201419,34.271905]);
  pl.push([117.201988,34.271900]);
  pl.push([117.202106,34.272702]);
  pl.push([117.202202,34.273536]);
  pl.push([117.203286,34.273372]);
  pl.push([117.203323,34.273004]);
  pl.push([117.203892,34.273026]);
  pl.push([117.203769,34.272765]);
  pl.push([117.203554,34.272361]);
var vectorLayer = new ol.layer.Vector({
    source: so
});
var map = new ol.Map({
    layers: [//地图图层
        tile,vectorLayer
    ],
    view: new ol.View({
        center: center,
        minZoom:5,//设置缩放的最大和最小级别
        maxZoom:18,
        zoom: 17//设置默认加载的级别
    }),
    target: 'map'//要显示地图的DIV的ID
});
var container = document.getElementById('popup');
var content = document.getElementById('popup-content');
var closer = document.getElementById('popup-closer');
var popup = new ol.Overlay({
    element: container
  });
closer.onclick = function() {
    popup.setPosition(undefined);
    closer.blur();
    return false;
};	
map.addOverlay(popup);
map.on('singleclick', function(evt) {
    var coordinate = evt.coordinate;
    var hdms = ol.coordinate.toStringHDMS(ol.proj.toLonLat(coordinate));
	showInfo(coordinate,hdms);
});
pathBack(vectorLayer,pl);
function pathBack(trailLayer, points) {
    map.getView().setCenter(ol.proj.transform(points[0], 'EPSG:4326', 'EPSG:3857'));
	if(pathBackTimer)
		clearInterval(pathBackTimer);
	var lineStyle = new ol.style.Style({
		stroke: new ol.style.Stroke({
			width: 3,
			color: [255, 0, 0, 1]
		})
	});
	var pointList = new Array();
	for(var i = 0; i < points.length; i++) {
		var pointFeature = new ol.Feature({
			geometry: new ol.geom.Point(ol.proj.transform(points[i], 'EPSG:4326', 'EPSG:3857'))
		})
		if(pointFeature != null) {
			pointList.push(pointFeature);
		}
	}
	var j = 0;
	pathBackTimer = setInterval(function() {
		if(j + 1 <= pointList.length) {
			if(j > 0) {
				var twoCoordinatePoint = new Array();
				var coordinateFirst = pointList[j - 1].getGeometry().getCoordinates();
				var coordinateSecond = pointList[j].getGeometry().getCoordinates();
				twoCoordinatePoint.push(coordinateFirst);
				twoCoordinatePoint.push(coordinateSecond);
				var lineString = new ol.geom.LineString(twoCoordinatePoint);

				var lineFeature = new ol.Feature({
					geometry: lineString
				});
				lineFeature.setStyle(lineStyle);
				trailLayer.getSource().addFeature(lineFeature);
				//pointList[j - 1].setStyle(null);
				pointList[j].setStyle(getPngStyle(coordinateFirst,coordinateSecond));
			}
			if(j==0||j==(pointList.length-1)){
				pointList[j].setStyle(getSvgStyle());
			}
			trailLayer.getSource().addFeature(pointList[j]);
		} else {
			clearInterval(pathBackTimer);
			j = -1;
			//trailLayer.getSource().clear();
		}
		j++;
	}, 600);
}
function getPngStyle(start,end) {
	var dx = end[0] - start[0];
    var dy = end[1] - start[1];
    var rotation = Math.atan2(dy, dx);
	return new ol.style.Style({
       // geometry: new ol.geom.Point(end),
        image: new ol.style.Icon(({             
		  //color: [255, 0, 0, 1],
		  //crossOrigin: 'anonymous',
          anchor: [0.75, 0.5],
		  name:"5555",
		  src: 'arrow2.png',
          rotateWithView: true,
          rotation: -rotation
        }))
      })
}
function getSvgStyle() {
	// 构建svg的Image对象
	var svg = '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">' +
		'<path fill="#FF0000" d="M22.906,10.438c0,4.367-6.281,14.312-7.906,17.031c-1.719-2.75-7.906-12.665-7.906-17.031S10.634,2.531,15,2.531S22.906,6.071,22.906,10.438z"/>' +
		'<circle fill="#FFFFFF" cx="15" cy="10.677" r="3.291"/></svg>';
	var mysvg = new Image();
	mysvg.src = 'data:image/svg+xml,' + escape(svg);
	return new ol.style.Style({
		image: new ol.style.Icon({
			img: mysvg, // 设置Image对象
			imgSize: markSvgSize
		})
	});
}
function showInfo(coordinate,info){
	content.innerHTML = '<p>You clicked here:</p><code>' + info +
        '</code>';
    popup.setPosition(coordinate)
}
</script>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文件列表: OL3Demo\.DS_Store OL3Demo\css\base.css OL3Demo\css\js_demo.css OL3Demo\css\ol.css OL3Demo\demos\.DS_Store OL3Demo\demos\Controls\Animation.htm OL3Demo\demos\Controls\CanvasTiles.htm OL3Demo\demos\Controls\FullScreen.htm OL3Demo\demos\Controls\LayerControl.htm OL3Demo\demos\Controls\LayerSpy.htm OL3Demo\demos\Controls\Measure.htm OL3Demo\demos\Controls\MousePosition.htm OL3Demo\demos\Controls\Operation.htm OL3Demo\demos\Controls\OverviewMap.htm OL3Demo\demos\Controls\ScaleLine.htm OL3Demo\demos\Controls\ZoomSlider.htm OL3Demo\demos\data\geojson\countries-110m.json OL3Demo\demos\data\geojson\countries.geojson OL3Demo\demos\data\geojson\GeoJSON.json OL3Demo\demos\data\geojson\samples.json OL3Demo\demos\data\geolocation-orientation.json OL3Demo\demos\data\geolocation_marker_heading.png OL3Demo\demos\data\gml\gml.xml OL3Demo\demos\data\gml\topp-states-wfs.xml OL3Demo\demos\data\gpx\fells_loop.gpx OL3Demo\demos\data\kml\2012-02-10.kml OL3Demo\demos\data\kml\2012_Earthquakes_Mag5.kml OL3Demo\demos\data\kml\kml.xml OL3Demo\demos\DataHandler.ashx OL3Demo\demos\Drawing\DrawFeatures.htm OL3Demo\demos\Drawing\FeaturesStyle.htm OL3Demo\demos\Drawing\ModifyFeatures.htm OL3Demo\demos\Drawing\MoveFeatures.htm OL3Demo\demos\Drawing\SaveFeatures.htm OL3Demo\demos\Labels\AddClusterLabels.htm OL3Demo\demos\Labels\AddLabels.htm OL3Demo\demos\Labels\AddPopup.htm OL3Demo\demos\MultiData\LoadBasicMaps.htm OL3Demo\demos\MultiData\LoadOpenData.htm OL3Demo\demos\MultiData\LoadPublicMaps.htm OL3Demo\demos\MultiData\LoadTiandituMap.htm OL3Demo\demos\MultiData\MapExport.htm OL3Demo\demos\MultiData\OSM.htm OL3Demo\demos\MultiData\OverLayerMaps.htm OL3Demo\demos\OGC\LoadWCSMap.htm OL3Demo\demos\OGC\LoadWFSFeatrue.htm OL3Demo\demos\OGC\LoadWMSMap.htm OL3Demo\demos\OGC\LoadWMTSMap.htm OL3Demo\demos\OGC\WFS_Transaction.htm OL3Demo\demos\Others\AddPOI.htm OL3Demo\demos\Others\CreatCharts.htm OL3Demo\demos\Others\Geolocation.htm OL3Demo\demos\Others\Heatmap.htm OL3Demo\demos\Others\HotSpots.htm OL3Demo\demos\Others\LoadPublicMaps.htm OL3Demo\demos\Others\MilitaryPlotting.htm OL3Demo\demos\Others\MultiViewLinkage.htm OL3Demo\demos\Others\ProjectionTransformation.htm OL3Demo\demos\Others\SimulateGeolocation.htm OL3Demo\demos\Others\副本 LoadPublicMaps.htm OL3Demo\demos\RegDataHandler.ashx OL3Demo\demos\Web.config OL3Demo\images\ArrowIcon\arbitrary_area.png OL3Demo\images\ArrowIcon\arrow.png OL3Demo\images\ArrowIcon\arrow1.png OL3Demo\images\ArrowIcon\arrowcross.png OL3Demo\images\ArrowIcon\assembly.png OL3Demo\images\ArrowIcon\circle.png OL3Demo\images\ArrowIcon\CircleClosedangleCompass.png OL3Demo\images\ArrowIcon\closedangle.png OL3Demo\images\ArrowIcon\curve_flag.png OL3Demo\images\ArrowIcon\custom_arrow.png OL3Demo\images\ArrowIcon\custom_tail_arrow.png OL3Demo\images\ArrowIcon\custom_tail_arrow_.png OL3Demo\images\ArrowIcon\DoubleClosedangleCompass.png OL3Demo\images\ArrowIcon\double_arrow.png OL3Demo\images\ArrowIcon\fourstar.png OL3Demo\images\ArrowIcon\rect_flag.png OL3Demo\images\ArrowIcon\rhombus.png OL3Demo\images\ArrowIcon\SameDirectionClosedangleCompass.png OL3Demo\images\ArrowIcon\singleLine_arrow.png OL3Demo\images\ArrowIcon\smooth_curve.png OL3Demo\images\ArrowIcon\stright_arrow.png OL3Demo\images\ArrowIcon\tail_arrow.png OL3Demo\images\ArrowIcon\triangle.png OL3Demo\images\ArrowIcon\triangle_flag.png OL3Demo\images\ArrowIcon\VaneCompass.png OL3Demo\images\content\dotted.png OL3Demo\images\label\bj.png OL3Demo\images\label\blueIcon.png OL3Demo\images\label\icon.png OL3Demo\images\label\restaurant.png OL3Demo\images\label\国有企业.png OL3Demo\images\left\app.png OL3Demo\images\left\app_current.png OL3Demo\images\left\channel.png OL3Demo\images\left\channel_current.png OL3Demo\images\left\cloud.png OL3Demo\images\left\cloud_current.png OL3Demo\images\left\custom.png
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值