精华内容
下载资源
问答
  • 腾讯地图接口,根据关键字搜索附近地址
    2021-04-26 19:33:22

    特点:可分页,可配合前端实现搜索地址联想功能

    代码:

    /**  * @param string $region 限制城市范围:如,仅获取“广州市”范围内的提示内容  * @param string $keyword 用户输入的关键词(希望获取后续提示的关键词)  * @param string $lng 定位坐标 中心点 经度  * @param string $lat 定位坐标 中心点 纬度  * @param int $page_index 分页 当前页  * @param int $page_size 分页 每页数量  * @return mixed  */ function searchAddress($region,$keyword,$lng,$lat,$page_index=1,$page_size=10){     $key = '';//腾讯地图 key     $url = 'https://apis.map.qq.com/ws/place/v1/suggestion/?region='.$region.'&keyword='.$keyword.'&key='.$key.'&page_index='.$page_index.'&page_size='.$page_size.'&location='.$lat.','.$lng;         $result = file_get_contents($url);     $array = json_decode($result, true);     return $array; }复制代码

    更多相关内容
  • 地图应用非常广泛,目前地图服务,都提供地图操作、标注、地点搜索、出行规划、地址解析、街景等接口,功能非常丰富。在实际开发过程中,各有优劣。本次基于需求,使用腾讯位置服务作为一个公用厕所位置标注的H5页面...

    前言

    地图应用非常广泛,目前地图服务,都提供地图操作、标注、地点搜索、出行规划、地址解析、街景等接口,功能非常丰富。在实际开发过程中,各有优劣。本次基于需求,使用腾讯位置服务作为一个公用厕所位置标注的H5页面开发。

    本次使用版本: JavaScript API 2.0版本

    项目需求

    1、项目需求

    基于腾讯位置服务,实现微信扫描二维码后,在微信浏览器内,展示某县城的公用厕所分布图,按照用户当前定位与各个厕所之间的距离远近排序,点击标注点跳转到腾讯地图进行导航。

    image.png

    2、需求分解

    基于上述需求,对使用到的腾讯位置服务接口予以分解如下:

    腾讯地图加载;
    自动定位;
    信息点(POINTS)标注maker;
    计算标注点之间的距离;
    导航跳转链接API接口;
    街道与卫星地图切换控件;
    缩放控件;
    

    开发实战

    1、引入功能库和附件库

        <script charset="utf-8"
                src="https://map.qq.com/api/js?v=2.exp&libraries=drawing,geometry,autocomplete,convertor&key={$appkey}"></script>
        <script type="text/javascript"
                src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
    

    2、构建腾讯地图容器

    <!--地图加载-->
    <div id="location" onclick="getLocation();"><img src="{$url}{$STATIC}images/location.png" alt=""></div>
    <div id="txmap"></div>
    

    3、调用前端定位组件

    由于项目需要多次调用地图和定位,为此,在script脚本中map和geolocation都设置为全局函数。

      var map;//全局函数
      var geolocation = new qq.maps.Geolocation(appkey, "{$referer}");
      var options = {timeout: 8000};
    
     function getLocation() {
            geolocation.getLocation(showPosition, showErr, options);
        }
    

    getLocation(sucCallback, errCallback, [options: {timeout: number, failTipFlag: boolean}])方法

    获取当前所在地理位置,调用一次即重新定位一次,定位数据比较精确。
    sucCallback为定位成功回调函数,必填;
    errCallback为定位失败回调函数,选填,如果不填,请设为null;
    options为定位选项,选填,可以通过timeout参数设置定位的超时时间,默认值为10s;
    failTipFlag: 是否在定位失败时给出提示引导用户打开授权或打开定位开关。(即将支持)
    

    1)定位成功回调函数

    function showPosition(position) {
    }
    

    获取位置坐标显示地图

            map = new qq.maps.Map(document.getElementById("txmap"), {
                // 地图的中心地理坐标。
                center: new qq.maps.LatLng(position.lat, position.lng),
                zoom: 15
            });
    

    定义当前位置maker样式图片

            var imgUrl = "static/rooted/images/icon.png";
            var anchor = new qq.maps.Point(6, 6),
                    size = new qq.maps.Size(45, 46),
                    origin = new qq.maps.Point(0, 0),
                    icon = new qq.maps.MarkerImage(imgUrl, size, origin, anchor);
    
            var marker2 = new qq.maps.Marker({
                icon: icon,
                map: map,
                position: new qq.maps.LatLng(position.lat, position.lng)
            });
    

    读取信息点(POINTS)并在地图上标注

    1、标准JSON数据格式

    为方便展示,此处仅展示数据格式,实际应用做,使用ajax获取即可。

    [
        {
            "toilet_id": "9",
            "toilet_name": "智慧广场",
            "toilet_address": "西溪路 智慧中心南",
            "toilet_url": "upload/preview/2020-11/15784affe0de0d45c5f33625851527e9.jpg",
            "toilet_lon": "115.965248",
            "toilet_lat": "35.597050"
        },
        {
            "toilet_id": "14",
            "toilet_name": "唐塔公厕",
            "toilet_address": "东门街北段唐塔广场",
            "toilet_url": "upload/preview/2020-11/8e5bda8c5b12f87ebad80c247d8f2b26.jpg",
            "toilet_lon": "115.946365",
            "toilet_lat": "35.602218"
        }
    ]
    

    2、地图标注并计算距离

       //地图标注;
                    getTxMap(newData, latlngs);
                    //两点间的距离;
                    getDistance(newData, latlngs);
    

    经纬度标注封装函数

            function getTxMap(newData, latlngs) {
                for (var i = 0; i < newData.length; i++) {
                    (function (n) {
                        var marker = new qq.maps.Marker({
                            position: latlngs[n],
                            map: map
                        });
    
                        qq.maps.event.addListener(marker, 'click', function () {
                            var popHtml = '<div class="pop">到这里: <a href="https://apis.map.qq.com/uri/v1/routeplan?type=walk&from=起步位置&fromcoord=' + position.lat + ',' + position.lng + '&to=' + newData[n].toilet_name + '&tocoord=' + newData[n].toilet_lat + ',' + newData[n].toilet_lon + '&policy=0&referer={$referer}">' + newData[n].toilet_name + '</a></div>';
                            infoWin.open();
                            infoWin.setContent(popHtml);
                            infoWin.setPosition(latlngs[n]);
                        });
                    })(i);
                }
            }
    

    计算两点间的距离函数封装

            function getDistance(newData, latlngs) {
                var newArr = [];
                var start = new qq.maps.LatLng(position.lat, position.lng);
                for (var i = 0; i < latlngs.length; i++) {
                    var end = latlngs[i];
                    var distance = Math.round(qq.maps.geometry.spherical.computeDistanceBetween(start, end) * 10) / 10;
                    //拼接新的距离数组数据;
                    newArr.push({
                        toilet_id: newData[i].toilet_id,
                        toilet_name: newData[i].toilet_name,
                        toilet_address: newData[i].toilet_address,
                        toilet_url: newData[i].toilet_url,
                        toilet_lon: newData[i].toilet_lon,
                        toilet_lat: newData[i].toilet_lat,
                        distance: distance
                    })
                }
                //升序排列;
                function compare(key) {
                    return function (value1, value2) {
                        var val1 = value1[key];
                        var val2 = value2[key];
                        return val1 - val2;
                    }
                }
                newArr.sort(compare('distance'));
                console.log(newArr);
    

    2、定位失败回调函数

        //定位失败,自动跳转页面;
        function showErr() {
            //alert("定位失败!");
            window.location.href = "?m=Index&a=error"
        }
    

    坐标经纬度拾取

    1、腾讯坐标拾取器

    项目开发过程中,需要自己拾取坐标经纬度,以满足初始数据的测试和演示使用。一般会使用腾讯提供的坐标拾取器。链接地址:https://lbs.qq.com/tool/getpoint/index.html。

    支持地址 精确/模糊 查询;
    支持POI点坐标显示;
    坐标鼠标跟随显示;
    

    如果非要挑出点毛病的话,地图拾取框太小了,想随心所欲的拾取坐标,要缩放或拖拽很多次,心累。

    2、WebService API地址解析(地址转坐标)

    在项目完成测试后,如果遇到成千上百的地址时,一个一个的拾取,好像不是一个合格的开发者的所为。此时,就需要使用到地址解析和逆解析的API接口,即:在数据导入到数据库的过程中,自动批量地将地址转化为经纬度坐标,满足前端的调用。

    本例中使用了腾讯位置服务的WebService API,后端语言使用PHP,简要的将该过程予以呈现。

    1、封装WebService API接口函数

    官方实例,如果在前端直接使用getJSON函数,会出现“同源策略”被阻止,为此需要后端爬取后,“曲线救国”。

    //GET请求示例,注意参数值要进行URL编码
    https://apis.map.qq.com/ws/geocoder/v1/?address=北京市海淀区彩和坊路海淀西大街74号&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
    
    /*地址转坐标封装函数,文件名称为points.php
    *$address,需要转化的地址,越详细经纬度精度越高;
     */
    function getGeoCoding($address)
    {
        $url = "https://apis.map.qq.com/ws/geocoder/v1/?address=" . $address . "&key={$key}";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    //获取前端传入的地址参数;
    $address = $_GET["address"];
    //输出json数据格式,供前端调用;
    die(getGeoCoding($address));
    

    2、前端调用

        //自動獲取經緯度;
        var getAddress = function transAddress() {
            var address = $("#address").val();
            getPoints(address);
        }
    
        //前端页面输出;
        function getPoints(address) {
            $.getJSON("points.php", {address: address}, function (res) {
                if (res.status == 0) {
                    $("#lng").val(res.result.location.lng);
                    $("#lat").val(res.result.location.lat);
                } else {
                    $("#message").html(res.message);
                }
            });
        }
    

    3、效果演示

    在导入地址数据的时候,一定要是省市区街道门牌号,地址越详细精度越高,否则会解析不出来,谨记!

    注意事项

    1、script标签加载API服务

    <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script>
    

    在开发过程中,默认会这样引入到前端文件。测试环境和生成环境一致,或者更换环境也是一直,不会出现问题的。但是如果是http和https不一致的协议环境下,引入文件就会出现错误提示。

    建议的加载方式:src不使用协议名称,让其自动匹配。如:

    <script charset="utf-8" src="//map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script>
    

    2、附加库的引入

    学习一个新项目的最快捷方式是学会使用官方文档,因为这些文档是基础中的基础。但官方文档的有时太官方,有些细节无法清楚的展示出来。

    官方文档不能解决的问题时,会“面对CSDN编程”,每个开发者遇到的问题不同,开发经验不同,在CSDN上的记录更多的是为了避免自己下次“入坑”提醒,无法完整的将项目的细节描述清楚,也是初学者看到人家明明解决了,为什么自己不可以的。

    这里就牵涉到腾讯地图附加库的引入。

        <script charset="utf-8"
                src="://map.qq.com/api/js?v=2.exp&libraries=drawing,geometry,autocomplete,convertor&key={$appkey}"></script>
    

    本项目中就遇见需要计算自动定位的经纬度和各个厕所之间的距离,需要使用geometry几何运算库。在未理解官方文档的前提下,强行CSDN,走路很多弯路才发现:开发语法明明对了,但是却没有计算出距离,就是没引入对应的附加库。

    3、自动定位组件库

       <script type="text/javascript"
                src="//3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
    

    使用自动定位功能,必须引入自动定位的geolocation.min.js附加库,无须多言。

    4、经纬度位置

    如果是首次开发地图就使用腾讯地图的话,出现这个错误的可能性比较低。如果有百度和高德地图开发的经验话,千万不要想当然。在这个问题上浪费了半个小时才发现,腾讯的经纬度和百度、高德的问题是互换的。

    腾讯经纬度

    new qq.maps.LatLng(39.914850, 116.403765); //构建对象的是(纬度,经度)
    

    百度经纬度

    map.centerAndZoom(new BMap.Point(116.4035,39.915),8); //构建对象的是(经度,纬度)
    

    高德经纬度

    position: new AMap.LngLat(116.39, 39.9),//构建点对象的是(经度,纬度)
    

    在使用坐标拾取器时,一定要选择各个对应的工具,导航等牵涉到坐标的地方一定要注意。

    5、腾讯、百度和高德地图开发比较

    对于不同的厂家地图的使用,一般都有“先入为主” 的刻板印象,也有甲方原因的客观要求。

    对比项腾讯地图百度地图高德地图
    功能标注、信息框、覆盖物、计算距离、轨迹、导航等常用功能同前同前
    坐标火星坐标BD-09坐标火星坐标
    坐标结构(39.914850, 116.403765)(116.4035,39.915)(116.39, 39.9)
    语法结构同高德百度自有语法同腾讯
    开发文档相对集中百度地图开发平台已升级到3.0版本,文档多,类库多相对集中
    延伸数据可视化API服务同前同前

    总结

    本次使用版本: JavaScript API 2.0版本,目前我们提供的JavaScript API GL版本,功能更炫酷齐全,大家可以尝试接入使用。

    作者:漏刻有时

    链接:https://lockdatav.blog.csdn.net/article/details/113412823

    来源:CSDN

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 本文地图用的是腾讯地图,对比了下其他地图发现腾讯地图功能比较全面,果然是自己的(起初用的其他地图,发送poi搜索返回信息不满足需求,可自行尝试,在此推荐使用腾讯地图http://lbs.qq.com/javascript_v2/doc/) ...

    这里写图片描述

    本文地图用的是腾讯地图,对比了下其他地图发现腾讯地图功能比较全面,果然是自己的(起初用的其他地图,发送poi搜索返回信息不满足需求,可自行尝试,在此推荐使用腾讯地图http://lbs.qq.com/javascript_v2/doc/)

    https://mp.weixin.qq.com/debug/wxadoc/dev/api/location.html#wxgetlocationobject
    在微信API中可以看到获取位置的方法(推荐大家习惯学会查看API)

    这里还包含了界面布局,界面跳转,数据赋值,正则判断等操作,欢迎留言讨论

    具体效果可以去下载查看
    Demo地址: http://download.csdn.net/my
    gitHub地址: https://github.com/Raymon-lau/wxLocation

    展开全文
  • 例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地图和定位功能已经大量引入到应用开发中。今天就和...
  • 本文主要讲解如何通过百度地图API搜索得到一个城市里的所有POI。这里有必要对“所有”这个词进行强调一下,以便引起重视,之所以这样说,是因为在搜索POI时,默认仅返回一页的搜索结果10条,那么如何才能得到所有的...
    本文主要讲解如何通过百度地图API搜索得到一个城市里的所有POI。这里有必要对“所有”这个词进行强调一下,以便引起重视,之所以这样说,是因为在搜索POI时,默认仅返回一页的搜索结果10条,那么如何才能得到所有的搜索结果呢?其实baidu map api是提供了相关的方法,但我发现有相当多的网友都在问这个问题,所以有必要讲解演示一下。
    先讲一下什么称之为“城市POI搜索”?它与我们在上一篇文章([011] 百度地图API之POI搜索-发现你身边的兴趣点,如超市、餐厅、ATM...(Android))中了解到的POI搜索有什么区别呢?
    上一篇文章中所调用的是地图API的“周边POI搜索”服务,即检索周围多少米以内的POI;而本章所要调用的是地图API的“城市POI搜索”服务,即检索某个城市中所有的POI。如果你看完这两篇文章后,你会发现仅仅是调用的方法不同而以,搜索结果的处理方法是同一个方法,搜索结果的处理代码也是完全一样的。
    下面将给出城市POI搜索的一个完整示例,并且会讲解如何才能获取到所有的搜索结果。
    1)布局文件res/layout/poi_city_search.xml
    view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <com.baidu.mapapi.MapView android:id="@+id/map_View"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    />
    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/map_View"
    android:layout_alignLeft="@id/map_View"
    android:layout_alignRight="@id/map_View"
    android:background="@null"
    android:padding="0dip"
    >
    <EditText android:id="@+id/keyword_edittext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="20" />
    <Button android:id="@+id/query_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="1"
    android:text="搜索" />
    </LinearLayout>
    </RelativeLayout>
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <com.baidu.mapapi.MapView android:id="@+id/map_View"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    />
    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/map_View"
    android:layout_alignLeft="@id/map_View"
    android:layout_alignRight="@id/map_View"
    android:background="@null"
    android:padding="0dip"
    >
    <EditText android:id="@+id/keyword_edittext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="20" />
    <Button android:id="@+id/query_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="1"
    android:text="搜索" />
    </LinearLayout>
    </RelativeLayout>
    2)继承了com.baidu.mapapi.MapActivity的Activity类
    view plaincopy to clipboardprint?package com.liufeng.baidumap;

    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;

    import com.baidu.mapapi.BMapManager;
    import com.baidu.mapapi.MKAddrInfo;
    import com.baidu.mapapi.MKDrivingRouteResult;
    import com.baidu.mapapi.MKPoiInfo;
    import com.baidu.mapapi.MKPoiResult;
    import com.baidu.mapapi.MKSearch;
    import com.baidu.mapapi.MKSearchListener;
    import com.baidu.mapapi.MKTransitRouteResult;
    import com.baidu.mapapi.MKWalkingRouteResult;
    import com.baidu.mapapi.MapActivity;
    import com.baidu.mapapi.MapController;
    import com.baidu.mapapi.MapView;
    import com.baidu.mapapi.PoiOverlay;

    public class PoiSearchInCityActivity extends MapActivity {
    // 定义地图引擎管理类
    private BMapManager mapManager;
    // 定义搜索服务类
    private MKSearch mMKSearch;

    private MapView mapView;
    private MapController mapController;
    private EditText keyWordEditText;
    private Button queryButton;
    private static StringBuilder sb;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.poi_city_search);

    // 初始化MapActivity
    mapManager = new BMapManager(getApplication());
    // init方法的第一个参数需填入申请的API Key
    mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
    super.initMapActivity(mapManager);

    mapView = (MapView) findViewById(R.id.map_View);
    // 设置地图模式为交通地图
    mapView.setTraffic(true);
    // 设置启用内置的缩放控件
    mapView.setBuiltInZoomControls(true);

    // 取得地图控制器对象,用于控制MapView
    mapController = mapView.getController();
    // 设置地图默认的缩放级别
    mapController.setZoom(10);

    // 设置每页返回的POI数,默认为10,取值范围1-50
    MKSearch.setPoiPageCapacity(10);
    // 初始化MKSearch
    mMKSearch = new MKSearch();
    mMKSearch.init(mapManager, new MySearchListener());

    keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
    queryButton = (Button) findViewById(R.id.query_button);
    queryButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    //每次搜索前先前sb中的内容清空
    sb = new StringBuilder();

    String keyWord = keyWordEditText.getText().toString().trim();
    // 搜索贵阳地区的沃尔玛
    mMKSearch.poiSearchInCity("贵阳", keyWord);
    }
    });
    }

    @Override
    protected boolean isRouteDisplayed() {
    return false;
    }

    @Override
    protected void onDestroy() {
    if (mapManager != null) {
    // 程序退出前需调用此方法
    mapManager.destroy();
    mapManager = null;
    }
    super.onDestroy();
    }

    @Override
    protected void onPause() {
    if (mapManager != null) {
    // 终止百度地图API
    mapManager.stop();
    }
    super.onPause();
    }

    @Override
    protected void onResume() {
    if (mapManager != null) {
    // 开启百度地图API
    mapManager.start();
    }
    super.onResume();
    }

    /**
    * 实现MKSearchListener接口,用于实现异步搜索服务
    *
    * @author liufeng
    */
    public class MySearchListener implements MKSearchListener {
    /**
    * 根据经纬度搜索地址信息结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetAddrResult(MKAddrInfo result, int iError) {
    }

    /**
    * 驾车路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
    }

    /**
    * POI搜索结果(范围检索、城市POI检索、周边检索)
    *
    * @param result 搜索结果
    * @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetPoiResult(MKPoiResult result, int type, int iError) {
    if (result == null) {
    return;
    }
    // 清除地图上已有的所有覆盖物
    mapView.getOverlays().clear();
    // PoiOverlay是baidu map api提供的用于显示POI的Overlay
    PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
    // 设置搜索到的POI数据
    poioverlay.setData(result.getAllPoi());
    // 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
    mapView.getOverlays().add(poioverlay);

    if(result.getNumPois() > 0) {
    // 设置其中一个搜索结果所在地理坐标为地图的中心
    MKPoiInfo poiInfo = result.getPoi(0);
    mapController.setCenter(poiInfo.pt);
    }

    sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
    // 遍历当前页返回的POI(默认只返回10个)
    for (MKPoiInfo poiInfo : result.getAllPoi()) {
    sb.append("名称:").append(poiInfo.name).append("/n");
    //sb.append("地址:").append(poiInfo.address).append("/n");
    //sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
    //sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
    }

    // 通过AlertDialog显示当前页搜索到的POI
    new AlertDialog.Builder(PoiSearchInCityActivity.this)
    .setTitle("搜索到的POI信息")
    .setMessage(sb.toString())
    .setPositiveButton("关闭", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    dialog.dismiss();
    }
    }).create().show();
    }

    /**
    * 公交换乘路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
    }

    /**
    * 步行路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
    }
    }
    }
    package com.liufeng.baidumap;

    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;

    import com.baidu.mapapi.BMapManager;
    import com.baidu.mapapi.MKAddrInfo;
    import com.baidu.mapapi.MKDrivingRouteResult;
    import com.baidu.mapapi.MKPoiInfo;
    import com.baidu.mapapi.MKPoiResult;
    import com.baidu.mapapi.MKSearch;
    import com.baidu.mapapi.MKSearchListener;
    import com.baidu.mapapi.MKTransitRouteResult;
    import com.baidu.mapapi.MKWalkingRouteResult;
    import com.baidu.mapapi.MapActivity;
    import com.baidu.mapapi.MapController;
    import com.baidu.mapapi.MapView;
    import com.baidu.mapapi.PoiOverlay;

    public class PoiSearchInCityActivity extends MapActivity {
    // 定义地图引擎管理类
    private BMapManager mapManager;
    // 定义搜索服务类
    private MKSearch mMKSearch;

    private MapView mapView;
    private MapController mapController;
    private EditText keyWordEditText;
    private Button queryButton;
    private static StringBuilder sb;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.poi_city_search);

    // 初始化MapActivity
    mapManager = new BMapManager(getApplication());
    // init方法的第一个参数需填入申请的API Key
    mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
    super.initMapActivity(mapManager);

    mapView = (MapView) findViewById(R.id.map_View);
    // 设置地图模式为交通地图
    mapView.setTraffic(true);
    // 设置启用内置的缩放控件
    mapView.setBuiltInZoomControls(true);

    // 取得地图控制器对象,用于控制MapView
    mapController = mapView.getController();
    // 设置地图默认的缩放级别
    mapController.setZoom(10);

    // 设置每页返回的POI数,默认为10,取值范围1-50
    MKSearch.setPoiPageCapacity(10);
    // 初始化MKSearch
    mMKSearch = new MKSearch();
    mMKSearch.init(mapManager, new MySearchListener());

    keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
    queryButton = (Button) findViewById(R.id.query_button);
    queryButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    //每次搜索前先前sb中的内容清空
    sb = new StringBuilder();

    String keyWord = keyWordEditText.getText().toString().trim();
    // 搜索贵阳地区的沃尔玛
    mMKSearch.poiSearchInCity("贵阳", keyWord);
    }
    });
    }

    @Override
    protected boolean isRouteDisplayed() {
    return false;
    }

    @Override
    protected void onDestroy() {
    if (mapManager != null) {
    // 程序退出前需调用此方法
    mapManager.destroy();
    mapManager = null;
    }
    super.onDestroy();
    }

    @Override
    protected void onPause() {
    if (mapManager != null) {
    // 终止百度地图API
    mapManager.stop();
    }
    super.onPause();
    }

    @Override
    protected void onResume() {
    if (mapManager != null) {
    // 开启百度地图API
    mapManager.start();
    }
    super.onResume();
    }

    /**
    * 实现MKSearchListener接口,用于实现异步搜索服务
    *
    * @author liufeng
    */
    public class MySearchListener implements MKSearchListener {
    /**
    * 根据经纬度搜索地址信息结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetAddrResult(MKAddrInfo result, int iError) {
    }

    /**
    * 驾车路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
    }

    /**
    * POI搜索结果(范围检索、城市POI检索、周边检索)
    *
    * @param result 搜索结果
    * @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetPoiResult(MKPoiResult result, int type, int iError) {
    if (result == null) {
    return;
    }
    // 清除地图上已有的所有覆盖物
    mapView.getOverlays().clear();
    // PoiOverlay是baidu map api提供的用于显示POI的Overlay
    PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
    // 设置搜索到的POI数据
    poioverlay.setData(result.getAllPoi());
    // 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
    mapView.getOverlays().add(poioverlay);

    if(result.getNumPois() > 0) {
    // 设置其中一个搜索结果所在地理坐标为地图的中心
    MKPoiInfo poiInfo = result.getPoi(0);
    mapController.setCenter(poiInfo.pt);
    }

    sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
    // 遍历当前页返回的POI(默认只返回10个)
    for (MKPoiInfo poiInfo : result.getAllPoi()) {
    sb.append("名称:").append(poiInfo.name).append("/n");
    //sb.append("地址:").append(poiInfo.address).append("/n");
    //sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
    //sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
    }

    // 通过AlertDialog显示当前页搜索到的POI
    new AlertDialog.Builder(PoiSearchInCityActivity.this)
    .setTitle("搜索到的POI信息")
    .setMessage(sb.toString())
    .setPositiveButton("关闭", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    dialog.dismiss();
    }
    }).create().show();
    }

    /**
    * 公交换乘路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
    }

    /**
    * 步行路线搜索结果
    *
    * @param result 搜索结果
    * @param iError 错误号(0表示正确返回)
    */
    @Override
    public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
    }
    }
    }
    3)AndroidManifest.xml中的配置
    view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.liufeng.baidumap"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>
    <uses-sdk android:minSdkVersion="4" />

    <!-- 访问网络的权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 访问精确位置的权限 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 访问网络状态的权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 访问WIFI网络状态的权限 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 改变WIFI网络状态的权限 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 读写存储卡的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 读取电话状态的权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    </manifest>
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.liufeng.baidumap"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>
    <uses-sdk android:minSdkVersion="4" />

    <!-- 访问网络的权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 访问精确位置的权限 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 访问网络状态的权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 访问WIFI网络状态的权限 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 改变WIFI网络状态的权限 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 读写存储卡的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 读取电话状态的权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    </manifest>
    4)运行结果
    摘自:http://blog.csdn.net/lyq8479/article/details/6398630
    展开全文
  • 地磁定位作为一种新兴的室内定位方法,借助地球磁场强度在每个位置的唯一性实现定位功能,其优势在于安全可靠、成本低廉、对环境要求低等,只通过智能手机内置的地磁传感器即可实现定位,通常精度在2米以内。...
  • uni-app定位获取自身和附近定位信息

    千次阅读 2020-10-16 15:32:12
    可能因为浏览器原因,定位会在浏览器中会失效,可以通过真机调试的方式进行定位和数据的调试。 1、调用api获取自身定位经纬度 2、通过经纬度获取地址信息 引入腾讯sdk.js下载地址. 其中key值是 申请的腾讯开发者...
  • 地图功能有很多功能需要实现的,这次我分享的是以圆的中心点来实现,查询圆形里面的所有的医疗服务,现在来看一下周边分析的样式布局吧! 制作中心点,选择,然后把圆的半径设为500的默认值,然后所需要查询的是...
  • 功能如下:打开时自动定位到当前位置(浏览器可能会屏蔽自动定位功能,建议手机查看,或直接打开地址:http://1.jingcode.applinzi.com/test2.html),输入目的地点击搜索后,显示当前位置和目的地之间的线路图。...
  • 简介:搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题。基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量...
  • 自动碰撞提示,这个功能也许大家使用过,却没有意识到这是GPS/北斗定位模块在发挥作用,在汽车倒车入库、转弯等操作中,会自动向管理中心报告所在位置,提示所在位置的周边环境,意味追尾后,也能呼叫距离最近的公共...
  • 室内定位传感器方案汇总 目录 室内定位传感器方案汇总 1、定位方案概述 1.1、内定位系统有最基本的5种算法: 1.2、常用的室内定位技术主要包括以下几种: 1.3、定位理论 1.4、不同的定位方案对比 2、各种...
  • 进入页面, 自动定位 加载附近数据,渲染图标、绑定点击事件 预览下效果, 瞧上眼的再继续往下阅读, ???? 实现代码, 另存为HTML可直接打开 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta ...
  • 供给地舆空间分析才能,地舆空间分析才能是方位服务的底层根底才能,供给周边查找和线路导航等依据空间方位的计算和分析;为用户和开发者供给依据地图和定位的服务. 依据本钱的考虑:苏州新导认为现在国内首要...
  • vue-music - Vue 音乐搜索播放 maizuo - vue/vuex/redux仿卖座网 vue-demo - vue简易留言板 spa-starter-kit - 单页应用启动套件 zhihudaily-vue - 知乎日报web版 douban - 模仿豆瓣前端 vue-Meizi - ...
  • //根据中心点、半径与检索词发起周边检索。 该方法为百度地图提供的,其中函数的使用参数可前往官网查看,传送门: http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a7b0
  • 室内定位,顾名思义,是与室外定位相对而言的。 室外定位技术及应用早已走入我们大家的日常生活,从汽车导航、手机地图APP到各式各样的LBS(Location-Based Service基于位置的服务)应用,例如:滴滴打车、大众点评...
  • 本片博客主要介绍的是小程序利用百度地图搜索附近三公里信息 开篇先提一下,网上有很多关于小程序搜索框的,地图地点信息检索的,路线导航的,以及一个找事吧APP模仿的小程序。我也看过这些内容,整理一下,就是...
  • 定位:有史以来对美国营销影响最大的观念》PPT 定位学习网站 参考 2001年,美国营销学会评选“定位”为“有史以来对美国营销影响最大的观念”。2009年,美国《广告时代》杂志评选《定位》为“史上最佳营销经典”...
  • 任务模块中用到了小程序的map组件,实现了定位显示及查询poi显示周边特定设置的功能。1.wxml页面&lt;view class="menu-item-api-list docList"&gt; &lt;map class="map" longitude=...
  • 地图与定位(一)定位服务

    千次阅读 2016-06-20 15:50:33
    定位,CLLocation,LBS
  • 对于服务机器人而言,利用自身安装的多种传感器(包括激光雷达、视觉传感器、里程仪、罗盘、加速度计等)快速、准确地获取周围环境的信息固然重要,但仅仅依靠这些,并不能真正实现自主定位导航与自由行走。
  • 地图定位开发

    千次阅读 2015-02-03 10:13:01
    iOS开发系列--地图与定位 概览 ...例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地
  • 关于地图和定位

    2019-09-19 21:58:52
    #定位和地图 ##简介: 现在很多社交、电商、团购应⽤用都引⼊入了地图和定位功能,似乎地图功能不再是地图应⽤和导航应⽤用所特有的...例如你到了一个陌生的地⽅想要查找附近的酒店、超市等就可以打开软件搜索周边;类...
  • 百度API获取位置范围内的周边服务

    万次阅读 2015-07-22 14:19:15
    百度API获取位置范围内的周边服务, 自动定位搜索周边的景区,小吃等
  • iOS之地图与定位

    2017-06-29 14:52:47
    iOS开发系列--地图与定位 ...例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地图和定位功能已经
  • 定位和地图

    2016-04-20 16:28:59
    例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地图和定位功能已经大量引入到应用开发中。今天就和...
  • 需求描述对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写字楼、地铁站、商场等,一般的爬虫可以采用python脚本爬取,有很多成型的框架如scrapy,但是想...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,131
精华内容 452
关键字:

周边超市搜索定位