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

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

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

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

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

我要实现的业务是:

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

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

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

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

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

HTML部分

  <div class="mapBox">
         <div id="mapBox" style="height:300px">
           <p id="mapInfo"></p>
          </div>
  </div>

引入两个JS

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

JS部分(关键代码)

 <script type="text/javascript">
        jQuery(document).ready(function () {
            VGeneral.init('Site');
            Site.init();
            showMap();
        });
        function showMap() {
            var map = new qq.maps.Map(document.getElementById("mapBox"), {    //地图部分初始化
                zoom: 24,               //设置地图缩放级别
                center: new qq.maps.LatLng(24.968320, 118.571190),     //设置中心点
                zoomControl: true,    //不启用缩放控件
                mapTypeControlOptions: {  //设置控件的地图类型为普通街道地图
                    mapTypeIds: qq.maps.MapTypeId.ROADMAP
                }
            });

            var info = new qq.maps.InfoWindow({ map: map });      //添加提示窗
            $.post("/Site/GetData", function (data) {
                var result = $.parseJSON(data);
                //result中数据 用于显示标记、和标记点击时的提示信息
                if (result.total > 0) {
                    for (var i = 0; i < result.rows.length; i++) {
                        var row = result.rows[i];
                        if (row.IsShowGIS) {
                            var marker = new qq.maps.Marker({
                                position: new qq.maps.LatLng(row.latitude, row.longitude),
                                map: map
                            });
                            //创建标记
                            //***将必要的数据存入每一个对应的marker对象
                            marker.id = row.ID;
                            marker.name = row.Name;
                            marker.locate = row.Address;
                            marker.latitude = row.latitude;
                            marker.longitude = row.longitude;
                            //点击坐标点
                            qq.maps.event.addListener(marker, 'click', function () {
                                $('#dg').datagrid('clearSelections');
                                $('#dg').datagrid('selectRow', $('#dg').datagrid('getRowIndex', this.id));
                            });
                        }

                    };
                }
            });
        }
    </script>

添加搜索坐标点

HTML部分

<div class="row-fluid">
                        <div class="span6 ">
                            <div class="control-group">
                                <label class="control-label">GIS地图</label>
                                <div class="controls">
                                    <label class="checkbox">
                                        <input type="checkbox" id="txtIsShowGIS" checked /> 显示
                                    </label>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="row-fluid">
                        <div class="span6 ">
                            <div class="control-group">
                                <label class="control-label">纬度</label>
                                <div class="controls">
                                    <input type="text" id="txtlatitude" class="easyui-validatebox textbox m-wrap span12" data-options="" />
                                </div>
                            </div>
                        </div>
                        <div class="span6 ">
                            <div class="control-group">
                                <label class="control-label">经度</label>
                                <div class="controls">
                                    <input type="text" id="txtlongitude" class="easyui-validatebox textbox m-wrap span12" data-options="" />
                                </div>
                            </div>
                        </div>
                    </div>
                   <h3 class="form-section">GIS地图</h3>
                    <div class="row-fluid">
                        <div class="span4 ">
                            <div class="control-group">
                                <label class="control-label">省市</label>
                                <div class="controls">
                                    <input type="text" id="regionText" class="easyui-validatebox textbox m-wrap span12" data-options="" value="泉州"/>
                                </div>
                            </div>
                        </div>
                        <div class="span4 ">
                            <div class="control-group">
                                <label class="control-label">地址</label>
                                <div class="controls">
                                    <input type="text" id="poiText" class="easyui-validatebox textbox m-wrap span12" data-options="" />
                                </div>
                            </div>
                        </div>
                        <div class="span4 ">
                            <button type="button" class="btn blue" onclick="getResult()">查 询<i class="m-icon-swapright m-icon-white"></i></button>
                        </div>
                        
                    </div>
                    <div class="row-fluid">
                        <div class="span6 ">
                            <div id="container" style="height:400px"></div>
                        </div>
                        <div class="span6 ">
                            <div id="infoDiv">
                            </div>
                            <div>
                                <span style="display: none" id="city"></span>
                            </div>
                        </div>
                        
                    </div>

JS部分

