android矢量地图引擎,GitHub - UbiroutingDevelop/UbiMap-Android-Demo: 使用识途UbiMap矢量图引擎显示地图Demo及文档...

UbiMap Demo

687474703a2f2f756269726f7574696e672e636f6d2f696d6167655573652f5562694d61702e676966

UbiMap矢量图引擎是由识途团队研发的矢量地图引擎,可用来显示商场、博物馆、景区等特定场所的精细地图。

特点:

操作流畅、体验良好;

轻量级的SDK;

轻量级的矢量地图:一般地图仅不到300KB。

支持导航;

跨平台格式,iOS\Android\HTML5

与识途室内定位SDK完美配合,为室内定位解决方案中不可获取一环;

#1 准备工作

ubimaplib_v1.3.jar

libubimap.so

若您使用eclipse ADT,项目下新建libs文件夹,将其按如下方式放置:

687474703a2f2f756269726f7574696e672e636f6d2f696d6167655573652f7562696d61702d65636c697073652d6c6962732e706e67

若为Android Studio,此略。

编辑AndroidMenifest.xml,添加权限:

添加Key:

android:name="ShituKey"

android:value="YourKey" />

#2 SDK调用 - 下载资源包

识途矢量地图SDK,在使用前,需预先下载一个资源包,该资源包包含所有地图所需渲染素材;该资源包只需下载一次。

调用:

mMapDownloader = new UbiMapDownloader();

mMapDownloader.tryDownloadRes(new UbiMapDownloadListener() {

// If no resource file should be downloaded.

@Override

public void onNoNeedDownload() {

// Usually do nothing here

}

// Downloading failed, may caused by network problem.

@Override

public void onFailed(final String arg0) {

Toast.makeText(MainActivity.this, "download failed because of " + arg0, Toast.LENGTH_LONG).show();

if (mDownloadDialog != null)

mDownloadDialog.dismiss();

}

// On downloading, and 'percent' indicates the process of

// downloading.

@Override

public void onDownloading(final float percent) {

mDownloadDialog.setMessage("downloading resource.." + (int) (percent * 100) + "%");

}

// On download succeeds.

@Override

public void onDownloadSuccess() {

mDownloadDialog.dismiss();

}

// On download starts.

@Override

public void onDownloadStart() {

if (mDownloadDialog != null)

mDownloadDialog.dismiss();

mDownloadDialog = new ProgressDialog(MainActivity.this);

mDownloadDialog.setMessage("downloading resource..");

mDownloadDialog.setCancelable(false);

mDownloadDialog.show();

}

});

#3 下载地图

获取您所拥有的地图,必须事先获取MapId.

根据MapId下载地图:

final long mapId = 1000361;

mMapDownloader.tryDownloadMap(mapId, new UbiMapDownloadListener() {

@Override

public void onNoNeedDownload() {

// Usually do nothing

Intent i = new Intent();

i.putExtra("mapId", mapId);

i.setClass(MainActivity.this, MapActivity.class);

MainActivity.this.startActivity(i);

}

@Override

public void onFailed(String arg0) {

// Must check the NULL situation of mDownloadDialog, because

// the

// onDownloadStart() is

// only invoked when there is a new version of map to be

// downloading.

if (mDownloadDialog != null)

mDownloadDialog.dismiss();

Toast.makeText(MainActivity.this, "download failed because of " + arg0, Toast.LENGTH_LONG).show();

}

@Override

public void onDownloading(float percent) {

mDownloadDialog.setMessage("downloading map.." + (int) (percent * 100) + "%");

}

@Override

public void onDownloadSuccess() {

mDownloadDialog.dismiss();

Intent i = new Intent();

i.putExtra("mapId", mapId);

i.setClass(MainActivity.this, MapActivity.class);

MainActivity.this.startActivity(i);

}

@Override

public void onDownloadStart() {

if (mDownloadDialog != null)

mDownloadDialog.dismiss();

mDownloadDialog = new ProgressDialog(MainActivity.this);

mDownloadDialog.setMessage("downloading map..");

mDownloadDialog.setCancelable(false);

mDownloadDialog.show();

}

});

