tnblog
首页
视频
资源
登录

C#腾讯地图Web端定位地址搜索及手机导航

6438人阅读 2018/11/29 9:18 总访问:186452 评论:0 收藏:0 手机
分类: .NET

前段时间项目涉及到腾讯地图的业务,这里马克一下。

一开始做腾讯地图功能完全是懵逼的,一搜网上做百度地图居多,问为什么不用百度地图,原因是后面会衔接微信,百度定图定位会有偏差,网上一搜,果真有不少网友吐槽有一公里左右偏差,然后屁颠屁颠的跑去看腾讯地图的官方文档了。

腾讯地图API入口:https://lbs.qq.com/javascript_v2/demo.html   重点看参考手册和示例

腾讯地图API技术交流群:161525145 (本人保证没有收任何广告费)

我要实现的业务是:

①后台网页端加载腾讯地图,显示实现设置好的几个坐标点

②如果默认没有标点的话显示浏览器当前位置

③自定义地址,可以在地图上搜索位置,取得经纬度加进数据库

④在手机端显示数据库坐标点 实现导航效果  

在网页端后台显示地图  话不多说 上代码


HTML部分

  1.   <div class="mapBox">
  2.          <div id="mapBox" style="height:300px">
  3.            <p id="mapInfo"></p>
  4.           </div>
  5.   </div>


引入两个JS


  1.  <script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
  2.  <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js">


