
我目前正在使用OpenStreetMap(OSM)API开发(我的第一个)Android应用程序,因此尽管我无法帮助您使用JSOM,但是我可以尝试帮助OSM部分:
假设您要在仅显示OSM映射的android应用程序中创建一个新活动,则可以从以下内容开始:
package example.stackoverflow.osmdroid;import android.app.Activity;import android.os.Bundle;import org.osmdroid.tileprovider.tilesource.TileSourceFactory;import org.osmdroid.util.GeoPoint;import org.osmdroid.views.MapView;public class YourMap extends Activity { // The MapView variable: private MapView m_mapView; // Default map zoom level: private int MAP_DEFAULT_ZOOM = 15; // Default map Latitude: private double MAP_DEFAULT_LATITUDE = 38.535350; // Default map Longitude: private double MAP_DEFAULT_LonGITUDE = -121.753807; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Specify the XML layout to use: setContentView(R.layout.osm_map); // Find the MapView controller in that layout: m_mapView = (MapView) findViewById(R.id.mapview); // Setup the mapView controller: m_mapView.setBuiltInZoomControls(true); m_mapView.setMultiTouchControls(true); m_mapView.setClickable(true); m_mapView.setUseDataConnection(false); m_mapView.getController().setZoom(MAP_DEFAULT_ZOOM); m_mapView.getController().setCenter( new GeoPoint(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE)); m_mapView.setTileSource(TileSourceFactory.MAPNIK); } // end onCreate()} // end class YourMap您的osm_map.xml布局可能看起来像这样:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <org.osmdroid.views.MapView android:id="@+id/mapview" android:layout_width="match_parent" android:layout_height="match_parent" android:enabled="true" android:clickable="true" /> </RelativeLayout>
至于实际的地图图块,有一个叫做 Mobile Atlas Creator 的非常酷的程序,它允许您为上面实现的离线Android地图生成必要的地图图块。
一旦安装了应用程序,并且要创建新的图集,系统将要求您选择“所需的altas格式”。d出时,选择“ Osmdroid zip”。
加载完所有内容后,在地图上选择要为其创建图块的区域,选择要为其创建图块的缩放级别,然后单击左侧列中的“添加选择”按钮,然后单击“创建图集”。
哦,根据来源,您可能需要选中“创建/调整地图图块”复选框,以强制将图块导出为PNG。有人知道在OSM中是否可以使用JPG吗?
生成ZIP之后,我将其重命名为“ Mapnik.zip”,并将其移动到我的Eclipse Android项目工作区中名为“
tiles”的新创建的文件夹中。为了使其正常工作,我还必须打开zip文件,然后将“ Google
Earth”(取决于您使用的地图来源)之类的顶级文件夹重命名为“ Mapnik”,以使图块能够显示在我的Android应用程序中。
但是,为了将磁贴实际加载到手机上,您需要使用终端上的ADB工具。在您的ADB工具目录中,您将需要运行以下命令(每行是一个新命令):
./adb shell rm -r /sdcard/osmdroid/./adb shell mkdir /sdcard/osmdroi/./adb push ~/path/to/your/mapnik.zip /sdcard/osmdroid
根据地图的大小和手机内存总线的速度,最后一步可能需要几分钟到一个小时才能完成。完成后,您的地图应该可以工作了-希望如此!
如前所述,这是我第一次使用OSM API,因此我绝不是专家,我只能评论对我有用的东西。
希望这会帮助您入门!
编辑:
我没有机会真正运行我昨天编写的代码,因此我没有发现一些错误。我刚刚在Eclipse中创建了一个新项目,将代码转储到其中,修复了一些问题,然后启动并运行了它。我所做的所有更改都反映在上面的代码中!我忘记了一些基本的导入语句,也忘记了向manifest.xml文件添加权限。
现在manifest.xml的最后几行如下所示:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>
而且您可能还想将其添加到清单中,尽管当然并不重要:
<supports-screens android:anyDensity="true" android:resizeable="false" android:largeScreens="true" android:normalScreens="true"/>
在
<uses-sdk ... />零件之后添加此名称。
此外,请确保导入以下两个JAR库:
osmdroid-android-3.0.3.jar // Or whatever version you're using...
和
slf4j-android-1.5.8.jar // Or whatever the latest version is...
没有最后一个JAR,我的代码一直崩溃,直到我记得包括它。
确保修改默认坐标,以便它们指向您实际具有地图图块的位置,否则,除了白色画布之外,您不会看到很多东西。
对不起,我没有先运行代码!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)