【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

news2025/2/25 9:18:08

目录

一、功能演示

二、完整代码

三、参考文档


一、功能演示

运行以后完整的效果如下:

点击开始,小车会沿着轨迹进行移动,点击轨迹点会显示经纬度和时间:

二、完整代码

废话不多说,直接给完整代码,替换成自己的KEY,就可以直接看到完整效果了。 

<!DOCTYPE html>

<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
	<meta name="keywords" content="天地图"/>
	<title>天地图-地图API-范例-车辆轨迹</title>
	<script src=" http://api.tianditu.gov.cn/api?v=4.0&tk=申请的KEY替换" type="text/javascript"></script>
	<script src="http://lbs.tianditu.gov.cn/js/lib/d3/d3.min.js" charset="utf-8"></script>
	<script src="http://lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/D3SvgOverlay.js"></script>
	<script src="http://lbs.tianditu.gov.cn/api/js4.0/opensource/openlibrary/CarTrack.js"></script>
	<script src="http://lbs.tianditu.gov.cn/api/js4.0/opensource/data/point.js"></script>
	<style type="text/css">
		body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
		#mapDiv{height:400px;width:100%;}
		p,input { margin-top: 10px; margin-left: 5px; font-size: 14px;  }
	</style>
</head>
<body onLoad="onLoad()">
<div id="mapDiv" ></div>
<p>本例演示车辆轨迹</p>
<div >
	<input type="button" value="开始" onClick="_CarTrack.start();"/>
	<input type="button" value="暂停" onClick="_CarTrack.pause();"/>
	<input type="button" value="结束" onClick="_CarTrack.stop();"/>
</div>
<script>
	//起点经纬度
	var startPosition = {
		time: '2023-12-19 10:28:10',
		lon: 121.1342347,
		lat: 32.0551446
	};
	//终点经纬度
	var endPosition = {
		time: '2023-12-19 10:31:10',
		lon: 121.1835337,
		lat: 32.0486566
	}
	//轨迹点列表
	var pointList = [
		{
			time: '2023-12-19 10:28:10',
			lon: 121.1342347,
			lat: 32.0551446
		},
		{
			time: '2023-12-19 10:28:30',
			lon: 121.1406307,
			lat: 32.0553588
		},
		{
			time: '2023-12-19 10:29:10',
			lon: 121.1475297,
			lat: 32.0555119
		},
		{
			time: '2023-12-19 10:29:30',
			lon: 121.1579859,
			lat: 32.0558791
		},
		{
			time: '2023-12-19 10:29:50',
			lon: 121.1679751,
			lat: 32.0563687
		},
		{
			time: '2023-12-19 10:30:10',
			lon: 121.1820965,
			lat: 32.0571032
		},
		{
			time: '2023-12-19 10:30:20',
			lon: 121.1866958,
			lat: 32.0572256
		},
		{
			time: '2023-12-19 10:30:30',
			lon: 121.1869832,
			lat: 32.0557261
		},
		{
			time: '2023-12-19 10:30:40',
			lon: 121.1869473,
			lat: 32.0534614
		},
		{
			time: '2023-12-19 10:31:10',
			lon: 121.1835337,
			lat: 32.0486566
		}
	];
	var tile = new T.TileLayer("http://t4.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=申请的KEY替换");
	var map = new T.Map("mapDiv", {layers: [tile]});
	map.centerAndZoom(new T.LngLat(121.1342347,32.0551446), 14);
	var startIcon = "http://lbs.tianditu.gov.cn/images/bus/start.png";	//起点图标
	var endIcon = "http://lbs.tianditu.gov.cn/images/bus/end.png";		//终点图标
	var circle;
	var _CarTrack = new T.CarTrack(map, {
		interval: 5,
		speed: 10,
		dynamicLine: true,
		polylinestyle: {color: "#2C64A7", weight: 5, opacity: 0.9},
		Datas: pointList.map(function (obj, i) {var lonLat = new T.LngLat(obj.lon,obj.lat);return lonLat;})
	})

	function onLoad() {
		this.createStartMarker();
		this.createPointList();
		this.createEndMarker();
	}

	//添加起点
	function createStartMarker() {
		var lonLat = new T.LngLat(this.startPosition.lon,this.startPosition.lat)
		var startMarker = new T.Marker(lonLat, {
			icon: new T.Icon({
				iconUrl: startIcon,
				iconSize: new T.Point(44, 34),
				iconAnchor: new T.Point(12, 31)
			})
		});
		map.addOverLay(startMarker);
	};
	//添加终点
	function createEndMarker() {
		var lonLat = new T.LngLat(this.endPosition.lon,this.endPosition.lat)
		var endMarker = new T.Marker(lonLat, {
			icon: new T.Icon({
				iconUrl: endIcon,
				iconSize: new T.Point(44, 34),
				iconAnchor: new T.Point(12, 31)
			})
		});
		map.addOverLay(endMarker);
	}
	function createPointList(){
		for(var i = 0 ; i < this.pointList.length ; i++){
			var point = this.pointList[i];
			circle = new T.Circle(new T.LngLat(point.lon, point.lat), 50,{color:"orange",weight:5,opacity:0.5,fillColor:"#db1f1f",fillOpacity:0.5,lineStyle:"solid"});
			map.addOverLay(circle);
			var content = "经度:" + point.lon + "<br>" +
					"纬度:" + point.lat + "<br>" +
					"时间:" + point.time;
			addClickHandler(content)
		}
	};

	function addClickHandler(content){
		circle.addEventListener("click",function(e){
			openInfo(content,e)}
		);
	};

	function openInfo(content,e){
		var point = e.lnglat;
		circle = new T.Marker(point);// 创建标注
		var markerInfoWin = new T.InfoWindow(content,{offset:new T.Point(0,-30)}); // 创建信息窗口对象
		map.openInfoWindow(markerInfoWin,point); //开启信息窗口
	}

