Angularjs+node+Mysql实现地图上的多点标注

  注:本文适合对于node有一定基础的人,如果您是小白,请先用1个小时学习node。node文档https://nodejs.org/en/docs/

  该片博文的源码地址:https://github.com/zhangxy1035/Gould

  一、项目介绍

  近几年,在大数据的驱动下,数据可视化变的越来越重要,其中现在比较火的就是地理位置可视化,在这篇文章中,将使用node作为服务器,angularjs作为前台显示,mysql作为数据库,实现地图上的多点标注。系统架构建设简单,可复用性高。

  在这里node的性能就不给大家赘述,项目中的地图接口使用的是高德地图,首先需要成为高德的开发者具体网址为http://lbs.amap.com/,其中需要申请开发者的key,只有将这个可以添加到自己的网页中才能做接下来的操作,首先咱们先来看一下,最终的效果图是如何的。

  二、项目展示

  

  由于图中的点较多,所以选择放在了数据库中,当然读者也可以不通过架设数据库,将自己的数据放入缓存中进行加载显示。

  按照正常习惯,我们首先来用node搭建后台,需要用到这几个模快,使用npm 命令行加载这些模块,body-parser, express,log4js,mysql(数据库模块)

  三、项目搭建

  该项目所用的编写工具是webStorm,项目结构入下图:

  

  其中node_modules中包含着npm所加载的模块,service主要是用node所写的后台服务,web中包含的是前台的网页html,css,js等

  首先来说一下数据库中的数据方便大家理解,在我的数据库中new_1这张表,只有3个字段。其中存储的字段是site_id,lng,lat。site_id表示的是点的信息,lng和lat表示的是经度和纬度。

  starts.js代码如下,在该项目中,node start,该服务才会被启动

 1 var express = require(‘express‘);
 2 var app = express();
 3 var path = require(‘path‘);
 4 var bodyParser = require(‘body-parser‘);
 5
 6 var position = require(‘./position‘);
 7
 8 app.set(‘port‘, process.env.PORT || 9909);
 9 app.use(bodyParser.urlencoded({ extended: false })) ;
10 app.use(bodyParser.json());
11 app.use(express.static(path.join(__dirname, ‘../web‘)));
12 app.use(express.static(path.join(__dirname, ‘../app‘)));
13 app.post(‘/getAllMarker‘,position.getAllMarker);
14
15 app.listen(app.get(‘port‘),function(){
16     console.log(‘成功开启node,端口号:‘+app.get(‘port‘));
17 });
18
19 process.on(‘uncaughtException‘, function (err) {
20     console.log(err);
21 });

  接下来介绍与数据库交互的文件position,在该文件中使用了mysql的包,具体操作复杂业务可参考:https://github.com/mysqljs/mysql

 1 var sql = require(‘mysql‘);
 2 var connection = sql.createConnection({
 3     host:‘localhost‘,
 4     user:‘root‘,
 5     password:‘zhang123‘,
 6     database:‘test‘
 7 });
 8 connection.connect();
 9 /**
10  * 获取所有标记点
11  * @param req
12  * @param res
13  */
14 exports.getAllMarker = function(req,res) {
15     console.log(‘获取所有标记点服务器端‘);
16     console.log(req.body);
17
18     var con = connection.query("select * from new_1",function(err,result,fields){
19         if(err){
20             throw err;
21         }
22         console.log("rows",result[0].site_id);
23         var new_1 = [];
24         result.forEach(function (item) {
25             var new_1item = {
26                 site_id: item.site_id,
27                 lng: item.lng,
28                 lat: item.lat
29             };
30             new_1.push(new_1item);
31         });
32         console.log("rowsss",new_1);
33         res.send({retCode:1,data:new_1});
34     })
35
36 };

  现在开始介绍前台,前台页面,在这个页面中需要输入开发者从高德地图上获取到的key值。

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="utf-8">
 5     <meta http-equiv="X-UA-Compatible" content="chrome=1">
 6     <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
 7     <style type="text/css">
 8         body,html,#container{
 9             height: 100%;
