百度地图

2017/1/4 星期三 16:18:53
API介绍:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction
[toc]

一、配置

1.导包

SDK下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
在build.gradle中添加以下代码以依赖so文件。

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

或者把so文件放在 java/jniLibs 文件夹内

2.申请密钥

密钥申请地址:http://lbsyun.baidu.com/apiconsole/key
SHA1的获取方法(cmd中输入):
1. cd .android
2. keytool -list -v -keystore debug.keystore
3. android
4. 获取SHA1(右键标记——左键选择——右键)


二、显示百度地图

1.在application中添加开发密钥

<application> 
    ...
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
    ...
</application>

2.添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

3.在布局中添加地图控件

<com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true" />

4.初始化SDK

在使用SDK各组件之前初始化context信息,传入ApplicationContext
在MyApplication中初始化
或者在进入的第一个Activity中初始化

//如果在Activity中初始化该方法要在setContentView方法之前实现  
SDKInitializer.initialize(getApplicationContext());  

5.在java中有生命周期(4个)

MapView mMapView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMapView = (MapView) findViewById(R.id.bmapView);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mMapView.onDestroy();
}

@Override
protected void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    mMapView.onPause();
}

完成以上步骤,地图就会显示成功。


三、基础地图

获取地图:

BaiduMap mBaiduMap = mMapView.getMap();

1. 地图类型

//普通地图  
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  
//卫星地图  
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);  
//空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

2. 实时交通图

mBaiduMap.setTrafficEnabled(true);

3. 城市热力图

mBaiduMap.setBaiduHeatMapEnabled(true);

4. 地图控制与手势(略)

地图Logo,指南针,比例尺等的显示;
地图平移、缩放、俯视、旋转等手势的禁用否。

5. 标注覆盖物

用图标标记某个给定了纬经度的位置,应用:标注某处为加油站

LatLng point = new LatLng(39.963175, 116.400244);  //设置纬经度
BitmapDescriptor marker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); //构建标注图标
//将位置和图标设置到地图上
OverlayOptions options = new MarkerOptions()
        .position(point)
        .icon(marker);
baiduMap.addOverlay(options);

针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:
1. 设置可拖拽

OverlayOptions options = new MarkerOptions()
    .position(point)  //设置marker的位置
    .icon(marker)  //设置marker图标
    .zIndex(9)  //设置marker所在层级
    .draggable(true);  //设置图标能否拖拽
//将marker添加到地图上
Marker marker = (Marker) (mBaiduMap.addOverlay(options));
//拖拽监听
baiduMap.setOnMarkerDragListener(...)

  1. 更多内容:

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/basicmap

四、检索功能

1. POI(Point of Interest)检索

(1)创建POI检索实例

mPoiSearch = PoiSearch.newInstance();

(2)设置POI检索监听者

mPoiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
    @Override
    public void onGetPoiResult(PoiResult poiResult) {
        //获取POI检索结果
    }

    @Override
    public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
        //获取Place详情页检索结果
    }            

    @Override
    public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
        //获取Place室内检索结果
    }
});

(3)发起检索请求

mPoiSearch.searchInCity((new PoiCitySearchOption())  
    .city(“北京”)  
    .keyword(“美食”)  
    .pageNum(10));

(4)释放POI检索实例

mPoiSearch.destroy();

自v3.6.1开始,城市poi检索返回结果,新增门址类列表数据:
PoiSearch类的searchInCity(PoiCitySearchOption) 发起检索时返回的结果,增加门址类数据:PoiResult中新增getAllAddr()获取门址类列表,当isHasAddrInfo() 返回true时,除了原poi列表外,还包含门址结果。
例如:在“北京”搜索“上地十街1号”,除返回包含“上地十街1号”的poi列表以外,还包括地址为“上地十街1号”的明确门址。

POI详情信息的检索

  1. 发起检索
//uid是POI检索中获取的POI ID信息
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid));
  1. 设置结果监听
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
    //获取Place详情页检索结果
    if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {
        //详情检索失败
        // result.error请参考SearchResult.ERRORNO 
    } else {
        //检索成功
    }
}

2. 公交信息检索

利用BusLineSearch方法,开发者可查询公交线路的详情信息

(1)发起POI检索,获取相应线路的UID

//以城市内检索为例,详细方法请参考POI检索部分的相关介绍  
mSearch.searchInCity((new PoiCitySearchOption())  
    .city(“北京”)  
    .keyword(“717”);

(2)在POI检索结果中判断该POI类型是否为公交信息

public void onGetPoiResult(PoiResult result) {  
    if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
        return;  
    }  
    //遍历所有POI,找到类型为公交线路的POI  
    for (PoiInfo poi : result.getAllPoi()) {  
        if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {  
            //说明该条POI为公交信息,获取该条POI的UID  
            busLineId = poi.uid;  
            break;  
        }  
    }  
}

(3)定义并设置公交信息结果监听者(与POI类似),并发起公交详情检索

//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似  
mBusLineSearch.searchBusLine((new BusLineSearchOption()  
    .city(“北京”)  
    .uid(busLineId)));

3. 行政区边界数据检索

根据省、市、县(区)级行政区划名称,查询行政区划的详细边界信息