JS部分(关键代码)


  1.  <script type="text/javascript">
  2.         jQuery(document).ready(function ({
  3.             VGeneral.init('Site');
  4.             Site.init();
  5.             showMap();
  6.         });
  7.         function showMap({
  8.             var map = new qq.maps.Map(document.getElementById("mapBox"), {    //地图部分初始化
  9.                 zoom: 24,               //设置地图缩放级别
  10.                 center: new qq.maps.LatLng(24.968320118.571190),     //设置中心点
  11.                 zoomControl: true,    //不启用缩放控件
  12.                 mapTypeControlOptions: {  //设置控件的地图类型为普通街道地图
  13.                     mapTypeIds: qq.maps.MapTypeId.ROADMAP
  14.                 }
  15.             });
  16.  
  17.             var info = new qq.maps.InfoWindow({ map: map });      //添加提示窗
  18.             $.post("/Site/GetData"function (data{
  19.                 var result = $.parseJSON(data);
  20.                 //result中数据 用于显示标记、和标记点击时的提示信息
  21.                 if (result.total > 0) {
  22.                     for (var i = 0; i < result.rows.length; i++) {
  23.                         var row = result.rows[i];
  24.                         if (row.IsShowGIS) {
  25.                             var marker = new qq.maps.Marker({
  26.                                 positionnew qq.maps.LatLng(row.latitude, row.longitude),
  27.                                 map: map
  28.                             });
  29.                             //创建标记
  30.                             //***将必要的数据存入每一个对应的marker对象
  31.                             marker.id = row.ID;
  32.                             marker.name = row.Name;
  33.                             marker.locate = row.Address;
  34.                             marker.latitude = row.latitude;
  35.                             marker.longitude = row.longitude;
  36.                             //点击坐标点
  37.                             qq.maps.event.addListener(marker, 'click'function ({
  38.                                 $('#dg').datagrid('clearSelections');
  39.                                 $('#dg').datagrid('selectRow', $('#dg').datagrid('getRowIndex'this.id));
  40.                             });
  41.                         }
  42.  
  43.                     };
  44.                 }
  45.             });
  46.         }
  47.     </script>


添加搜索坐标点

HTML部分

  1. <div class="row-fluid">
  2.                         <div class="span6 ">
  3.                             <div class="control-group">
  4.                                 <label class="control-label">GIS地图</label>
  5.                                 <div class="controls">
  6.                                     <label class="checkbox">
  7.                                         <input type="checkbox" id="txtIsShowGIS" checked /> 显示
  8.                                     </label>
  9.                                 </div>
  10.                             </div>
  11.                         </div>
  12.                     </div>
  13.                     <div class="row-fluid">
  14.                         <div class="span6 ">
  15.                             <div class="control-group">
  16.                                 <label class="control-label">纬度</label>
  17.                                 <div class="controls">
  18.                                     <input type="text" id="txtlatitude" class="easyui-validatebox textbox m-wrap span12" data-options="" />
  19.                                 </div>
  20.                             </div>
  21.                         </div>
  22.                         <div class="span6 ">
  23.                             <div class="control-group">
  24.                                 <label class="control-label">经度</label>
  25.                                 <div class="controls">
  26.                                     <input type="text" id="txtlongitude" class="easyui-validatebox textbox m-wrap span12" data-options="" />
  27.                                 </div>
  28.                             </div>
  29.                         </div>
  30.                     </div>
  31.                    <h3 class="form-section">GIS地图</h3>
  32.                     <div class="row-fluid">
  33.                         <div class="span4 ">
  34.                             <div class="control-group">
  35.                                 <label class="control-label">省市</label>
  36.                                 <div class="controls">
  37.                                     <input type="text" id="regionText" class="easyui-validatebox textbox m-wrap span12" data-options="" value="泉州"/>
  38.                                 </div>
  39.                             </div>
  40.                         </div>
  41.                         <div class="span4 ">
  42.                             <div class="control-group">
  43.                                 <label class="control-label">地址</label>
  44.                                 <div class="controls">
  45.                                     <input type="text" id="poiText" class="easyui-validatebox textbox m-wrap span12" data-options="" />
  46.                                 </div>
  47.                             </div>
  48.                         </div>
  49.                         <div class="span4 ">
  50.                             <button type="button" class="btn blue" onclick="getResult()">查 询<i class="m-icon-swapright m-icon-white"></i></button>
  51.                         </div>
  52.                         
  53.                     </div>
  54.                     <div class="row-fluid">
  55.                         <div class="span6 ">
  56.                             <div id="container" style="height:400px"></div>
  57.                         </div>
  58.                         <div class="span6 ">
  59.                             <div id="infoDiv">
  60.                             </div>
  61.                             <div>
  62.                                 <span style="display: none" id="city"></span>
  63.                             </div>
  64.                         </div>
  65.                         
  66.                     </div>


JS部分


  1. <script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
  2. <script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
  3.     <script type="text/javascript">
  4.         jQuery(document).ready(function ()
  5.         {
  6.             $("#hidid").val('@ViewData["id"]');
  7.             VGeneral.init('SiteEdit');
  8.             Site.initedit();
  9.             
  10.             
  11.         });
  12.         /***************************************网页经纬度*************************************************************/
  13.         var geocoder, searchService = null;
  14.         var map = null;
  15.         var markersArray = [];
  16.         var latLng = null;
  17.         var init = function ({
  18.  
  19.             var center = new qq.maps.LatLng(39.916527116.397128);            
  20.             var city = document.getElementById("city");
  21.             map = new qq.maps.Map(document.getElementById('container'), {
  22.                 center: center,
  23.                 zoom28,
  24.             });
  25.             
  26.             //移除绑定事件
  27.             window.removeEvent = function ({
  28.                 qq.maps.event.removeListener(listener);
  29.             };
  30.             //地址和经纬度之间进行转换服务
  31.             geocoder = new qq.maps.Geocoder();
  32.             if ($("#txtlatitude").val() != "" && $("#txtlongitude").val() != "") {
  33.                 center = new qq.maps.LatLng($("#txtlatitude").val(), $("#txtlongitude").val());
  34.                 map.setCenter(center);
  35.                 var marker = new qq.maps.Marker({
  36.                     map: map,
  37.                     position: center
  38.                 });
  39.                 qq.maps.event.addListener(map, 'click'function (event{
  40.                     marker.setMap(null);
  41.                 });
  42.             }
  43.             else {
  44.                 codeAddress();
  45.             }
  46.             //点击显示坐标 ****************************************************************************
  47.             var listener = qq.maps.event.addListener(map, 'click'function (event{
  48.  
  49.                 //alert('您点击的位置为: [' + event.latLng.getLat().toFixed(5) + ', ' + event.latLng.getLng().toFixed(5) + ']');
  50.                 var marker = new qq.maps.Marker({
  51.                     position: event.latLng,
  52.                     map: map
  53.                 });
  54.                 qq.maps.event.addListener(map, 'click'function (event{
  55.                     marker.setMap(null);
  56.                 });
  57.                 //获取输入框的经纬度
  58.                 var lat = event.latLng.getLat().toFixed(5);
  59.                 var lng = event.latLng.getLng().toFixed(5);
  60.                 latLng = new qq.maps.LatLng(lat, lng);
  61.                 $("#txtlatitude").val(lat);
  62.                 $("#txtlongitude").val(lng);
  63.                
  64.             });
  65.             
  66.  
  67.             //设置Poi检索服务,用于本地检索、周边检索
  68.             searchService = new qq.maps.SearchService({
  69.                 pageCapacity5,
  70.                 paneldocument.getElementById('infoDiv'),
  71.                 map: map,
  72.             });
  73.         }
  74.         //搜索方法
  75.         function getResult({
  76.             //设置searchRequest
  77.             var poiText = document.getElementById("poiText").value;
  78.             var regionText = document.getElementById("regionText").value;
  79.             searchService.setLocation(regionText);
  80.             searchService.search(poiText);
  81.         }
  82.  
  83.         //根据地址定位
  84.         function codeAddress({
  85.             var address = "泉州软件园";
  86.             geocoder.getLocation(address);
  87.             //设置服务请求成功的回调函数
  88.             geocoder.setComplete(function (result{
  89.                 map.setCenter(result.detail.location);
  90.                
  91.         }
  92.  
  93.     </script>


手机端运行导航

HTML部分

  1. <body onload="showMap()">
  2.     <div class="mapBox">
  3.         <div id="mapBox">
  4.             <p id="mapInfo"></p>
  5.         </div>
  6.     </div>
  7.     <div>
  8.         <div class="mapInfo">
  9.             <ul id="J_List"></ul>
  10.         </div>
  11.  
  12.     </div>
  13. </body>
  14. </html>


CSS部分(界面有点丑)


  1.     <style>
  2.         body {
  3.             height100vh;
  4.             background: #fff;
  5.             color: #3D3D3D;
  6.         }
  7.  
  8.             body > div {
  9.                 width100% !important;
  10.             }
  11.  
  12.         .mapBox {
  13.             width100%;
  14.             font-size: 14px;
  15.             height: 50%;
  16.         }
  17.  
  18.             .mapBox > #mapInfo {
  19.                 padding20px;
  20.             }
  21.  
  22.             .mapBox > div {
  23.                 width100%;
  24.                 height: 100%;
  25.             }
  26.  
  27.             .mapBox > p {
  28.                 padding20px;
  29.             }
  30.  
  31.         .mapInfo > p.center {
  32.             text-align: center;
  33.         }
  34.  
  35.         .mapInfo > p {
  36.             line-height: 0.533333rem;
  37.         }
  38.  
  39.     </style>


JS部分


  1.     <script src="@(Request.Url.Scheme)://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
  2.     <script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
  3.     <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
  4.     <script>
  5.         function showMap({
  6.             var map = new qq.maps.Map(document.getElementById("mapBox"), {    //地图部分初始化
  7.                 zoom: 24,               //设置地图缩放级别
  8.                 center: new qq.maps.LatLng(24.968320118.571190),     //设置中心点
  9.                 zoomControl: false,    //不启用缩放控件
  10.                 mapTypeControlOptions: {  //设置控件的地图类型为普通街道地图
  11.                     mapTypeIds: qq.maps.MapTypeId.ROADMAP
  12.                 }
  13.             });
  14.  
  15.             var info = new qq.maps.InfoWindow({ map: map });      //添加提示窗
  16.             $.post("/WX/GetSiteCountList"function (data{
  17.                 var result = $.parseJSON(data);
  18.                 //result中数据 用于显示标记、和标记点击时的提示信息
  19.                 if (result.total > 0) {
  20.                     for (var i = 0; i < result.rows.length; i++) {
  21.                         var row = result.rows[i];
  22.                         if (row.IsShowGIS) {
  23.                             var marker = new qq.maps.Marker({
  24.                                 positionnew qq.maps.LatLng(row.latitude, row.longitude),
  25.                                 map: map
  26.                             });
  27.                             //创建标记
  28.                             //***将必要的数据存入每一个对应的marker对象
  29.                             marker.id = row.ID;
  30.                             marker.name = row.SiteName;
  31.                             marker.locate = row.Address;
  32.                             marker.latitude = row.latitude;
  33.                             marker.longitude = row.longitude;                            
  34.                             document.getElementById("J_List").innerHTML += "<li latitude=" + row.latitude + " longitude=" + row.longitude + " name=\"" + row.SiteName + "\" locate=\"" + row.Address + "\"  sid=" + i + " id=" + row.ID + " ><div><p>" + row.SiteName + "</p><p>" + "<img style=\"width:30px\" src=\"/Content/WeiXinUseJS/Image/wz.png\"/>" + row.Address + "</p></div><a href=\"javascript:void(0);\" syle=\"float:right\" onclick=\"bindShop('" + row.ID + "','" + row.SiteName + "','" + row.Address + "'," + Number(row.latitude) + "," + Number(row.longitude) + ")\"><img style=\"width:25px\" src=\"/Content/WeiXinUseJS/Image/qzl.png\"/>去这里</a></li>\n\t";
  35.                         }
  36.                         
  37.                     };
  38.                     
  39.                 }
  40.             });
  41.         }
  42.         wx.config({
  43.             debugfalse// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  44.             appId: '@Model.AppId'// 必填,公众号的唯一标识
  45.             timestamp: '@Model.Timestamp'// 必填,生成签名的时间戳
  46.             nonceStr: '@Model.NonceStr'// 必填,生成签名的随机串
  47.             signature: '@Model.Signature',// 必填,签名
  48.             jsApiList: [
  49.              'getLocation',
  50.                     'openLocation'
  51.             ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2。详见:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
  52.         });
  53.         wx.error(function (res{
  54.             // console.log(res);
  55.             alert('验证失败');
  56.         });
  57.         function bindShop(id, name, address, latitude, longitude{    //地图标注提示窗上按钮 点击后执行的函数
  58.  
  59.             var zb1 = latitude;
  60.             var zb2 = longitude;
  61.             var dz = address;
  62.             
  63.             ////使用微信内置地图查看位置接口
  64.             wx.openLocation({
  65.                 latitude: latitude, // 纬度,浮点数,范围为90 ~ -90   '24.948280'
  66.                 longitude: longitude, // 经度,浮点数,范围为180 ~ -180。'118.603630'
  67.                 name: name, // 位置名
  68.                 address: address, // 地址详情说明
  69.                 scale: 10// 地图缩放级别,整形值,范围从1~28。默认为最大
  70.  
  71.             });
  72.         }
  73.     </script>


鉴于公司项目  就不放效果图出来了  代码是真的  效果也是真的。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Css弹性盒子,flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

Css图片和文字对齐问题

文字和图片写到一排经常会出现对不齐的问题 这样感觉图片会上来一点没有和文字对齐,如下图 但是如果修改下html结...

GitHub 上传项目

补充简化方法:登录git创建项目--&gt;拉取刚刚创建的项目--&gt;复制需要的代码进去--&gt;上传提交即可先拉取项目在上传代码...

NET Core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

Windows平台分布式架构实践 - 负载均衡

原文地址: https://www.cnblogs.com/atree/p/windows_loadbalancer.html 概述  最近.NET的世界开始闹腾了,微软官方终...

Css实现简单矩形对话框

在前端做项目时,我们可能会遇到写对话框的需求,这次做视频会议页面就遇到了,记录下日后有个参照。//网页部分 &lt;divcla...

CAPS.NET 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

使用OLEDB读取不同版本ExCel的连接字符串设置

使用OleBD读取excel的时候,excel不同的版本,连接字符串的写法也会不一样。///&lt;summary&gt; ///读取excel ///&lt;/su...

vs2017 对 COM 组件的调用返回了错误 HRESULT E_FAIL

vs2017添加引用报错 对 COM 组件的调用返回了错误 HRESULT E_FAIL 1.以管理员身份打开vs2017开发人员命令指示符 2...

分布式服务架构与微服务架构概念的区别与联系

分布式:分散压力。微服务:分散能力。当下理解分布式:不同模块部署在不同服务器上作用:分布式解决网站高并发带来问题集...

分布式-微服务-集群的区别

1.分布式将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区...

NPOI操作exCel 2007/2010版本

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xlsXSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx先...

这样学英语三个月超过你过去学三年

本文作者三年间从四级勉强及格到高级口译笔试210,口试232。找工作面试时给其口试的老外考官听了一分钟就说你的英语不用考...

EasyUI弹窗批量修改Combogrid下拉框的值

JS方法//点击弹出批量修改框 UpdateLot:function(){ varrow=$(&quot;#dg&quot;).datagrid(&quot;getChecked&quot;); if(...

js与Controller中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(&quot;,&quot;); for(vari=0;i&lt;strs.length;i++){ $(&q...

如何修改CSS中存在的element.style内联样式

改腾讯地图的时候调整了下样式,发现样式一直存在问题,修改style里面的值,一点用都没有,html中这个值还找不到是在哪里出...
真正的顺其自然,其实是竭尽所能之后的不强求,而非两手一摊的不作为
排名
19
文章
24
粉丝
11
评论
15
css实现简单矩形对话框
剑轩 : 现在来看一下,这个正好用到
三分钟快速复习MVC知识
瑾语 : 棒 总结的很好
渣渣学安卓之时间选择器和文本框操作
修心 : 666666横线的方式和我想法完全一样
渣渣学安卓之banner图和首页布局
晓见 : 哇哦,小姐姐这个系列文章写得很好哇,期待更多佳作~
渣渣学安卓之登录摸索及页面效果实现
剑轩 : 帅帅帅帅帅!那个背景图是不是有点太大了哦。哈哈相素太高了么,可...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术