<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
<script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
    <script type="text/javascript">
        jQuery(document).ready(function ()
        {
            $("#hidid").val('@ViewData["id"]');
            VGeneral.init('SiteEdit');
            Site.initedit();
            
            
        });
        /***************************************网页经纬度*************************************************************/
        var geocoder, searchService = null;
        var map = null;
        var markersArray = [];
        var latLng = null;
        var init = function () {

            var center = new qq.maps.LatLng(39.916527, 116.397128);            
            var city = document.getElementById("city");
            map = new qq.maps.Map(document.getElementById('container'), {
                center: center,
                zoom: 28,
            });
            
            //移除绑定事件
            window.removeEvent = function () {
                qq.maps.event.removeListener(listener);
            };
            //地址和经纬度之间进行转换服务
            geocoder = new qq.maps.Geocoder();
            if ($("#txtlatitude").val() != "" && $("#txtlongitude").val() != "") {
                center = new qq.maps.LatLng($("#txtlatitude").val(), $("#txtlongitude").val());
                map.setCenter(center);
                var marker = new qq.maps.Marker({
                    map: map,
                    position: center
                });
                qq.maps.event.addListener(map, 'click', function (event) {
                    marker.setMap(null);
                });
            }
            else {
                codeAddress();
            }
            //点击显示坐标 ****************************************************************************
            var listener = qq.maps.event.addListener(map, 'click', function (event) {

                //alert('您点击的位置为: [' + event.latLng.getLat().toFixed(5) + ', ' + event.latLng.getLng().toFixed(5) + ']');
                var marker = new qq.maps.Marker({
                    position: event.latLng,
                    map: map
                });
                qq.maps.event.addListener(map, 'click', function (event) {
                    marker.setMap(null);
                });
                //获取输入框的经纬度
                var lat = event.latLng.getLat().toFixed(5);
                var lng = event.latLng.getLng().toFixed(5);
                latLng = new qq.maps.LatLng(lat, lng);
                $("#txtlatitude").val(lat);
                $("#txtlongitude").val(lng);
               
            });
            

            //设置Poi检索服务,用于本地检索、周边检索
            searchService = new qq.maps.SearchService({
                pageCapacity: 5,
                panel: document.getElementById('infoDiv'),
                map: map,
            });
        }
        //搜索方法
        function getResult() {
            //设置searchRequest
            var poiText = document.getElementById("poiText").value;
            var regionText = document.getElementById("regionText").value;
            searchService.setLocation(regionText);
            searchService.search(poiText);
        }

        //根据地址定位
        function codeAddress() {
            var address = "泉州软件园";
            geocoder.getLocation(address);
            //设置服务请求成功的回调函数
            geocoder.setComplete(function (result) {
                map.setCenter(result.detail.location);
               
        }

    </script>

手机端运行导航

HTML部分

<body onload="showMap()">
    <div class="mapBox">
        <div id="mapBox">
            <p id="mapInfo"></p>
        </div>
    </div>
    <div>
        <div class="mapInfo">
            <ul id="J_List"></ul>
        </div>

    </div>
</body>
</html>

CSS部分(界面有点丑)

    <style>
        body {
            height: 100vh;
            background: #fff;
            color: #3D3D3D;
        }

            body > div {
                width: 100% !important;
            }

        .mapBox {
            width: 100%;
            font-size: 14px;
            height: 50%;
        }

            .mapBox > #mapInfo {
                padding: 20px;
            }

            .mapBox > div {
                width: 100%;
                height: 100%;
            }

            .mapBox > p {
                padding: 20px;
            }

        .addShop {
            display: block;
            color: #fff;
            background: #00CC99;
            border: none;
            font-size: 14px;
            width: 50vw;
            margin: 0.4rem 0 0 25vw;
            padding: 0.32rem;
            border-radius: 0.8rem;
        }

        .mapInfo > p.center {
            text-align: center;
        }

        .mapInfo > p {
            line-height: 0.533333rem;
        }

        .mapInfo > button {
            display: block;
            margin: 0.106667rem auto;
            color: #0c9;
            background: #fafafb;
            border: 1px solid #0c9;
            border-radius: 0.133333rem;
            padding: 0.15rem 0.3rem;
        }

        .test {
            font-weight: bold;
            background-color: lightblue;
        }

        #cid > p:first-child {
            font-weight: bold;
            font-size: 16px;
            margin-top: 5px;
            line-height: 25px;
        }
    </style>

JS部分

    <script src="@(Request.Url.Scheme)://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp"></script>
    <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
    <script>
        function showMap() {
            var map = new qq.maps.Map(document.getElementById("mapBox"), {    //地图部分初始化
                zoom: 24,               //设置地图缩放级别
                center: new qq.maps.LatLng(24.968320, 118.571190),     //设置中心点
                zoomControl: false,    //不启用缩放控件
                mapTypeControlOptions: {  //设置控件的地图类型为普通街道地图
                    mapTypeIds: qq.maps.MapTypeId.ROADMAP
                }
            });

            var info = new qq.maps.InfoWindow({ map: map });      //添加提示窗
            $.post("/WX/GetSiteCountList", function (data) {
                var result = $.parseJSON(data);
                //result中数据 用于显示标记、和标记点击时的提示信息
                if (result.total > 0) {
                    for (var i = 0; i < result.rows.length; i++) {
                        var row = result.rows[i];
                        if (row.IsShowGIS) {
                            var marker = new qq.maps.Marker({
                                position: new qq.maps.LatLng(row.latitude, row.longitude),
                                map: map
                            });
                            //创建标记
                            //***将必要的数据存入每一个对应的marker对象
                            marker.id = row.ID;
                            marker.name = row.SiteName;
                            marker.locate = row.Address;
                            marker.latitude = row.latitude;
                            marker.longitude = row.longitude;                            
                            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";
                        }
                        
                    };
                    
                }
            });
        }
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: '@Model.AppId', // 必填,公众号的唯一标识
            timestamp: '@Model.Timestamp', // 必填,生成签名的时间戳
            nonceStr: '@Model.NonceStr', // 必填,生成签名的随机串
            signature: '@Model.Signature',// 必填,签名
            jsApiList: [
             'getLocation',
                    'openLocation'
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2。详见:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
        });
        wx.error(function (res) {
            // console.log(res);
            alert('验证失败');
        });
        function bindShop(id, name, address, latitude, longitude) {    //地图标注提示窗上按钮 点击后执行的函数

            var zb1 = latitude;
            var zb2 = longitude;
            var dz = address;
            
            使用微信内置地图查看位置接口
            wx.openLocation({
                latitude: latitude, // 纬度,浮点数,范围为90 ~ -90   '24.948280'
                longitude: longitude, // 经度,浮点数,范围为180 ~ -180。'118.603630'
                name: name, // 位置名
                address: address, // 地址详情说明
                scale: 10, // 地图缩放级别,整形值,范围从1~28。默认为最大

            });
        }
    </script>

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

