Skip to content

Commit

Permalink
Adding code for tutorial chapters 6, 7 and 8.
Browse files Browse the repository at this point in the history
Adapt to API version 4.2.2 (KML changes)
  • Loading branch information
mathieu.kergall@gmail.com committed Dec 16, 2013
1 parent 08373cf commit fbd61c4
Showing 1 changed file with 77 additions and 16 deletions.
93 changes: 77 additions & 16 deletions OSMBonusPackTuto/src/com/example/osmbonuspacktuto/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import java.util.ArrayList;
import org.osmdroid.api.IMapController;
import org.osmdroid.bonuspack.kml.KmlObject;
import org.osmdroid.bonuspack.kml.KmlProvider;
import org.osmdroid.bonuspack.kml.KmlDocument;
import org.osmdroid.bonuspack.location.GeoNamesPOIProvider;
import org.osmdroid.bonuspack.location.NominatimPOIProvider;
import org.osmdroid.bonuspack.location.POI;
import org.osmdroid.bonuspack.location.PicasaPOIProvider;
import org.osmdroid.bonuspack.overlays.DefaultInfoWindow;
import org.osmdroid.bonuspack.overlays.ExtendedOverlayItem;
import org.osmdroid.bonuspack.overlays.FolderOverlay;
import org.osmdroid.bonuspack.overlays.ItemizedOverlayWithBubble;
Expand All @@ -17,14 +20,21 @@
import org.osmdroid.bonuspack.routing.RoadManager;
import org.osmdroid.bonuspack.routing.RoadNode;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.BoundingBoxE6;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.OverlayItem;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

Expand Down Expand Up @@ -81,11 +91,28 @@ public class MainActivity extends Activity {
//5. OpenStreetMap POIs with Nominatim
final ArrayList<ExtendedOverlayItem> poiItems = new ArrayList<ExtendedOverlayItem>();
ItemizedOverlayWithBubble<ExtendedOverlayItem> poiMarkers = new ItemizedOverlayWithBubble<ExtendedOverlayItem>(this,
poiItems, map);
poiItems, map, /*7.*/new CustomInfoWindow(map));
map.getOverlays().add(poiMarkers);

/* 5.
NominatimPOIProvider poiProvider = new NominatimPOIProvider();
ArrayList<POI> pois = poiProvider.getPOICloseTo(startPoint, "cinema", 50, 0.1);
//or : ArrayList<POI> pois = poiProvider.getPOIAlong(road.getRouteLow(), "fuel", 50, 2.0);
*/

/* 6. Wikipedia POIs with GeoNames
GeoNamesPOIProvider poiProvider = new GeoNamesPOIProvider("mkergall");
//BoundingBoxE6 bb = map.getBoundingBox();
//ArrayList<POI> pois = poiProvider.getPOIInside(bb, 30);
//=> not possible in onCreate, as map bounding box is not correct until a draw occurs (osmdroid issue).
ArrayList<POI> pois = poiProvider.getPOICloseTo(startPoint, 30, 20.0);
*/

/*8. Quick overview of the Flickr and Picasa POIs */
PicasaPOIProvider poiProvider = new PicasaPOIProvider(null);
BoundingBoxE6 bb = BoundingBoxE6.fromGeoPoints(waypoints);
ArrayList<POI> pois = poiProvider.getPOIInside(bb, 20, null);

if (pois != null) {
for (POI poi:pois){
ExtendedOverlayItem poiItem = new ExtendedOverlayItem(
Expand All @@ -97,32 +124,66 @@ public class MainActivity extends Activity {
if (poi.mThumbnail != null){
poiItem.setImage(new BitmapDrawable(poi.mThumbnail));
}
/* 7.*/ poiItem.setRelatedObject(poi);
poiMarkers.addItem(poiItem);
}
}

//10. Loading KML content
String url = "http://www.yournavigation.org/api/1.0/gosmore.php?format=kml&flat=48.13&flon=-1.63&tlat=48.1&tlon=-1.26";
KmlProvider kmlProvider = new KmlProvider();
KmlObject kmlRoot = kmlProvider.parseUrl(url);
KmlDocument kmlDocument = new KmlDocument();
KmlObject result = kmlDocument.parseUrl(url);
Drawable defaultMarker = getResources().getDrawable(R.drawable.marker_kml_point);
if (kmlRoot != null){
FolderOverlay kmlOverlay = (FolderOverlay)kmlRoot.buildOverlays(this, map, defaultMarker, kmlProvider, false);
if (result != null){
FolderOverlay kmlOverlay = (FolderOverlay)kmlDocument.kmlRoot.buildOverlays(this, map, defaultMarker, kmlDocument, false);
map.getOverlays().add(kmlOverlay);
if (kmlRoot.mBB != null){
if (kmlDocument.kmlRoot.mBB != null){
//map.zoomToBoundingBox(kmlRoot.mBB); => not working in onCreate - this is a well-known osmdroid bug.
//Workaround:
map.getController().setCenter(new GeoPoint(
kmlRoot.mBB.getLatSouthE6()+kmlRoot.mBB.getLatitudeSpanE6()/2,
kmlRoot.mBB.getLonWestE6()+kmlRoot.mBB.getLongitudeSpanE6()/2));
kmlDocument.kmlRoot.mBB.getLatSouthE6()+kmlDocument.kmlRoot.mBB.getLatitudeSpanE6()/2,
kmlDocument.kmlRoot.mBB.getLonWestE6()+kmlDocument.kmlRoot.mBB.getLongitudeSpanE6()/2));
}
}

//11. Grab overlays in KML structure, save KML locally
kmlRoot.addOverlay(roadOverlay, kmlProvider);
kmlRoot.addOverlay(roadNodes, kmlProvider);
File localFile = kmlProvider.getDefaultPathForAndroid("my_routes.kml");
kmlProvider.saveAsKML(localFile, kmlRoot);
//11. Grab overlays in KML structure, save KML document locally
if (kmlDocument.kmlRoot != null){
kmlDocument.kmlRoot.addOverlay(roadOverlay, kmlDocument);
kmlDocument.kmlRoot.addOverlay(roadNodes, kmlDocument);
File localFile = kmlDocument.getDefaultPathForAndroid("my_routes.kml");
kmlDocument.saveAsKML(localFile);
}
}

//7. Customizing the bubble behaviour
class CustomInfoWindow extends DefaultInfoWindow {
POI selectedPoi;
public CustomInfoWindow(MapView mapView) {
super(R.layout.bonuspack_bubble, mapView);
Button btn = (Button)(mView.findViewById(R.id.bubble_moreinfo));
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (selectedPoi.mUrl != null){
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(selectedPoi.mUrl));
view.getContext().startActivity(myIntent);
} else {
Toast.makeText(view.getContext(), "Button clicked", Toast.LENGTH_LONG).show();
}
}
});
}
@Override public void onOpen(Object item){
super.onOpen(item);
ExtendedOverlayItem eItem = (ExtendedOverlayItem)item;
selectedPoi = (POI)eItem.getRelatedObject();
mView.findViewById(R.id.bubble_moreinfo).setVisibility(View.VISIBLE);

//8. put thumbnail image in bubble, fetching the thumbnail in background:
if (selectedPoi.mThumbnailPath != null){
ImageView imageView = (ImageView)mView.findViewById(R.id.bubble_image);
selectedPoi.fetchThumbnailOnThread(imageView);
}
}
}

}

0 comments on commit fbd61c4

Please # to comment.