高德地图,百度地图,腾讯地图哪个好?

高德地图,百度地图,腾讯地图哪个好?,第1张

在东北,只认高德地图和百度地图,周围的人几乎没有用腾讯地图的。在哈尔滨,滴滴司机和出租车司机基本上每人两部手机,分别下载高德和百度地图。但这些专业老司机的整体评价是:高德的更好一些,但当高德地图导航犯“迷糊”时,百度地图是一个极好的补充。

如果用于自驾车导航,高德和百度都可以胜任。如果用于骑行、徒步等低速运动导航,需要更详细地显示细节,高德好于百度;但城市公交查询方面貌似百度好于高德。

在消耗流量方面,二者差不多,都支持离线GPS定位,导航和查询时都要求必须接入网络。二者也都支持电脑和手机收藏夹同步。整体来说,高德地图的使用体验最佳。高德地图无论是在UI页面的美观度,还是 *** 作交互的简便程度上,以及步行室内外一体化路线规划和语音搜索方面,都更加方便实用。

现在虽然在手机地图的基础功能上,高德地图和百度地图已经出现了“同质化”的趋向,但在细节上,还是高德地图更为精致,功能性也更强。但百度地图在目的地定位、躲避拥堵和路线规划方面更出色,尤其是在不熟悉的陌生路段,更像一个深谙路况的老司机。在此也建议广大车主,自驾出行时和“性格”不同的导航app多多磨合,找到自驾出行的最佳拍档。

//获取经纬度
double
latitude
=
latlnglatitude;
double
longitude
=
latlnglongitude;
systemoutprintln("latitude="
+
latitude
+
",longitude="
+
longitude);
//先清除图层
mbaidumapclear();
//
定义maker坐标点
latlng
point
=
new
latlng(latitude,
longitude);
//
构建markeroption,用于在地图上添加marker
markeroptions
options
=
new
markeroptions()position(point)
icon(bitmap);
//
在地图上添加marker,并显示
mbaidumapaddoverlay(options);
//
在地图上添加marker数组,并显示
//mbaidumapaddoverlays(overlayoptionses);

1)添加高德SDK
(2)配置AndroidManifest文件
(3)创建地图
(4)控件交互
(5)方法交互
(6)地图截图
(7)添加Marker标记 上面我大致分为了7部分,其中第(1)、(2)部分在高德定位的博客中有说,本篇就不再多述。不同的地方就是我们需要添加地图的SDK以及armebi文件:
ok,下面正式进入地图的使用。
(1)创建地图:即在XML中添加即可。
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
然后重写Activity的生命周期方法,并在其中调用MapView相对的生命周期方法:
@Override
protected void onCreate() {
mMapView = (MapView) findViewById(Ridmapview);
mMapViewonCreate(savedInstanceState);//此方法必须重写
if(mMap == null) {
mMap = mMapViewgetMap();
}
// 地图模式可选类型:
// MAP_TYPE_NORMAL:普通模式(默认)
// MAP_TYPE_SATELLITE:卫星地图模式
// MAP_TYPE_NIGHT:夜间模式
// mMapsetMapType(AMapMAP_TYPE_SATELLITE);
}
@Override
protected void onResume() {
superonResume();
mMapViewonResume();
}
@Override
protected void onPause() {
superonPause();
mMapViewonPause();
}
@Override
protected void onDestroy() {
superonDestroy();
mMapViewonDestroy();
}
(2)控件交互:高德允许我们在地图上显示一些交互的控件。
mUiSettings = mMapgetUiSettings();
//控制定位到当前按钮的显示和隐藏
mUiSettingssetMyLocationButtonEnabled(true);
//控制缩放控件的显示和隐藏。
mUiSettingssetZoomControlsEnabled(true);
//控制指南针的显示和隐藏。
mUiSettingssetCompassEnabled(true);
//显示比例尺控件:例如1:10Km
mUiSettingssetScaleControlsEnabled(true);
(3)方法交互:
1改变地图中心点
CameraUpdate cameraUpdate = CameraUpdateFactorynewCameraPosition(
new CameraPosition(new LatLng(39977290,116337000),//新的中心点坐标
18, //新的缩放级别
30, //俯仰角0°~45°(垂直与地图时为0)
0  偏航角 0~360° (正北方为0)
));
改变地图中心点有两种方式:
(1)平滑地移动地图:第二个参数为移动时长
mMapanimateCamera(cameraUpdate, 1000, new AMapCancelableCallback() {
@Override
public void onFinish() {
}
@Override
public void onCancel() {
}
});
(2)直接应用新的视图
mMapmoveCamera(cameraUpdate);
2改变地图缩放级别
zoomTo是缩放地图到指定的缩放级别,ZoomIn是缩放地图到当前缩放级别的上一级
mMapmoveCamera(CameraUpdateFactoryzoomTo(17));//将地图的缩放级别调整到17级
(4)地图截取:高德提供了地图截取功能,可以在截取后获取到Bitmap
mMapgetMapScreenShot(new AMapOnMapScreenShotListener() {
@Override
public void onMapScreenShot(Bitmap bitmap) {
}
@Override
public void onMapScreenShot(Bitmap bitmap, int i) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
if(null == bitmap){
return;
}
//保存截图
try {
FileOutputStream fos = new FileOutputStream(
EnvironmentgetExternalStorageDirectory() + "/test_"
+ sdfformat(new Date()) + "png");
boolean b = bitmapcompress(BitmapCompressFormatPNG, 100, fos);
try {
fosflush();
} catch (IOException e) {
eprintStackTrace();
}
try {
fosclose();
} catch (IOException e) {
eprintStackTrace();
}
StringBuffer buffer = new StringBuffer();
if (b)
bufferappend("截屏成功 ");
else {
bufferappend("截屏失败 ");
}
if (i != 0)
bufferappend("地图渲染完成,截屏无网格");
else {
bufferappend( "地图未渲染完成,截屏有网格");
}
//ToastUtilshow(ScreenShotActivitythis, buffertoString());
} catch (FileNotFoundException e) {
eprintStackTrace();
}
}
});
(5)添加Marker标记。
LatLng latLng = new LatLng(39906901,116397972);
Marker marker = mMapaddMarker(new MarkerOptions()
draggable(true)//可拖拽
setFlat(true)//将Marker设置为贴地显示,可以双指下拉看效果
icon(BitmapDescriptorFactory
fromResource(Rdrawableic_location_mark))//Marker图标
title("marker标记")//标题
position(latLng));
//显示InfoWindow
if(!markerisInfoWindowShown()) {
markershowInfoWindow();
}
//Marker点击事件
mMapsetOnMarkerClickListener(new AMapOnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker arg0) {
return false;
}
});

