网站地图    收藏   

主页 > 后端 > 微信开发 >

.net mvc 微信开发笔记(八)------微信公共账号加入百

来源:自学PHP网    时间:2015-04-14 12:58 作者: 阅读:

[导读] 在做微信开发的时候,很多客户要求加入地图的应用,自带的tx地图实在是鸡肋,谷歌又在Q外,所以研究了下百度地图。 准备工作:百度地图api的key(点我申请) 做微信的百度地图开...

在做微信开发的时候,很多客户要求加入地图的应用,自带的tx地图实在是鸡肋,谷歌又在Q外,所以研究了下百度地图。

准备工作:百度地图api的key(点我申请)

做微信的百度地图开发,大致有两个方向:

1、从微信获取数据后,访问百度api,返回给客户解析后的信息。

2、从微信跳转到封装好的百度地图的web界面

分析

第一种主要调用的是 百度地图http服务接口,也就是和微信接口差不多,我们给他接口发送数据,他会返回给我们相应的信息(xml/json)。举个例子:用户给公共账号发送:我在哪? 后台调用api后直接返回:你在xx省xx市xx县城

第二种主要调用的是 百度地图web开发接口,这个是一堆javascript代码,我们根据实际需求分拆组装js,来组成我们自己的web页面。举个例子:用户给公共账号发送:我怎么去你们公司? 这时候我们给用户回复一个链接,用户点击进去之后,会自动出现地图,并在上边显示路线。

这两种各有不同,第一种方法更加灵活,但是相应的开发成本也更高。第二种方式简单,但是相对来说受到地图自己本身限制。

但是实际上第二种已经能满足大部分客户需求了,所以下边我们主要讲解第二种。

用户获取到xx地点路线为例子

首先,设想一下,我们有一个地区很多城市的犯罪数据,另外有一张地图。如果我们把两者结合起来,是不是就能组装成一张显示该地区犯罪率分布的地图了?

这就是传说中WebService的思想,其实微信/百度lbs/黄鸡都算是WebService的一种。

扯远了,但是百度地图开发也是基于此原理,我们新建一个百度地图应用,是空的。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的key"></script>
    <title>百度地图的Hello, World</title>
    <style type="text/css">
      body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
    </style>
</head>
<body>
    <div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
    /** 百度地图API功能 **/
    var map = new BMap.Map("allmap");            // 创建Map实例
    var point = new BMap.Point(116.404, 39.915); // 创建点坐标
    map.centerAndZoom(point,15);                 // 初始化地图,设置中心点坐标和地图级别。
    map.enableScrollWheelZoom();                 //启用滚轮放大缩小
</script>

这是一张空地图,我们需要做的就是在地图上添加更多的功能来满足我们的需求。

再让我们设想一下,获取用户当前到xx地的路线,大致有如下步骤。

1.先给地图设置一个点,让地图初始化。

2.获取并设置目的地的经纬度(固定值)

3.获取用户当前的经纬度(请求定位)

4.获取两点之间的路线

5.显示出来。

OK,我们现在很清楚了,需要给地图添加如下功能(参照api)

api名称:

a.用城市名字设置地图中心

b.添加鼠标缩放

c.设置目的地坐标

d.浏览器定位

e.根据其实点经纬度导航。

加入后代码大致如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html, #allmap {
            width: 100%;
            height: 100%;
            overflow: hidden;
            margin: 0;
        }

        #allmap {
            height: 68%;
            width: 100%;
            float: left;
            border-bottom: 2px solid #bcbcbc;
        }

        #r-result {
            height: 30%;
            width: 100%;
            float: left;
            font-size: small;
        }
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
    <title>浏览器</title>
</head>
<body>
    <div id="allmap"></div>
    <div id="r-result"></div>
</body>
</html>
<script type="text/javascript">

    // 设置地图中心海口
    var map = new BMap.Map("allmap");
    map.centerAndZoom("海口", 15);
    map.enableScrollWheelZoom();
    var p1;
    var p2 = new BMap.Point(110.321228, 19.91994);

    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function (r) {
        if (this.getStatus() == BMAP_STATUS_SUCCESS) {
            var mk = new BMap.Marker(r.point);
            //  map.addOverlay(mk);
            //   map.panTo(r.point);

            //    alert('您的位置' + r.point.lng + ',' + r.point.lat);
            p1 = new BMap.Point(r.point.lng, r.point.lat);
            var output = "路程约为";
            var searchComplete = function (results) {
                if (transit.getStatus() != BMAP_STATUS_SUCCESS) {
                    return;
                }

                var plan = results.getPlan(0);

                output += plan.getDistance(true) + "\n";

                output += "耗时";
                output += plan.getDuration(true) + "\n";

                //  document.getElementById("r-result").innerHTML = output + "<br/>";
                var route = plan.getRoute(0);

                // 最优路线
                var s = [];
                for (var i = 0; i < route.getNumSteps() ; i++) {
                    var step = route.getStep(i);
                    s.push((i + 1) + ". " + step.getDescription());
                    output += step.getDescription();
                }

                document.getElementById("r-result").innerHTML += s.join("<br/>");


            }
            var transit = new BMap.DrivingRoute(map, {
                renderOptions: { map: map },
                onSearchComplete: searchComplete,
                onPolylinesSet: function () {
                    // setTimeout(function(){alert(output)},"1000");
                }
            });
            transit.search(p1, "海口观澜湖旅游度假区");

        }
        else {
            alert('failed' + this.getStatus());
        }
    }, { enableHighAccuracy: true })




</script>

这就是驾车路线,还有一个公交路线,大致如下

@{
    Layout = null;
}
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html, #allmap {
            width: 100%;
            height: 100%;
            overflow: hidden;
            margin: 0;
        }

        #l-map {
            height: 50%;
            width: 100%;
        }

        #r-result {
            height: 50%;
            width: 100%;
            overflow-y: scroll;
        }

            #r-result table {
                width: 100%;
            }
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的key"></script>
    <title>展示公交换乘的结果面板</title>
</head>
<body>
    <div id="l-map"></div>
    <div id="r-result"></div>
</body>
</html>
<script type="text/javascript">

    // 百度地图API功能
    var map = new BMap.Map("l-map");            // 创建Map实例
    map.centerAndZoom("海口", 15);
    map.enableScrollWheelZoom();
    var p1;
    var p2 = new BMap.Point(110.321228, 19.91994);

    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function (r) {
        if (this.getStatus() == BMAP_STATUS_SUCCESS) {
            var mk = new BMap.Marker(r.point);
            //  map.addOverlay(mk);
            //   map.panTo(r.point);

            //    alert('您的位置' + r.point.lng + ',' + r.point.lat);
            p1 = new BMap.Point(r.point.lng, r.point.lat);
          
            var searchComplete = function (results) {
                if (transit.getStatus() != BMAP_STATUS_SUCCESS) {
                    return;
                }


            }
            var transit = new BMap.TransitRoute(map, {
                renderOptions: { map: map, panel: "r-result" }
            });
            transit.search(p1, "海口观澜湖旅游度假区");

        }
        else {
            alert('failed' + this.getStatus());
        }
    }, { enableHighAccuracy: true })
   
</script>



自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论