我需要建立一个android地图应用程序,我将绘制考古poi(兴趣点)。要求是要有像谷歌地图卫星视图航空照片。然而,另一个需求是当数据连接不可用时的离线映射能力,这样就排除了使用google地图的可能性。
所以我有两个问题。
osmdroid是否可以在不使用bing的情况下免费访问支持arial摄影或卫星的tile源?是的。
我知道OSM可以支持Bing,Bing有一个Ariel摄影地图,但我不能让它工作。有没有什么必应特定的教程可以给我指点,或者一个简单的例子,说明如何让一个必应地图显示在osmdroid中,因为我已经找了几个小时,并拔出了我的头发。
在eclise中,我可以构建一个简单的应用程序来显示osmdroid(mapink)的默认映射。为了尝试使用Bing,我在我的项目源代码中添加了三个类。bingmaptilesource.java、imagerymetadata.java和imagerymetadaresource.java。我是从osmdroid svn(Link here)上tileprovider目录的bing子文件夹中得到这些的。
但是,当我在oncreate中按如下方式使用它时,bingmaptilesource.java类中会出现空指针错误。
MapView mapView = new MapView(this, 256);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
String m_locale=Locale.getDefault().getISO3Language()+"-"+Locale.getDefault().getISO3Language();
mapView.setTileSource(new BingMapTileSource("Bing",m_locale));
mapView.getController().setZoom(10);
mapView.getController().setCenter(new GeoPoint(39.461078, 2.856445));
setContentView(mapView);
我认为这个问题的原因是,在第一次使用下列类变量之前,它们从未初始化过。
s_roadMetaData = null;
s_aerialMetaData = null;
s_aerialwithLabelsMetaData = null;
我能看到它们被初始化的唯一地方是在一个名为initmetadata的静态方法中,它永远不会被调用。
public static synchronized void initMetaData(final Context aContext)
尽管它的javadoc中提供了一些关于其用途的线索。
/**
* Initialize BingMap tile source.<br>
* This method should be invoked before class instantiation.<br>
* It get dynamically the REST service url to be used to get tile in each supported map view mode.
* @param a_BingMapKey The user's BingMap key.
* @throws Exception
*/
不过,我不知道怎么用这个。任何对教程、示例或某些代码的建议或指针都将非常感谢。
最佳答案
更新日期:2015年7月22日
如何将Bing地图添加到OSMDroid
以下是逐步说明。也许有人这样可以节省很多时间。
1.增加对梯度的依赖性
compile 'org.slf4j:slf4j-android:1.6.1-RC1'
compile 'org.osmdroid:osmdroid-android:4.3'
2.添加库osmdroid第三方from here
或者
在我们的项目中添加三个类(bingmaptilesource.java、imagerymetadata.java、imagerymetadaresource.java)。from here
3.获取Bing地图密钥。Instructions here
4.将Bing地图密钥添加到清单中。
<meta-data android:name="BING_KEY" android:value="ApEqyap8rTa4WTNCNv-3pAGQc7XUsHS6595tuDI3MHR59QlahJ5bqYGYhMYJq6Ae" />
5.最后一步。添加地图代码
ResourceProxyImpl mResourceProxy = new ResourceProxyImpl(getContext().getApplicationContext());
MapView mMapView = new MapView(getContext(), 256, mResourceProxy);
mMapView.setBuiltInZoomControls(true);
mMapView.setMultiTouchControls(true);
try{
BingMapTileSource.retrieveBingKey(getContext());
String m_locale = Locale.getDefault().getDisplayName();
BingMapTileSource bing = new BingMapTileSource(m_locale);
bing.setStyle(BingMapTileSource.IMAGERYSET_AERIAL);
mMapView.setTileSource(bing);
}
catch(Exception e){
e.printStackTrace();
}
mapContent.addView(mMapView);
关于android - OSMDroid中的航空照片 map -必应?要不然是啥?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10797174/