天地图专题四:在天地图上显示运行轨迹

上一文章我们讲了如何根据标注点确定初始化地图时的缩放级别和中心点。 是很基本的需求。  


既然是地图,常常会有显示运行轨迹的需求。


本质上就是把一些点数据在地图上用线连接起来。 实现起来也是比较简单的。


主要有3点:

1.根据数据计算页面显示级别和中心点。

2.显示所有的轨迹点。起点和终点用不同的图标来表示。

3.显示连线。


步骤:

1.准备数据。我们直接把前几篇文章中的数据稍微修改一下。

		var lnglats = [
		{"B":"23.1","L":"113.3","PName":"1111","Status":1},
		{"B":"23.2","L":"113.4","PName":"2222","Status":1},
		{"B":"23.9","L":"114.1","PName":"3333","Status":3004},
		{"B":"24.7","L":"114.8","PName":"第四个点","Status":1},
		{"B":"24.8","L":"115.5","PName":"第五个点","Status":1},
		{"B":"25.3","L":"116.2","PName":"第六个点","Status":1},
		{"B":"26.1","L":"116.7","PName":"7777","Status":1},
		{"B":"27.5","L":"117.3","PName":"8888","Status":1}];
		//这是页面需要的数据。实际应用中常用ajax获取。坐标点状态。点的类型。点的名字。

2.根据上一文章讲的方法计算中心点和缩放级别。可使用  map.setViewport(Tlnglats) 这个接口。


3.加载地图。

		//加载基本地图
		function loadMap(){
			try {
				map = new TMap("mapDiv"); //初始化地图对象
                                map.centerAndZoom(new TLngLat(cenL, cenB), zoom);//设置显示地图的中心点和级别
                                map.enableHandleMouseScroll(); //允许鼠标双击放大地图   
		            } catch(err) {
		              	alert('天地图加载不成功,请稍候再试!你可以先使用其他功能!');
		            }
		}

4.在地图上加载所有的坐标点。起点与终点用不同的图标。方法与第二篇文章中加载标注点基本一样。  要注意的是  要自己调节一下图标的位置。偏移量 new TPixel(17, 34)。

因为地图上的标注点,同一个坐标点上的图标、线可能表现会有所不同。

	var iconMaker = [];//用来装标注点。
	//把轨迹点放到地图上
	function loadTrack () {
		if(iconMaker.length!=0){
			for(var m=0;m<iconMaker.length;m++){
				map.removeOverLay(iconMaker[m]);
			}
		}
		var  iconurl0 = 'images/pointOffline.jpg';//正常节点
		var iconurl1 = '../images/track_start_icon.png';//起点
		var iconurl2 = '../images/track_end_icon.png';//终点
		if (lnglats.length != 0) {
			markerOpt = new TMarkerOptions();
			var icon0= new TIcon(iconurl0, new TSize(4, 4), {anchor: new TPixel(4, 10)});
			var icon1 = new TIcon(iconurl1, new TSize(39, 32), {anchor: new TPixel(17, 34)});
			var icon2= new TIcon(iconurl2, new TSize(39, 32), {anchor: new TPixel(17, 34)});
			for (var i = 0; i < lnglats.length; i = i + 1) {
				iconMaker[i]  = new TMarker(new TLngLat(lnglats[i].L, lnglats[i].B), {icon: icon0});
				map.addOverLay(iconMaker[i]);
				if(i == 0){
					iconMaker[i]  = new TMarker(new TLngLat(lnglats[i].L, lnglats[i].B), {icon: icon1});
	              				map.addOverLay(iconMaker[i]);//起点
	              			}else if(i == lnglats.length-1){
	              				iconMaker[i]  = new TMarker(new TLngLat(lnglats[i].L, lnglats[i].B), {icon: icon2});
	              				map.addOverLay(iconMaker[i]);//终点
	              			}

	              		}
	              	}
	              }

5.把标注点用线连接起来。

              //连线部分 轨迹
              function showLine() {
              	var line;
              	var points = [];
              	for (var i = 0; i < lnglats.length; i = i + 1) {
              		points.push(new TLngLat(lnglats[i].L, lnglats[i].B));
              	}
              	line = new TPolyline(points, {
              		strokeColor: "green",
              		strokeWeight: 1,
              		strokeOpacity: 1
              	});
              	map.addOverLay(line);
              }

再依次调用              loadMap(); loadTrack(); showLine();就可以了。注意都要在页面加载完之后运行,或者把代码放到页面底部去。


天地图坐标轨迹效果图:



到这里,我们就实现了在天地图上显示坐标轨迹。可以根据后台查询出来的数据在地图上显示轨迹。



项目下载地址:https://github.com/liusaint/tiandituMap

演示地址:http://runningls.com/demos/tianditu/index.html?to=loadtrack

更多天地图api运用的内容请关注本系列后续文章。转载请注明出处。

### 关于天地图连线配置教程或常见问题 天地图是一种基于地理信息系统(GIS)的服务平台,提供了丰富的地图数据服务接口。以下是关于天地图连线配置的一些关键知识点以及可能遇到的常见问题。 #### 1. 天地图服务简介 天地图支持多种服务形式,包括 REST API SDK 接口。通过这些接口可以实现地图显示、空间查询等功能[^4]。 例如,在 Web 应用中可以通过 JavaScript 调用天地图地图服务: ```javascript var map = new T.Map('mapContainer'); // 创建地图实例 var marker = new T.Marker(new T.LngLat(116.397428, 39.90923)); // 定义标注位置 map.addOverLay(marker); // 将标注添加到地图上 marker.setInfoWindow("这是北京的位置"); // 设置信息窗口内容 ``` #### 2. 配置天地图连接的关键参数 在使用天地图时,通常需要提供以下参数: - **key**: 用户申请的应用程序密钥。 - **serviceVersion**: 使用的服务版本号。 - **type**: 地图类型(矢量图、影像图等)。 如果未正确设置上述参数,则可能导致无法加载地图资源或者请求失败等问题[^5]。 #### 3. 常见问题分析 ##### (1) 请求超时或返回错误码 当尝试访问天地图服务时,可能会收到 HTTP 错误响应(如 `403 Forbidden` 或者 `500 Internal Server Error`),这通常是由于以下几个原因造成的: - 密钥无效或权限不足; - IP 白名单限制未解除; - 网络环境不稳定导致通信中断; 解决方案:确认应用密钥的有效性网络连通性,并检查服务器端日志文件获取更多细节信息[^6]。 ##### (2) 图层叠加异常 有时即使成功加载了基础底图,但在其之上绘制额外的数据层(比如行政区划边界线)却出现问题。这是因为不同坐标系之间存在转换误差所致。为了保证精度一致,建议统一采用 WGS84 坐标体系作为标准输入输出格式[^7]。 ```python from pyproj import Proj, transform # 定义两个投影对象分别对应源坐标系目标坐标系 p_source = Proj(init='epsg:4326') # WGS84 经纬度 p_target = Proj(init='epsg:3857') # Web Mercator 投影平面直角坐标 lon, lat = 116.397428, 39.90923 # 示例经纬度值 x, y = transform(p_source, p_target, lon, lat) print(f"Transformed coordinates are ({x}, {y})") ``` #### 4. 结合 Matplotlib 的扩展功能 对于更复杂的可视化需求,可借助 Python 中的 Matplotlib 工具包及其附加模块 Basemap 来完成自定义绘图任务。Basemap 可以轻松地将地球表面映射成二维平面上的图形表示形式,非常适合处理涉及大量地理坐标的科学计算场景[^8]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值