我正在为一个中国客户创建一个Android应用程序,他们需要地图集成,所以谷歌地图不是一个选项,因为所有谷歌服务在中国都被屏蔽了。我正在尝试使用百度地图,它被称为百度LBS(基于位置的服务)云。
获得一个没有覆盖的基本地图相对容易。过程在这里描述(中文,但如果你不懂语言,代码不言自明)。下载最新的百度AndroidSDK(在撰写本文时为v3.2.0)并将其作为库集成到我的Eclipse项目中没问题,但不要太信任该链接中的留档,即使它是官方链接。他们的示例通常包含甚至无法编译的代码。例如,. jar文件的名称与您在屏幕截图中看到的完全不同。
哦,还有他们的. jar库是混淆的,这是超级烦人的工作:-(
我需要注册一个百度帐户并去他们的控制中心生成一个密钥。要为移动设备创建访问密钥(“ak”),您需要输入为您的应用程序签名的密钥库的SHA1指纹,然后输入您的清单中指定的包名称。然后我将生成的密钥添加到我的清单标签下
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="xxx...xxx" />
然后,我复制了他们示例项目CloudSearchActivity中的代码,因为我有要显示的特定坐标。我实现了CloudListener接口,如图所示:
@Override
public void onGetSearchResult(final CloudSearchResult result, final int error)
{
Log.w("onGetSearchResult", "status=" + result.status + ". size=" + result.size + ". total=" + result.total + ". error=" + error);
if(null != result && null != result.poiList && 0 < result.poiList.size())
{
mBaiduMap.clear();
final BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromResource(R.drawable.icon_address_grey);
LatLng latitudeLongitude;
LatLngBounds.Builder builder=new Builder();
for(final CloudPoiInfo info : result.poiList)
{
latitudeLongitude=new LatLng(info.latitude, info.longitude);
final OverlayOptions overlayOptions=new MarkerOptions().icon(bitmapDescriptor).position(latitudeLongitude);
mBaiduMap.addOverlay(overlayOptions);
builder.include(latitudeLongitude);
}
final LatLngBounds bounds=builder.build();
MapStatusUpdate mapStatusUpdate=MapStatusUpdateFactory.newLatLngBounds(bounds);
mBaiduMap.animateMapStatus(mapStatusUpdate);
}
}
我添加了启动查询的代码(也从他们的示例项目中复制):
@Override
public View onCreateView(final LayoutInflater layoutInflater, final ViewGroup viewGroup,
final Bundle savedInstanceState)
{
// initialize needs to be called
SDKInitializer.initialize(getApplication());
CloudManager.getInstance().init(MyFragment.this);
view=(ViewGroup)layoutInflater.inflate(R.layout.fragment_map, viewGroup, false);
mMapView=(MapView)view.findViewById(R.id.baiduMapView);
mBaiduMap=mMapView.getMap();
NearbySearchInfo info=new NearbySearchInfo();
info.ak="xxx...xxx";
info.geoTableId=12345;
info.tags="";
info.radius=30000;
info.location="116.403689,39.914957";
CloudManager.getInstance().nearbySearch(info);
return view;
}
不幸的是,我一直从服务器获取状态值102(根据此API页面,这意味着状态\u代码\u安全\u代码\u错误)。现在我不知道该怎么办。我不明白的事情有:
有什么想法吗?
经过几个小时的研究,我在开放性问题上取得了一些进展。
>
云搜索查询中“ak”字段的原因不是重复,它实际上是不同的访问密钥。在某个隐藏的地方,百度说“for mobile”的访问密钥不适用于这些云搜索,您需要一个ak“for server”。所以解决方案是返回百度控制中心并创建另一个密钥“for server”。该密钥需要在查询中使用,而“for mobile”密钥需要保留在清单中。
geoTableId是帐户的标识符,与访问密钥并不相似。这是一个(目前)5位数的数字,您需要在百度控制中心获得。其他键在标题为“API”的选项卡中生成控制台“(API控制台),但对于geoTableId,您需要切换到调用的选项卡”数据管理“(数据管理)。我想我需要按下”创建“(~创建)按钮,然后输入名称,选择”是“(是)他们询问这是否要发布(不确定该翻译),然后单击”保存“(保存)。在此之后,新生成的号码将显示在您刚才选择的名称后面括号内的顶部字段中。
通过这些步骤,我可以发送“成功”查询,其中服务器以状态0(status\u CODE\u SUCCEED)进行应答。然而,到目前为止,我得到的所有答案都是空的,我还没有找到一个生成非空答案的查询。如果有人做到了,请告诉我!
本文向大家介绍Android百度地图poi范围搜索,包括了Android百度地图poi范围搜索的使用技巧和注意事项,需要的朋友参考一下 我想大家可能都有过这样的经历:兜里揣着一张银行卡,在街上到处找自动取款机(ATM)。在这个场景中,ATM就是的兴趣点,我们想做的事情就是找到离自己较近的一些ATM然后取款,此时我们并不关心附近有哪些超市、酒吧,因为这些地方没办法取钱! 说了这么多,一方面是加深大家
我想让谷歌地图按地址搜索 下面是我的cari.java代码 我想要的是,当我在editText中写出一条街的名字(例如:第1大道1152号),然后按下搜索按钮,它就会在谷歌地图上显示该位置(第1大道1152号)。 当我运行这个程序时,,,它说 “java.lang.RuntimeException:无法实例化activity ComponentInfo{Udin.GoogleMap2/Udin.G
本文向大家介绍js调用百度地图及调用百度地图的搜索功能,包括了js调用百度地图及调用百度地图的搜索功能的使用技巧和注意事项,需要的朋友参考一下 js调用百度地图的方法 代码如下: js调用百度地图搜索 引用百度js Api 创建地址解析器: 结合knockout的textInput绑定方法和对象的subscribe属性,实现输入框变化实时查询功能。 以上就是呐喊教程的小编给大家分享的js调用百度地
本文向大家介绍基于Android实现百度地图定位过程详解,包括了基于Android实现百度地图定位过程详解的使用技巧和注意事项,需要的朋友参考一下 一、问题描述 LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能 二、配置环境 1、注册密钥:地址http://developer.baid
我们知道,由于臭名昭著的中国GPS偏移问题,GPS(WSG-84)地图坐标与国家批准的中国地图使用的坐标系(GCJ-02)不完全对应。 问题是,如何确保通过百度地图API在导航器报告的坐标处放置标记。地理位置。getCurrentPosition()是否符合现实? 制造或批准在中国使用的设备的GPS芯片是否会返回与用户实际位置不匹配的坐标,以匹配GJC-02地图? 用户运行中文导航器(如Maxth
本文向大家介绍JS百度地图搜索悬浮窗功能,包括了JS百度地图搜索悬浮窗功能的使用技巧和注意事项,需要的朋友参考一下 这个需求的效果类似下面的截图,主要还是利用百度地图中自定义控件的功能,挺简单的。文档地址在这 http://lbsyun.baidu.com/index.php?title=jspopular 效果图: 代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教