给,对照一下
可能的问题:1用虚拟机,虚拟机定位就是在北京。
2手机(或虚拟机)是否开启了GPS功能
------------------------------
public class MainActivity extends AppCompatActivity {
MapView mMapView = null;
private BaiduMap mBaiDuMap;
public LocationClient mLocationClient;
// public BDLocationListener myListener = new MyLocationListener();
public MyLocationListener myListener = new MyLocationListener();
private BitmapDescriptor mCurrentMarker;
private MyLocationConfigurationLocationMode mCurrentMode;
// 经纬度
private TextView tvJingDu;
// 纬度
private TextView tvWeiDu;
// 高度
private TextView tvGaoDu;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
SDKInitializerinitialize(getApplicationContext());
setContentView(Rlayoutactivity_main);
// 经纬度TextView 初始化
tvJingDu = (TextView) findViewById(Ridtv_jing_du);
tvWeiDu = (TextView) findViewById(Ridtv_wei_du);
tvGaoDu = (TextView) findViewById(Ridtv_gao_du);
//===================================
// 普通模式
mCurrentMode = MyLocationConfigurationLocationModeCOMPASS;
// TODO
// mCurrentMarker = BitmapDescriptorFactoryfromResource(Rdrawabledingwei);
mCurrentMarker = null;
// 找到地图控件
mMapView = (MapView) findViewById(RidbmapView);
mBaiDuMap = mMapViewgetMap();// 获取地图
mBaiDuMapsetMapType(BaiduMapMAP_TYPE_NORMAL);// 设置地图模式为普通模式
// 开启定位图层
mBaiDuMapsetMyLocationEnabled(true);
mLocationClient = new LocationClient(this); // 定位用到一个类
mLocationClientregisterLocationListener(myListener);// 注册监听
// TODO
mBaiDuMapsetMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker, RcolormyBlue, ColorYELLOW
));
// LocationClientOption类用来设置SDK的位置方式
LocationClientOption option = new LocationClientOption();//以下是给定位设置参数
optionsetOpenGps(true); // 打开gps
optionsetCoorType("bd09ll"); // 设置坐标类型
optionsetScanSpan(2000);
mLocationClientsetLocOption(option);
mLocationClientstart();
}
boolean isFirstLoc = true; // 是否首次定位
// 3百度位置监听
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
Logi("监听被执行了", "监听被执行了");
if (location == null || mMapView == null) {
return;
}
// // 定位结果
// StringBuffer sb = new StringBuffer(256);
// StringBuffer sb1 = new StringBuffer(256);
// StringBuffer sb2 = new StringBuffer(256);
// // 经度
// String jd = sbappend(locationgetLongitude())toString();
// tvJingDusetText("" + jd);
// Logi("经度", "" + jd);
// // 纬度
// String wd = sb1append(locationgetLatitude())toString();
// tvWeiDusetText("" + sb1);
// Logi("纬度", "" + wd);
//
// String gaodu = sbappend(locationgetAltitude())toString();
// tvGaoDusetText("" + gaodu);
// 经度
double d1 = locationgetLongitude();
String s1 = "" + d1;
tvWeiDusetText(s1);
Logi("经度", "" + s1);
// 纬度
double d2 = locationgetLatitude();
Logi("TGA", "d2" + d2);
String s2 = "" + d2;
tvJingDusetText(s2);
Logi("纬度", "" + s2);
MyLocationData locData = new MyLocationDataBuilder()
accuracy(locationgetRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
direction(0)latitude(locationgetLatitude())
longitude(locationgetLongitude())build();
mBaiDuMapsetMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(locationgetLatitude(),
locationgetLongitude());
MapStatusBuilder builder = new MapStatusBuilder();
// 缩放的等级 120f
buildertarget(ll)zoom(180f);
mBaiDuMapanimateMapStatus(MapStatusUpdateFactorynewMapStatus(builderbuild()));
}
Logi("MyLocationListener被执行了!", "onReceiveLocation");
}
@Override
public void onConnectHotSpotMessage(String s, int i) {
}
}
// 结束方法
@Override
protected void onDestroy() {
superonDestroy();
mMapViewonDestroy();
}
@Override
protected void onResume() {
superonResume();
mMapViewonResume();
}
@Override
protected void onPause() {
superonPause();
mMapViewonPause();
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10805784.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存