</script>
</body>
</html>

可以自行修改代码逻辑,把轨迹点都动态替换一下,从后端接口获取就行了。 

三、参考文档

这也只是天地图的一部分功能,更多完整的可以参考官方文档:天地图API 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIA笔记6--路由基础与静态路由:浮动路由、缺省路由、迭代查找

文章目录 0. 概念1.路由器工作原理2. 跨网访问流程3. 静态路由配置4. 静态路由的应用场景4.1 路由备份4.2 浮动路由4.3 缺省路由 5. 迭代路由6 问题6.1 为什么路由表中有的下一跳的地址有接口&#xff1f;6.2 个人电脑的网关本质是什么&#xff1f; 0. 概念 自治系统&#xff…

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题 2024/11/29 21:11 缘起&#xff1a;中科创达的高通CM6125开发板的Android10的编译环境需要。 vendor/qcom/proprietary/commonsys/securemsm/seccamera/service/jni/jni_if.…

Matlab搜索路径添加不上

发现无论是右键文件夹添加到路径&#xff0c;还是在“设置路径”中专门添加&#xff0c;我的路径始终添加不上&#xff0c;导致代码运行始终报错&#xff0c;后来将路径中的“”加号去掉后&#xff0c;就添加成功了&#xff0c;经过测试&#xff0c;路径中含有中文也可以添加成…

自由学习记录(28)

C# 中的流&#xff08;Stream&#xff09; 流&#xff08;Stream&#xff09;是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的&#xff0c;提供了多种具体实现&#xff0c;每种实现都针对…

Redis3——线程模型与数据结构

Redis3——线程模型与数据结构 本文讲述了redis的单线程模型和IO多线程工作原理&#xff0c;以及几个主要数据结构的实现。 1. Redis的单线程模型 redis6.0之前&#xff0c;一个redis进程只有一个io线程&#xff0c;通过reactor模式可以连接大量客户端&#xff1b;redis6.0为了…

使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错

使用playwright自动化测试时&#xff0c;npx playwright test --ui打开图形化界面时报错 1、错误描述&#xff1a;2、解决办法3、注意符号的转义 1、错误描述&#xff1a; 在运行playwright的自动化测试项目时&#xff0c;使用npm run test无头模式运行正常&#xff0c;但使用…

深度学习模型:门控循环单元(GRU)详解