10             margin: 0px
11         }
12     </style>
13     <title>打点</title>
14
15 </head>
16 <body>
17 <!--<div id="container" tabindex="0" style=" width: 600px; height:400px">-->
18     <div id="container" tabindex="0">
19 </div>
20 <div class="controllerTopDiv" ng-app="PCMapInput" ng-controller="new1Ctrl">
21 </div>
22 <script src="lib/angualrjs.min.js"></script>
23 <script type="text/javascript" src="http://webapi.amap.com/maps?你的key"></script>
24 <script type="text/javascript" src="js/webController.js"></script>
25 <script type="text/javascript" src="js/webService.js"></script>
26 </body>
27 </html>

  以及前台的所需要的js文件:controller.js

 1 angular.module(‘PCMapInput‘,[‘PCFactory‘])
 2     .constant("CONFIG",{
 3         host: "http://192.168.1.103:9909",//本机测试地址(可变)
 4         version:‘1.0.0‘//版本
 5     })
 6     .controller(‘new1Ctrl‘,function($scope,Position) {
 7         var map = new AMap.Map(‘container‘,{
 8             resizeEnable: true,
 9             zoom: 10,
10             center: [121.48,31.22]
11         });
12         AMap.plugin(‘AMap.ToolBar‘,function(){
13             var toolbar = new AMap.ToolBar();
14             map.addControl(toolbar)
15         })
16
17
18         Position.getAllMarker({},function(data){
19             var infoWindow = new AMap.InfoWindow({offset:new AMap.Pixel(0,-30)});
20             for(var i=0;i<data.data.length;i++ ){
21                  var site_id = data.data[i].site_id;
22                 var lng = data.data[i].lng;
23                 var lat = data.data[i].lat;
24                  var marker = new AMap.Marker({
25                     position: [data.data[i].lng, data.data[i].lat],
26                     map:map
27                 });
28                 marker.content=‘网点‘+(site_id);
29                 marker.on(‘click‘,markerClick);
30                 marker.emit(‘click‘,{target:marker});
31             }
32             function markerClick(e){
33                 infoWindow.setContent(e.target.content);
34                 infoWindow.open(map, e.target.getPosition());
35             }
36             map.setFitView();
37
38         });
39
40
41
42     });

  controller的服务;

 1 angular.module(‘PCFactory‘,[])
 2     .factory(‘Position‘,function($http,CONFIG){
 3
 4
 5         var getAllMarker = function (query,success) {
 6             $http.post(CONFIG.host + ‘/getAllMarker‘,query)
 7                 .success(function(data){
 8                     success(data);
 9                 });
10         };
11
12         return {
13             getAllMarker : getAllMarker
14         };
15     });

  项目中所需要的lib文件亦在github上,包括angualrjs.min.js,angualrjs.min.css,bootstrap_4.0.0.css等。

  四、运行项目

  进入该项目中的service文件下,使用命令行node start,项目启动成功如图

  

  然后访问网页,在此之前你需要ipconfig下,你的ip地址是多少,需要在controller文件中进行修改,修改一致后,访问网页。为ip:9909/test.html

  至此,该项目完成,在该项目中,根据高德开发api我还增加了一些鼠标响应事件,大家快快去体验下吧。

  

时间: 2024-10-14 22:24:15

Angularjs+node+Mysql实现地图上的多点标注的相关文章

Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定点的定位以及附加信息的展示.这样我们的项目就更加完善了,从宏观上看到每个点,从微观上分析每个点的不同.这种方法往往在大数据可视化方面很有效果. Angularjs+node+Mysql实现地图上的多点标注原文地址:http://www.cnblogs.com/DonaHero/p/5815595.h

调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注

前几天接了一个小项目,就是有关百度地图的,和我的上一篇不一样,上一篇是复制人家的源代码是把东西写死了的,这次的比较有难度,要调取他的接口,用js来实现. 下面我先说一下主要实现的功能,和要实现的页面 这个小项目分为前台和后台 前台需要两个页面,第一个页面是一打开就可以获得自己的实时位置,显示当前位置与当前的经纬度,这两项是自动获取的,还有标题和电话是可以自己添加的,点击添加,就是到达百度地图的页面,你刚刚添加的东西就会在这个地图上显示,形成一个标注,点击标注,里面显示的就是刚刚你添加的标题和电话

【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注

原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo,酒店logo等) 如何在标注上显示信息窗口,以及添加文字标签等其他覆盖物: 最后,介绍一个获取坐标的给力工具. ---------------------------------------------------------------------------------------------------

利用图标字体实现在线地图上的地点标注与颜色渲染

前阵子做在线地图应用的时候,有个需求,就是地点标注出来要按区间分段渲染颜色.当然,可以用标签模拟正方形,三角形,再填充颜色,用css3还可以模拟一些圆形出来,但是一来要兼容万恶的IE7,二来又要好看. 近几年移动端浏览器上流行的图标字体(icon font)就派上用场了,最重要是IE6都支持它.下图是使用图标字体后的地图渲染效果,是不是很不错呢? 使用icon font来生成图标相对于基于图片的图标来说,有如下的好处: 1.自由的变化大小 2.自由的修改颜色 3.添加阴影效果 4.IE6也可以支

node &amp;&amp; mysql 结合使用

本文基于mac上的开发,node && mysql的简单结合使用. 一.搭建环境 到官网上下载对应自己电脑的相关的版本.然后启动mysql 在使用npm -v 检测本电脑是否安装了nodejs,如果没有就到node 官网下载相应的版本进行安装,下图是本机上安装的版本 使用npm进行项目的搭建,需要安装express和mysql,在创建好的目录中,执行npm install express mysql --save 这里的express暂时没有用上,可以不用安装 二.项目的结构 本项目是一个

Android百度地图 - 在地图上标注已知GPS纬度经度值的一个或一组覆盖物 - OPEN 开发经验库 - 360安全浏览器 8.1

首页   代码   文档   问答   资讯   经验   GitHub日报 登录   注册 www.open-open.com/libOPEN经验 投稿 全部经验分类  Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类  >  开发语言与工具  >  移动开发  

百度地图API 添加自定义标注 多点标注

原文:百度地图API 添加自定义标注 多点标注 分四个文件 location.php map.css 图片 数据库 数据库配置自己改下 ------------------------------------------------------------  华丽的分割线   ----------------------------------------------------- location.php 主文件 <link rel="stylesheet" type=&quo

PHP地图上的点文字标注

1,第一步当然是建立百度地图放置的容器嘛,这个不解释<div class="s_r" style="float:left;width:680px;height:620px;margin-top:10px " id="container2"></div> 2,地图旁增加一排文字,把标注点的信息一个一个都列出来,这个以后要用于和地图上的标注连接起来的,在这边点击一下,地图那边标注相应的点就弹出提示信息了,样式就是如下<u

node与mysql的相互使用————node+mysql

node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我这里不细说.东西挺多的. 先下个Navicat premium用于直观的操作数据库,让数据库看得见,摸得着. 建立链接(localhost:3306): 新建个数据库,命名为test1.(这名字有用的!) 数据库代码(点查询,可以编写代码): //创建一个表,表定义的数据包括:Id,name,url