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

    注:本博文为博主原创,转载请注明出处。

    在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定点的定位以及附加信息的展示。这样我们的项目就更加完善了,从宏观上看到每个点,从微观上分析每个点的不同。这种方法往往在大数据可视化方面很有效果。

    Angularjs+node+Mysql实现地图上的多点标注原文地址:http://www.cnblogs.com/DonaHero/p/5815595.html(注:本文是在这篇博文的基础上进行增加功能的,还请各位能仔细搭建自己的环境,搭建环境与运行,这里将不再赘述。)

    项目源码地址:https://github.com/zhangxy1035/Gould    (项目中的源码已经更新)

    一、项目演示

    我们经常在自己的业务中,需要搜索某一点,然后让其在地图中进行显示,显示时也必须带上自己的附加信息。项目运行结果图如下:

    当点击搜索按钮之后,结果如图

    定位到了特定的点,并且还打印出了该点所携带的附加信息。

    二、项目搭建

    首先来说一下我们的数据集,在数据集中我们有两张表,一张表为new_3,另一张表为sample表,其中所带的字段如下:

     new_3中的字段为前三个,sample表中的字段为后面几个。接下来我们将要实现的功能就是通过前台输入Order_id,后台进行接收,执行查询,并把返回的数据显示到前台。

    position.js文件代码:

 1 exports.getAllMarker4 = function(req,res) {
 2     var order_id = req.body.order_id;
 3     console.log(‘获取所有标记点服务器端‘);
 4     console.log(req.body);
 5
 6     var con = connection.query("SELECT * FROM new_3 n3 ,sample s WHERE s.addr=n3.shop_id AND order_id=‘"+order_id+"‘",function(err,result,fields){
 7         if(err){
 8             throw err;
 9         }
10         var new_3 = [];
11         result.forEach(function (item) {
12             var new_1item = {
13                 order_id:item.Order_id,
14                 shop_id:item.shop_id,
15                 courier_id: item.Courier_id,
16                 addr: item.Addr,
17                 arrival_time: item.arrival_time,
18                 departure:item.departure,
19                 amount:item.amount,
20                 lng:item.lng,
21                 lat:item.lat
22
23             };
24             new_3.push(new_1item);
25         });
26         console.log(new_3);
27         res.send({retCode:1,data:new_3});
28     })
29
30 };

    其中需要说明的一点:order_id需要前台进行接收,所以需要这样书写:var order_id = req.body.order_id;

    start.js,由于在上一篇中我们已经将项目构建完成,现在我们只需要在start.js文件中增加这样一句代码即可:

1 app.post(‘/getAllMarker4‘,position.getAllMarker4);

    controller.js

 1     .controller(‘new4Ctrl‘,function($scope,Position){
 2         var map = new AMap.Map(‘container‘,{
 3             resizeEnable: true,
 4             zoom: 10,
 5             center: [121.48,31.22]//定位到上海
 6         });
 7         AMap.plugin(‘AMap.ToolBar‘,function(){
 8             var toolbar = new AMap.ToolBar();
 9             map.addControl(toolbar)
10         })
11         var order_id=$scope.order_id;
12           //自定义搜索
13         $scope.mapSearch = function () {
14             //自定义搜索
15             if ($scope.order_id) {
16                 Position.getAllMarker4({order_id: $scope.order_id}, function (data) {
17                     var infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -30)});
18                     console.log(data.data[0]);
19                     order_id = data.data[0].order_id;
20                     var shop_id = data.data[0].shop_id;
21                     var lng = data.data[0].lng;
22                     var lat = data.data[0].lat;
23                     var courier_id = data.data[0].courier_id;
24                     var amount = data.data[0].amount;
25                     var time = data.data[0].arrival_time + data.data[0].departure;
26                     var marker = new AMap.Marker({
27                         position: [lng, lat],
28                         map: map
29                     });
30                     marker.content = ‘Courier‘ +‘ ‘+ (courier_id) +‘ ‘+ ‘In outlets‘ +‘ ‘+ (shop_id) +‘ ‘+ ‘spend‘ +‘ ‘+ (time)  +‘ ‘+ ‘Minutes, take pieces‘ +‘ ‘+ (amount) +‘ ‘+‘Order number:‘ +‘ ‘+ (data.data[0].order_id);
31                     marker.on(‘click‘, markerClick);
32                     marker.emit(‘click‘, {target: marker});
33
34                     function markerClick(e) {
35                         infoWindow.setContent(e.target.content);
36                         infoWindow.open(map, e.target.getPosition());
37                     }
38
39                     map.setFitView();
40
41                 });
42             } else {
43                 alert("请输入正确订单号!");
44             }
45         }
46
47
48
49     })

    service.js

