我需要构建一个Android绘图应用程序,我将在其上绘制考古POI(兴趣点) . 要求是拥有与Google Maps Satellite视图非常相似的航拍照片 . 但是,当数据连接不可用时,另一个要求是离线映射功能,因此使用Google Maps排除规则 .
所以我有两个问题 .
-
OSMDroid是否可以在不使用Bing的情况下免费访问支持Arial Photography或Satellite的磁贴源 .
-
我知道OSM可以支持拥有Ariel摄影 Map 的Bing,但我无法让它工作 . 是否有任何bing特定的教程,你可以指向我,或一个简单的例子,如何获得一个bing Map 显示在OSMDroid,因为我一直在寻找几个小时,并拉我的头发 .
在eclise中,我已经能够构建一个简单的应用程序来显示OSMDroid(Mapink)的默认映射 . 为了尝试使用Bing,我在项目源中添加了三个类 . BingMapTileSource.Java,ImageryMetaData.Java和ImageryMetaDataResouce.Java . 我从OSMDroid SVN上的TileProvider目录的Bing子文件夹中获取了这些文件(Link here)
但是,当我在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
*/
但是,我不知道如何使用它 . 任何建议或指向教程,示例或一些代码的指针将不胜感激 .
4 回答
updated 22.07.2015
How to add Bing maps to osmdroid
这是一步一步的说明 . 也许这会节省很多时间 .
1.将依赖添加到gradle
2.add library osmdroid-third-party from here
OR
在我们的项目中添加三个类( BingMapTileSource.java, ImageryMetaData.java, ImageryMetaDataResource.java ) . from here
3.获取Bing Map 密钥 . Instructions here
4.将Bing Maps Key添加到清单中 .
5.最后一步 . 添加 Map 代码
好吧,我想到了使Bing Map 工作的问题 . 所需要的是在BingMapTileSouce实例化之前,使用以下静态方法实例化前面讨论的三个Meta Data对象 .
离线卫星图像的要求意味着您必须单独许可图像 . 如果没有特定协议,我认为任何提供商都不允许这样的使用 .
天线有许多商业供应商:Digitalglobe,Geoeye等 . 从Google Earth查询,他们在 Map 底部提到了他们的供应商 .
还有一些较低分辨率的免费图像,如OpenAerialMap,它本身不再起作用 . 但值得检查一下它们的原始来源(http://openaerialmap.org/Data_Sources) . 此外,MapQuest Open Tiles API中至少还有一些剩余的存档 . 也许他们甚至允许下载到离线,检查他们的条款 .
两个警告 - 来自商业提供商的航拍图像可能非常昂贵,特别是对于离线情况 . 来自任何来源的天线将占用大量空间,比光栅瓦片多几倍 . 因此,将它们下载到设备可能是一个挑战 .