#3 加载地图

UbiMapView mMap = (UbiMapView) findViewById(R.id.mapview);

mMap.load(mapId);

#4 定位点

UbiMap能通过传入一系列坐标,显示当前位置。但定位本身并不属于UbiMap SDK的功能范畴,您可下载识途定位SDK实现室内定位的功能,也可通过其他室内定位SDK来传入坐标。。

##4.1 坐标

// 坐标为该矢量地图的相对像素坐标

mMap.position(x, y);

##4.2 角度

// 刷新定位点角度

mMap.angle(mDegree);

##4.3 跟随模式

跟随模式,即为所有坐标的更新,都将引起地图的移动,定位点此时固定在屏幕中央。在跟随模式下,用户能对周围地图有更好的直观体验。

跟随模式在手指触摸view后自动被破坏。

//设置为跟随模式

mMap.switchFollowMode();

#5 地图POI

识途矢量地图上包含2类POI。

Mark,无区域的POI, 即该POI在地图上仅显示为一个单独的图标,常用来表示电梯、ATM、厕所、问讯处等。此类POI在实际环境中占据的区域较少,所以往往用一个单独的图标来表示;

687474703a2f2f7777772e756269726f7574696e672e636f6d2f696d6167655573652f7562696d61705f6d61726b5f6578616d706c652e6a7067

Area, 区域POI, 即该POI在地图上显示为一个多边形,并且带有店铺图标和文字。常用来表示店铺、停车位等比较大的区域。

687474703a2f2f7777772e756269726f7574696e672e636f6d2f696d6167655573652f7562696d61705f617265615f6578616d706c652e6a7067

上述2类POI均继承自MapModel。 通过地图点击事件、搜索可获取响应的POI。此外,也可在不加载地图的情况下获取数据内的相关信息。见获取地图内POI信息

#6 点击事件

设置UbiMapListener来获取点击事件。

mMap.setOnMapListener(new UbiMapListener() {

@Override

public void onSwitchFloor(int area) {

//当切换楼层时调用

}

// When map loading completed, the floor information will be

// returned by this method. You can access floors via 'floorList'.

// Each element in 'floorList' is a instance of

// com.ubirouting.ubimaplib.model.map.Floor class.

@Override

public void onLoadData(List floorList) {

//当加载完地图后调用,返回所有楼层信息。每一个楼层信息为com.ubirouting.ubimaplib.model.map.Floor的实例,其中包含该矢量地图的像素比例尺、像素长宽、与正北夹角等信息。

}

@Override

public void onFailedLoadData() {

// 地图加载失败

}

@Override

public void onClickMap(float x, float y) {

// 当点击地图时回调

}

@Override

public void onClickArea(Area area) {

// 当点击区域时回调。区域为大块区域,常用来表示店铺、停车位等有一定面积的POI。

}

@Override

public void onClickMark(Mark mark) {

//当点击Mark时回调。Mark为地图上的无区域的小图标,常用来表示厕所、电梯、ATM等单点POI

}

});

#7 导航

// 调用后,将在地图中规划最短路径。用于定点导航

mMap.navigate(startMapModel, endMapModel);

// 根据坐标来导航,用于实时导航

mMap.navigate(x, y, endModel);

// 清除路径

mMap.clearPath();

#8 搜索

// 根据关键字搜索

List models = mMap.search(keyword);

#9 获取地图内POI信息

您可在不加载地图的情况下,获取识途矢量地图中的楼层及POI信息。

// 获取楼层信息

List floors = UbiMapDataHelper.allFloor(mMapId);

// 获取某层POI

List pois = UbiMapDataHelper.allPoi(mMapId, floorNum);

// 获取所有POI

List pois = UbiMapDataHelper.allPoi(mMapId);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值