1         var getAllMarker4 = function (query,success) {
2             $http.post(CONFIG.host + ‘/getAllMarker4‘,query)
3                 .success(function(data){
4                     success(data);
5                 });
6         };

    html

 1 <div  class="container" ng-app="PCMapInput" ng-controller="new4Ctrl">
 2     <div class="container-fluid">
 3         <div class="row-fluid">
 4             <div class="span6">
 5                 <div id="container" tabindex="0" style=" width: 800px; height:500px"></div>
 6             </div>
 7             <div class="span6">
 8                 <div style=" width: 100px; height:50px"></div>
 9                 <div class="bar bar-header item-input-inset">
10                     <label class="item-input-wrapper">
11                         <i class="icon ion-ios-search placeholder-icon"></i>
12                         <input type="text" ng-model="order_id" placeholder="订单查询" style="width: 150px">
13                     </label>
14                     <button class="button button-balanced" ng-click="mapSearch()">搜索</button>
15                 </div>
16             </div>
17         </div>
18     </div>
19 </div>

   在上述代码中使用了ng-model双向绑定,然后点击button进行触发,但凡前台后台数据传输,亦或者是获取数据,用这种方法都是简单易于实现的。还有不要忘记在自己的页面中加入从高德地图上获取到的开发者key值。这样一个搜索的功能就实现了。通过对于本文的学习,希望你能实现node架构前后台的交互传值,快去动手试试吧。

    注:本文亦包括上一篇的博文中所用到的数据集,均来自于天池大数据平台,在此博主深表谢意。

时间: 2024-10-10 10:22:39

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

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

注:本文适合对于node有一定基础的人,如果您是小白,请先用1个小时学习node.node文档https://nodejs.org/en/docs/ 该片博文的源码地址:https://github.com/zhangxy1035/Gould 一.项目介绍 近几年,在大数据的驱动下,数据可视化变的越来越重要,其中现在比较火的就是地理位置可视化,在这篇文章中,将使用node作为服务器,angularjs作为前台显示,mysql作为数据库,实现地图上的多点标注.系统架构建设简单,可复用性高. 在这里

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 所有分类  >  开发语言与工具  >  移动开发  

通过地图上两个点的经纬度测算两点的距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈 就叫作"赤道".在赤道的南北两边,画出许多和赤道平行的圆圈,就是"纬圈":构成这些圆圈的线段, 叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬. 北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷

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

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

AngularJS的核心对象angular上的方法全面解析(AngularJS全局API)

总结一下AngularJS的核心对象angular上的方法,也帮助自己学习一下平时工作中没怎么用到的方法,看能不能提高开发效率.我当前使用的Angularjs版本是1.5.5也是目前最新的稳定版本,不过在全局API上,版本不同也没什么区别. AngularJS 全局 API列表 element bootstrap copy extend merge equals forEach noop bind toJson fromJson identity isUndefined isDefined is

Ios 高德地图 地图上添加多个大头针 怎么在复用队列中知道我单击的是哪一个大头针

//创建大头针对象     MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init];     //插入大头针的位置     pointAnnotation.coordinate = CLLocationCoordinate2DMake(39.989631, 116.481018);     //大头针的标题     pointAnnotation.title = @"方恒国际";     //大头针的子

iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息

如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)addAnnotation:(id <MKAnnotation>)annotation; 说明:需要传入一个遵守了MKAnnotation协议的对象 基本步骤为: <1>新建一个遵守MKAnnotation协议的类: @interface MyAnnotation : NSObject 

ArcGIS for Android地图上实际距离与对应的屏幕像素值计算

/** * 将实际地理距离转换为屏幕像素值 * * @param distance * 实际距离,单位为米 * @param currScale * 当前地图尺寸 * @param context * @return */ public static double metreToScreenPixel(double distance, double currScale, Context context) { float dpi = context.getResources().getDispla