mDistrictSearch = DistrictSearch.newInstance();
mDistrictSearch.searchDistrict(new DistrictSearchOption().cityName(city).districtName(district));
//其中city表示城市名称,必填;district表示区名称,可选。

4. 线路规划

(1)跨城公交线路规划

例如检索“北京天安门”到“上海东方明珠”

a. 创建公交线路规划检索实例
mSearch = RoutePlanSearch.newInstance();
b. 设置公交线路规划检索监听者
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener(){
   @Override
   public void onGetMassTransitRouteResult(MassTransitRouteResult result) {
    //获取跨城综合公共交通线路规划结果
   }
});
c. 准备检索起点、终点信息
PlanNode stMassNode = PlanNode.withCityNameAndPlaceName("北京", "天安门");
PlanNode enMassNode = PlanNode.withCityNameAndPlaceName("上海", "东方明珠");
d. 发起公交线路规划检索
mSearch.masstransitSearch(new MassTransitRoutePlanOption().from(stMassNode).to(enMassNode));
e. 释放检索实例
mSearch.destroy();

公交线路规划结果的JSON结构图如下:

MassTransitRouteResult {
    TransitResultNode: {    //起点信息
        int cityId;      //城市编号
        String cityName; //城市名
        LatLng location;        //起点坐标 (当匹配有效路径时,该坐标有值;当起点模糊,出给建议列表时,该坐标为空)
        String searchWord;      //检索关键字 (当起点模糊,出给建议列表时,该关键字有值;当匹配有效路径时,该关键字为空)
    }origin;
    TransitResultNode destination;  //终点信息(结果及含义同上)
    TaxiInfo: {                //打车信息 (起终点为大陆地区同城时,有打车信息;其他情况无打车信息,该字段为空)
        float totalPrice;       //总价格
        String desc;            //打车描述信息
        int distance;           //距离    
        int duration;           //时间
        float perKMPrice;       //单价
        float startPrice;       //起步价
    }massTaxiInfo;
    int total;              //总路线数目
    List<MassTransitRouteLine>  : [  //换乘方案
        MassTransitRouteLine {
            int distance;      //距离(单位:米)
            int duration;      //耗时 (单位:秒)
            String arriveTime; //本线路预计到达时间:格式举例:2016-09-29 13:48:00
            double price;      //本线路价格(元)
            List<PriceInfo> priceInfo;       //票价详情(起终点为大陆地区同城时,此字段有值;其他情况,此字段为空)
            List<List<TransitStep>> newSteps; //一条线路中的步骤(step)
        }
        ...
    ]mRoutelines;
    SuggestAddrInfo :{                     //    建议起终点信息
        List<PoiInfo> suggestStartNode;  //建议起点
        List<PoiInfo> suggestEndNode;    //建议终点
    }suggestAddrInfo;
} 

路线步骤说明:

List<List<TransitStep>>[    //一条线路中的步骤(step)
    [ //起终点为同城时,该list表示一个step中的多个方案scheme; 起终点为跨城时,该list表示一个step 中多个子步骤sub_step
        TransitStep:{
            int distance;               //距离
            int duration;               //耗时
            List<TrafficCondition> trafficConditions;  //路况状态
            LatLng startLocation;       //起点
            LatLng endLocation;         //终点
            String instructions;        //换乘说明
            StepVehicleInfoType vehileType;  //交通工具类型(火车,飞机,大巴,公交,驾车,步行)
            // 交通工具为驾车或步行时,无详情;为其他4种方式,则对应以下4种工具详情)
            TrainInfo trainInfo;        //火车详情
            PlaneInfo planeInfo;        //飞机详情
            CoachInfo coachInfo;        //大巴详情
            BusInfo busInfo;            //公交详情                  
        }
        ...
    ]
    …
]newSteps;

(2)公交线路规划

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/retrieval
.
.
.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flutter百度地图是一款基于Flutter技术开发的地图应用程序。Flutter是一种跨平台的移动应用开发框架,而百度地图是一款功能强大的地图导航工具。这个应用程序结合了Flutter的跨平台特性和百度地图的功能,使得开发者可以轻松地创建出高性能、交互友好的地图应用。 使用Flutter百度地图可以实现很多功能,比如显示地图、标记位置、搜索地点、路线规划等。开发者可以通过调用Flutter百度地图提供的API来完成这些功能。Flutter百度地图API包括了地图的展示、交互、搜索、定位等功能,能够满足开发者对地图应用的各种需求。 使用Flutter百度地图进行地图展示时,开发者可以自定义地图样式,包括地图的颜色、标注点的图片、文字样式等。通过调用API,开发者可以在地图上添加标记点、覆盖物、绘制路线等,使得地图更加丰富多样。此外,开发者还可以利用Flutter百度地图的搜索功能,实现地点的搜索和周边兴趣点的展示。 在开发过程中,Flutter百度地图提供了丰富的事件回调,开发者可以根据用户的交互行为来执行相应的操作。比如,当用户点击地图上的标记点时,开发者可以通过事件回调来实现弹出详情信息或执行其他特定操作。 总之,Flutter百度地图是一款强大的地图应用开发工具,可以帮助开发者快速构建出高质量的跨平台地图应用。无论是需要简单的地图展示,还是复杂的路线规划,Flutter百度地图都能满足开发者的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值