本文深入探讨了门控循环单元&#xff08;GRU&#xff09;&#xff0c;它是一种简化版的长短期记忆网络&#xff08;LSTM&#xff09;&#xff0c;在处理序列数据方面表现出色。文章详细介绍了 GRU 的基本原理、与 LSTM 的对比、在不同领域的应用以及相关的代码实现&#xff0c;…

用html+jq实现元素的拖动效果——js基础积累

用htmljq实现元素的拖动效果 效果图如下&#xff1a; 将【item10】拖动到【item1】前面 直接上代码&#xff1a; html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …

单片机学习笔记 12. 定时/计数器_定时

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【乐企文件生成工程】搭建docker环境,使用docker部署工程

1、自行下载docker 2、自行下载docker-compose 3、编写Dockerfile文件 # 使用官方的 OpenJDK 8 镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR ./app# 复制 JAR 文件到容器 COPY ../lq-invoice/target/lq-invoice.jar app.jar # 暴露应用程序监听的端口 EXPOSE 1001…

React基础知识三 router路由全指南

现在最新版本是Router6和Router5有比较大的变化&#xff0c;Router5和Router4变化不大&#xff0c;本文以Router6的写法为主&#xff0c;也会对比和Router5的不同。比较全面。 安装路由 npm i react-router-dom基本使用 有两种Router&#xff0c;BrowserRouter和HashRouter&…

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性&#xff1a;方法&#xff1a; 2.2 Program 类 三、方法&#xff1a;四、用户界面流程&#xff1a;五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序&#xff0c;用于管理书籍信息。这个程序将允许用户添加、编辑、查看…

打造去中心化交易平台:公链交易所开发全解析

公链交易所&#xff08;Public Blockchain Exchange&#xff09;是指基于公有链&#xff08;如以太坊、波场、币安智能链等&#xff09;建立的去中心化交易平台。与传统的中心化交易所&#xff08;CEX&#xff09;不同&#xff0c;公链交易所基于区块链技术实现资产交换的去中心…

CLIP模型也能处理点云信息

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

关于NXP开源的MCU_boot的项目心得

MCU的启动流程细查 注意MCU上电第一个函数运行的就是Reset_Handler函数&#xff0c;下图是表示了这个函数做了啥事情&#xff0c;注意加强一下对RAM空间的段的印象&#xff0c;从上到下是栈&#xff0c;堆&#xff0c;.bss段&#xff0c;.data段。 bootloader的难点 固件完…

MySQL5.6升级MySQL5.7

升级方式介绍 08 数据库服务版本升级方法 5.6 – 5.7 – 8.0 数据库版本升级方法&#xff1a; Inplace-本地升级 步骤一&#xff1a;在同一台服务器中&#xff0c;需要部署高版本数据库服务实例步骤二&#xff1a;低版本数据库中的数据进行备份迁移&#xff0c;迁移到高版本…

怎么理解BeamSearch?

在大模型推理中&#xff0c;常会用到BeamSearch&#xff0c;本文就BeamSearch原理与应用理解展开讲解。 一、BeamSearch原理 Beam Search 是一种启发式搜索算法&#xff0c;常用于自然语言处理&#xff08;NLP&#xff09;和其他需要生成序列的任务中&#xff0c;比如机器翻译…

shodan2-批量查找CVE-2019-0708漏洞

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

SciPy Optimize和 CVXPY对比

CVXPY和SciPy Optimize模块都是在Python中解决优化问题的强大工具&#xff0c;但它们是为不同类型的问题而设计的&#xff0c;具有不同的优点和局限性。本文对比两者的优缺点&#xff0c;阐述各自的应用场景&#xff0c;同时解释常用求解器&#xff0c;并给出实际示例进行说明。…

DevOps工程技术价值流:GitLab源码管理与提交流水线实践

在当今快速迭代的软件开发环境中&#xff0c;DevOps&#xff08;开发运维一体化&#xff09;已经成为提升软件交付效率和质量的关键。而GitLab&#xff0c;作为一个全面的开源DevOps平台&#xff0c;不仅提供了强大的版本控制功能&#xff0c;还集成了持续集成/持续交付(CI/CD)…