使用Node.JS进行谷歌地图定位
此系统需求为在浏览器页面中输入人名,提交到后台在数据库中查找地址,并将地址传递到浏览器页面后调用谷歌地图api,进行地址解析并定位标注(浏览器页面中需编写一个ajax调用)
服务器端代码server.js
var mysql = require('mysql');
var pool = mysql.createPool({connectionLimit : 10,host : 'us-cdbr-iron-east-02.cleardb.net',user : 'bd6acx3bd0c01b',password : 'f4ba4af2',database : 'heroku_33a4ds48168f4x3',port:3306
});var fs = require('fs');
var http = require("http");
const url = require("url");
const querystring = require("querystring");
const server = http.createServer((request, response) => { console.log(request.url);if (request.url.startsWith("/get?")) { //数据处理const obj = url.parse(request.url, true)var peopleName=obj.query['peoplename'].toString()var arrName = peopleName.split(" ")let firstname=''let middlename=''let lastname=''let nameNum=0 //middlename会为空值,进行计算let index=[]let j=0for(let i=0;i<arrName.length;i++){if(arrName[i]!='')nameNum+=1if(arrName[i]!='') {index[j] = ij++}}if(nameNum==2){firstname=arrName[index[0]].toString()lastname=arrName[index[1]].toString()}else{firstname=arrName[index[0]].toString()middlename=arrName[index[1]].toString()lastname=arrName[index[2]].toString()}var userAddSql_Params = [firstname, middlename,lastname];pool.query('SELECT addrbusiness,city,state FROM peopleinfo where firstname=? and middlename=? and lastname=?',userAddSql_Params, function (error, results) {//if (error) throw error;if (error) return;console.log('The addr is: ', results[0].addrbusiness +' ' + results[0].city+ ' ' + results[0].state);response.writeHead(200,"ok",{"Content-type":"application/x-javascript","Access-Control-Allow-Origin":(request.url,"Access-Control-Allow-Headers":"damu","Access-Control-Allow-Methods":"PUT,DELETE,POST","Access-Control-Max-Age":"10"})// if (item.hasOwnProperty("name")) { }//var str = JSON.stringify(url.parse(request.url, true).query);response.write(results[0].addrbusiness +' ' + results[0].city+ ' ' + results[0].state);response.end();});} else if (request.url.startsWith("/post")) {} else {// response.writeHead(500, "Invalid Request", {"Content-Type": "text/html; charset=utf-8"});// response.end("无效请求");// 解析请求,包括文件名var pathname = url.parse(request.url).pathname;// 输出请求的文件名console.log("Request for " + pathname + " received.");// 从文件系统中读取请求的文件内容fs.readFile(pathname.substr(1), function (err, data) {if (err) {console.log(err);// HTTP 状态码: 404 : NOT FOUND// Content Type: text/htmlresponse.writeHead(404, {'Content-Type': 'text/html'});}else{// HTTP 状态码: 200 : OK// Content Type: text/htmlresponse.writeHead(200, {'Content-Type': 'text/html'});// 响应文件内容response.write(data.toString());}// 发送响应数据response.end();});}
})server.listen(process.env.PORT || 8080 , () => {//console.log(`server starting at ${config.host}:${config.port}`)console.log(`server starting at 127.0.0.1:8080`)
})
index.html页面代码
<!DOCTYPE html>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&key=AIqfSyCbzKZLTVlEJwsmQQy_RKSyFczidmpw63M&sensor=SET_TO_TRUE_OR_FALSE"></script><script>window.onload = ()=>{const peoplename = document.querySelector("#address");const ajaxBtn = document.querySelector("#submit");ajaxBtn.addEventListener("click",(ev)=>{ev = ev||event;ev.preventDefault();const query = peoplename.value;const url = "https://mynodejsmap.herokuapp.com"+`/get?peoplename=${query}`;//const url = "http://127.0.0.1:8080"+`/get?peoplename=${query}`;makeRequest("GET",url)})function makeRequest(method,url) {const httpRequest = new XMLHttpRequest();if (!httpRequest) {alert('Giving up :( Cannot create an XMLHTTP instance');return false;}httpRequest.onreadystatechange = ()=>{if (httpRequest.readyState === XMLHttpRequest.DONE) {if (httpRequest.status === 200 || httpRequest.status === 304) {console.log(httpRequest.status.toString())console.log(httpRequest.responseText) //实例化Geocoder服务var geocoder = new google.maps.Geocoder();//1.地理解析过程//请求数据GeocoderRequest为addressgeocoder.geocode({ address: httpRequest.responseText }, function geoResults(results, status) {//这里是回调函数//状态为Ok说明正确if (status == google.maps.GeocoderStatus.OK) { //获取解析后的经纬度//alert('result:' + results[0].geometry.location);var latlng = new google.maps.LatLng(results[0].geometry.location.latitude,results[0].geometry.location.longitude);var myOptions = {zoom:16, //设定缩放倍数center:latlng, //地图中心设定为指定的坐标点mapTypeId:google.maps.MapTypeId.ROADMAP //指定地图类型};var map = new google.maps.Map(document.getElementById("map"),myOptions);map.setCenter(results[0].geometry.location);var marker = new google.maps.Marker({map: map,position: results[0].geometry.location});}else {alert(":error " + status);}});} else {alert('There was a problem with the request.'+ httpRequest.status.toString());}}}httpRequest.open(method,url);httpRequest.send();}}
</script><html><head><title>Geocoding Service</title><meta name="viewport" content="initial-scale=1.0, user-scalable=no"><meta charset="utf-8"><style>/* Always set the map height explicitly to define the size of the div* element that contains the map. */#map {height: 100%;}/* Optional: Makes the sample page fill the window. */html, body {height: 100%;margin: 0;padding: 0;}#floating-panel {position: absolute;top: 10px;left: 25%;z-index: 5;background-color: #fff;padding: 5px;border: 1px solid #999;text-align: center;font-family: 'Roboto','sans-serif';line-height: 30px;padding-left: 10px;}</style></head><body><div id="floating-panel"><input id="address" type="textbox" value=""><input id="submit" type="button" value="Geocode"></div><div id="map"></div><script>var mapfunction initMap() {map = new google.maps.Map(document.getElementById('map'), {zoom: 8,center: {lat: -34.397, lng: 150.644}}); }</script><script async defersrc="https://maps.googleapis.com/maps/api/js?key=AIqfSyCbzKZLTVlEJosmQQy_RKSyFczidmpw63M&callback=initMap"></script></body>
</html>
效果如下:
初始界面
查询得到结果并定位
使用Node.JS进行谷歌地图定位相关推荐
- Android谷歌地图+定位
安卓的谷歌地图简单实现,能够显示地图,并且定位到当前位置 网上的教程和讲解有一大堆,我就不细说了,直接上代码 需要注意的是,我这是v2版的,和V1比申请key的地址和方式有点变化,使用也有一点变化.建 ...
- vue2.0/原生js使用谷歌地图并显示标记点(附两点间路径方法)
图1,谷歌地图初始化并实现显示点信息 图2 ,谷歌地图实现两点间路径 图3,高德地图实现搜索显示点,可点击地图取点并获取地址,也可以搜索出来 具体文章 前提 使用地图,都是需要获取开发者的key的,去 ...
- 经纬度计算距离html,js版谷歌地图计算两经纬度坐标点的距离
球面上两点间大圆劣弧的距离html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- html5 调用谷歌地图定位,使用html5地理定位的网页不如谷歌地图准确?
使用笔记本电脑上的浏览器Chrome,我打开了一个本地html网页以获取当前位置.返回的位置(1.3238272103.8606336)与我的实际位置不接近.相似性,网站 [1] (1.3238272 ...
- [转]为什么我要用 Node.js? 案例逐一介绍
原文地址:http://blog.jobbole.com/53736/ 介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样, ...
- node.js学习总结
NodeJS介绍 1.概述: Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎 进行了封装,它主要用于创建快速的.可扩展的网 ...
- 知乎: 如何评价阿里开源的企业级 Node.js 框架 egg? #18
知乎: 如何评价阿里开源的企业级 Node.js 框架 egg? #18 搬自我在知乎的问答: https://www.zhihu.com/question/50526101/answer/14495 ...
- 学习Node.js笔记
什么是Node.js 官方解释: Node.js 是一个基于 Chrome V8引擎的 JavaScript运行环境.Node.js使用了一个事件驱动.非阻塞式I/O的模型( Node.js的特性), ...
- 为什么我要用 Node.js? 案例逐一介绍
介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScript ,从前端跨越到后端, ...
最新文章
- 使用NVIDIA A100 TF32获得即时加速
- python习题:写一个备份数据库的脚本
- 汽车车牌识别系统实现(四)--字符识别+代码实现
- 直播推流实现RTMP协议的一些注意事项
- 管理表空间和数据文件——维护表空间——设置默认表空间和删除表空间和删除数据文件盒临时文件...
- 前端学习(3157):react-hello-react之一个简单的helloworld
- linux iso的引导文件,Linux_从硬盘启动Desktop ISO所需的引导文件,一、仅从硬盘启动Destdop ISO 并 - phpStudy...
- Linux设备驱动程序学习-Linux设备模型(总线、设备、驱动程序和类)
- 【MySQL】RPM包安装
- 使用了css3动画的元素z-index失效解决办法
- [swift 进阶]读书笔记-C2P3_Set、 C2P4_Range
- 在FL Studio中如何使用混音器的效果
- fw325r虚拟服务器,fw325r管理页面
- Html代码问题:用鼠标悬停在文字上文字的颜色就变颜色的效果
- 莫队算法学习笔记(一)——普通莫队
- docker容器满了,如何清理内存
- H5获取用户code,换openID
- Darknet框架的权重文件.weights类型转换为keras框架的权重文件类型.h5
- Doris入门到精通-阶段一(简介安装使用)
- excel计算机不准确,excel表格数据合计不准确-EXCEL表格中,求和的数字总是不对...
热门文章
- 喜大普奔,苹果可以推送退款通知了
- 如何使用性能监视器监控内存
- OpenCV中saturate_cast模板函数的使用
- OVS的作用OVS 总体架构、源码结构及数据流程全面解析
- IDEA终端出错 Cannot open Local Terminal
- 基于Vue+ElementUI+Springboot劳动仲裁法院纠纷调解系统
- nagios监控使用139邮箱报警
- 程序开发常用第三方类库一览表(VendorLib)
- 手机怎么访问kodi_Kodi媒体中心安装配置指南
- base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法