程序的后台路径是/mxzadmin/,后台登陆账号和密码均为:mxiaozheng 本程序郑陆伟(www.zhengluwei.net)个人版权所有,不得以任何方式恶意散播,谢谢合作,违者必究。 如有疑问请联系作者QQ:512711380,站长导航QQ交流群:129293051 2.3版本程序演示地址:http://dh.mxiaozheng.cn/ 【V2.3】更新日志 更新于2013-7-27 1、增加百度联盟等联盟广告位,优化了首页的UI部分; 2、通过配置文件可以修改静态页面的生成路径,实现自定义路径功能,操作更加方面; 3、修复了部分虚拟主机点击后台登录按钮无反应的Bug; 4、修复了部分浏览器点击后台登录按钮无反应的Bug; 5、搜索框全面改版,只保留百度搜索。优化了用户体验,简化了操作。 【V2.1 】更新说明 1、修复了后台密码长度和管理员账号长度的相关错误; 2、在后台增加了用户可以自行修改设置弹窗信息的功能; 3、修复了数据库输入字符串不能为空的错误(其实这个错误是可以通过设置清空数据库实现的); 4、强化了SQL注入的防护。 关于本程序的环境配置和基本开发信息: .Net 2.0+Access数据库,MSSQL版本可以定制开发; 简单的采用了三层结构开发;全静态页面,有利于网站优化; 后台管理更加强大和方面,可以随意更换主站网址。 如果是虚拟空间使用本程序,请务必保证空间支持.net 2.0或以上版本,以免程序不能正常使用。 浏览器兼容:IE6-9,Firefox,Chrome内核的所有浏览器,Opera浏览器 技术特点:采用ASP.NET简单的三层架构开发,全站前台实现纯静态页面,利于网站整体优化。 功能描述:本代码是一个站长网址导航搜索功能,用户可以在后台任意添加自己需要的链接。 注意事项:如果是虚拟空间使用本程序,请务必保证空间支持.net,以免程序不能正常使用。 另外,内置有标准的robots.txt文件,如果不明白,请勿随意修改,以免影响贵站的百度收录和排名。
程序演示http://www.weiduomei.net/ 1.申请加入免收录网站友情链接网的网站按最后点进的时间排序首页和分类显示链接, 分类以昨日点入时间为准,每晚十二点后生成静态。 2.每来访一个IP,就会自动排到第一(刷新一下),当天来路不同次数,显示颜色也不同:有1次即显示,10次即套蓝色,30次即套红色加粗 3.首页白天3分钟,晚上5分钟自动更新一次,全站24小时手动更新一次。 4.站内搜索功能。 5.网址库中分离出的【名站导航】【实用工具】【友情链接】 系统后台功能 程序演示http://www.weiduomei.net/ 1.设置网站的基本信息。 2.管理员帐号/密码更改。 3.添加删除分类。 4.分类可修改可设置首页是否显示。 5.酷站可设置首页是否显示。 6.添加删除修改网址内容,是否推荐,是否审核。 7.可从网址库中分离出【名站导航】【实用工具】【友情链接】 8.【名站导航】【实用工具】可由快速通道添加。 9.【友情链接】从网址列表中设置。 10.站内搜索功能。 11.生成htm分类页面,生成htm主页及其它页面。 12.可修改主页,分类及其它页面模板。 13.具有数据库【备份】【压缩】【恢复】功能。 14.后台广告位标注 安装使用方法 1.在支持ASP的服务器上解开本软件包。 2.数据库文件在data目录,已经做了防下载处理。 3.后台登录地址在admin/index.asp,默认管理员账号:admin,密码:admin。 4.进入后台根据提示设置你网站的基本信息。 5.生成全站及分类一次。 6.为了安全起见,请在后台将管理员帐号和密码全部修改成你自己的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值