我需要建立一个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/

10-13 03:10