H5+JAVA实现最短路径算法与地图显示(第一天)

本贴最后更新于 3209 天前,其中的信息可能已经事过景迁

     最近有个课程项目,关于数据结构基础与算法的,要求写点代码实现校园最短路径的算法。算法网上能找到一大堆,但是要求以地图形式展示,这个一开始觉得还真有点难。本想通过调用百度地图api来实现显示这一模块,于是就去看了下,在百度地图上,上海大学太小了,找不足50各点。最后还是想到了前断时间张大神做了一个基于H5 canvas的实时画布,于是想尝试以下,发现还不错。

  实现的方案是:采用java做后台,H5的Canvar作为结果展示部分。总体架构为:springMvc+hibernate+html5+jquery。

  1.     springmvc:一种开源框架,我主要用它来实现我的业务逻辑以及数据的传递交互。
  2.     hibernate:我用他来操作我的mysql数据库,实现对点和线的管理。
  3.     html5:前台部分,当然是显示我的结果以及一些操作。
  4.     jquery:用来一些简单的数据交互。

   首先来看一下H5的画布

canvar画图展示

上图就是用canvar画出来的

 

看一下具体的代码;

function draw(id){//初始化函数
	var canvers=document.getElementById('mycanver');
	if(canvers == null){
		return false;
	}
	var cxt=canvers.getContext('2d');
	canvers.addEventListener("click", function (evt) { canversClick(canvers,evt,cxt)}, false);//添加点击事件
		drawPoint(cxt,200,100,'上海大学北门');
		drawPoint(cxt,450,160,'上海大学图书馆');
		drawPoint(cxt,100,180,'上大南区');
		drawPoint(cxt,300,30,'上大新世纪');
	dramLine(200,100,450,160,cxt);

}

function drawPoint(cxt,x,y,text){//描点函数
cxt.beginPath();
cxt.arc(x,y,10,0,360,false);
cxt.fillStyle="cornflowerblue";//填充颜色,默认是黑色
cxt.fill();//画实心圆
cxt.closePath();

 cxt.font = '14px';
 cxt.textAlign = 'center';
 cxt.textBaseline = 'top';
 cxt.strokeStyle = 'black';
 cxt.strokeText(text, x, y+15);

}
function dramLine(fromX,fromY,toX,toY,cxt,color){//连线函数
cxt.save();
if(color==null){
cxt.strokeStyle="black";
}
else {
cxt.strokeStyle = color;
}
cxt.translate(0.5,0.5);
cxt.lineWidth = 1;
cxt.beginPath();
cxt.moveTo(fromX, fromY);
cxt.lineTo(toX,toY);
cxt.stroke();
cxt.restore();
}

以上是画图的主要脚本函数。前台很简单,一个index.html

<canvas id="mycanver" width="1000px" height="600px"></canvas>

然后加上这些脚本就可以很快的画出上面的图形。今天就到这,明天继续更新。访问测试地址http://liuxin.lxliu.cn/sj这个也是我目前实现的功能

前台测试代码:缺两个文件,一个jquery,一个bootstrap

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
			 <script src="js/jquery-2.1.1.js"></script>
   	 <link href="css/bootstrap.min.css" rel="stylesheet">
	</head>
	<body onload="draw('mycanver')">
		<canvas id="mycanver" width="1000px" height="600px"></canvas>
	&lt;div class="container"&gt;
		&lt;div class="col-sm-3"&gt;
			&lt;input type="radio" name="mode" checked="checked" value="0"/&gt;浏览模式&amp;nbsp;
			&lt;input type="radio" name="mode"  value="1"/&gt;添加标注模式&amp;nbsp;
			&lt;input type="radio" name="mode"  value="2"/&gt;连线模式&amp;nbsp;
		&lt;/div&gt;
		&lt;div class="col-sm-4"&gt;
			&lt;div&gt;起始点:&lt;span id="startPoint" style="width: 80px;display: inline-block;"&gt;&lt;/span&gt;&lt;input type="radio" name="pointState" checked="checked" value="0"/&gt;起始点&amp;nbsp;&lt;/div&gt;
			&lt;div&gt;终止点:&lt;span id="endPoint"  style="width: 80px;display: inline-block;"&gt;&lt;/span&gt;&lt;input type="radio" name="pointState" value="1"/&gt;结束点&amp;nbsp;&lt;/div&gt;
		&lt;/div&gt;
		&lt;div class="col-sm-2"&gt;&lt;button class="btn btn-default dramLine"&gt;连线&lt;/button&gt;&lt;/div&gt;
		&lt;div class="col-sm-3"&gt;&lt;button class="zoom" onclick="zoom_click()"&gt;缩放&lt;/button&gt;&lt;/div&gt;
	&lt;/div&gt;


	&lt;script&gt;

jQuery(document).on('click', ".addpoint", function() {
var data={
pointInput:$("#pointInput").val(),
pointNum:$("#pointNum").val(),
pointName:$("#pointName").val()
}
jQuery.ajax({
type: 'POST',
url: "addPoint",
data:data,
dataType: 'json',
success: function(json) {
if(json.status==0){
location.reload();
}
else {
$.toaster({ title : 'warning', priority : 'warning', message : json.result });
}
}
});
});

jQuery(document).on('click', ".deletePoint", function() {
var data={
id:$(this).attr("data-id")
}
jQuery.ajax({
type: 'POST',
url: "deletePoint",
data:data,
dataType: 'json',
success: function(json) {
if(json.status==0){
location.reload();
}
else {
$.toaster({ title : 'warning', priority : 'warning', message : json.result });
}
}
});
});

jQuery(document).on('click', ".addLine", function() {
var data={
fromPoint:$("#lineFrom").val(),
toPoint:$("#lineTo").val(),
lenth:$("#lenth").val(),
ableBike:$("#ableBike").val()
}
jQuery.ajax({
type: 'POST',
url: "addLine",
data:data,
dataType: 'json',
success: function(json) {
if(json.status==0){
location.reload()
}
else{
$.toaster({ title : 'warning', priority : 'warning', message : json.result });
}
}
});
});

jQuery(document).on('click', ".deleteLine", function() {
var data={
id:$(this).attr("data-id")
}
jQuery.ajax({
type: 'POST',
url: "deleteLine",
data:data,
dataType: 'json',
success: function(json) {
if(json.status==0){
location.reload();
}
else {
$.toaster({ title : 'warning', priority : 'warning', message : json.result });
}
}
});
});

	&lt;/script&gt;
&lt;/body&gt;

</html>


                

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 606 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 41 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 3 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 445 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 618 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    安卓端仓库:Hi-Windom/Sillot-android

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    28 引用 • 25 回帖 • 56 关注
  • 安全

    安全永远都不是一个小问题。

    191 引用 • 813 回帖
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖
  • 笔记

    好记性不如烂笔头。

    306 引用 • 782 回帖 • 1 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 10 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 355 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 96 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 44 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 437 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 50 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 1 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 1 关注