【发布时间】:2019-06-22 10:00:02
【问题描述】:
我看到了 Osmdroid 教程,我可以使用它在地图上显示来自 Web 地址的 KML 文件。但现在我想在地图上显示 Android 设备内的 KML 文件。我尝试了几种方法。我使用了不同的方法,例如 parseKMLFile。但我没有回答。也许指导我编写正确的代码。我使用的示例代码如下所示。 谢谢
----------- sample code 1 for show file from device
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.osmdroid.api.IMapController;
import org.osmdroid.bonuspack.kml.KmlDocument;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.BoundingBox;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.FolderOverlay;
import java.io.File;
public class KMLfile extends AppCompatActivity {
private MapView mapView;
private IMapController mapController;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kml_file);
context = this;
mapView = (MapView) findViewById(R.id.map_kml_file);
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(15);
GeoPoint point2 = new GeoPoint(51496994, -134733);
mapController.setCenter(point2);
//loadMarker
File filefile = new File(this.getActivity().getFilesDir(), "earth.kml");
KmlDocument kmlFile = new KmlDocument();
kmlFile.parseKMLFile(filefile);
FolderOverlay kmlOverlay = (FolderOverlay)kmlFile.mKmlRoot.buildOverlay(mapView, null, null, kmlFile);
mapView.getOverlays().addAll(kmlOverlay.getItems());
}
}
------------ sample code 2 for show from web
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import org.osmdroid.api.IMapController;
import org.osmdroid.bonuspack.kml.KmlDocument;
import org.osmdroid.config.Configuration;
import org.osmdroid.events.MapEventsReceiver;
import org.osmdroid.util.BoundingBox;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.FolderOverlay;
/**
* This is the implementation of OSMBonusPack tutorials.
* Sections of code can be commented/uncommented depending on the progress in the tutorials.
*
* @author M.Kergall
* @see <a href="https://github.com/MKergall/osmbonuspack">OSMBonusPack on GitHub</a>
*/
public class Three extends Activity implements MapEventsReceiver, MapView.OnFirstLayoutListener {
MapView map;
KmlDocument mKmlDocument;
@Override protected void onCreate(Bundle savedInstanceState) {
//Disable StrictMode.ThreadPolicy to perform network calls in the UI thread.
//Yes, it's not the good practice, but this is just a tutorial!
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//Introduction
super.onCreate(savedInstanceState);
Configuration.getInstance().setUserAgentValue("OBP_Tuto/1.0");
setContentView(R.layout.six);
map = (MapView) findViewById(R.id.map_simple_show_routing);
map.setMultiTouchControls(true);
GeoPoint startPoint = new GeoPoint(48.13, -1.63);
IMapController mapController = map.getController();
mapController.setZoom(10.0);
mapController.setCenter(startPoint);
KmlDocument kmlDocument = new KmlDocument();
kmlDocument.parseKMLUrl("http://mapsengine.google.com/map/kml?forcekml=1&mid=z6IJfj90QEd4.kUUY9FoHFRdE");
FolderOverlay kmlOverlay = (FolderOverlay)kmlDocument.mKmlRoot.buildOverlay(map, null, null, kmlDocument);
map.getOverlays().add(kmlOverlay);
BoundingBox bb = kmlDocument.mKmlRoot.getBoundingBox();
map.zoomToBoundingBox(bb,true);
map.invalidate();
}
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
return false;
}
@Override
public boolean longPressHelper(GeoPoint p) {
return false;
}
@Override
public void onFirstLayout(View v, int left, int top, int right, int bottom) {
}
}
【问题讨论】: