package org.osmdroid.samplefragments.data;
import org.osmdroid.OsmApplication;
import org.osmdroid.R;
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.events.MapListener;
import org.osmdroid.events.ScrollEvent;
import org.osmdroid.events.ZoomEvent;
import org.osmdroid.samplefragments.BaseSampleFragment;
import org.osmdroid.samplefragments.models.MyMapItem;
import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase;
import org.osmdroid.tileprovider.tilesource.XYTileSource;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.PathOverlay;
import org.osmdroid.views.overlay.infowindow.BasicInfoWindow;
import org.osmdroid.views.overlay.Marker;
import org.osmdroid.views.overlay.Polygon;
import org.osmdroid.views.overlay.Polyline;
import org.osmdroid.util.BoundingBox;
import org.osmdroid.util.GeoPoint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* An example using osmbonuspacks polyline class for a simple box on around centra park, nyc
* @author Marc Kurtz
*
*/
public class SampleOsmPath extends BaseSampleFragment implements MapListener {
public static final String TITLE = "OsmPath drawing";
private BoundingBox sCentralParkBoundingBox;
private Paint sPaint;
public SampleOsmPath() {
sCentralParkBoundingBox = new BoundingBox(40.796788, -73.949232, 40.768094, -73.981762);
sPaint = new Paint();
sPaint.setColor(Color.argb(175, 255, 0, 0));
sPaint.setStyle(Style.FILL);
}
@Override
public String getSampleTitle() {
return TITLE;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
mMapView.getController().setZoom(13);
mMapView.getController().setCenter(sCentralParkBoundingBox.getCenter());
super.onActivityCreated(savedInstanceState);
}
@Override
protected void addOverlays() {
super.addOverlays();
//we override this to force zoom to 22, even though mapnik dooesn't do that deep
OnlineTileSourceBase mapnik = new XYTileSource("Mapnik",
0, 22, 256, ".png", new String[] {
"http://a.tile.openstreetmap.org/",
"http://b.tile.openstreetmap.org/",
"http://c.tile.openstreetmap.org/" });
mMapView.getTileProvider().setTileSource(mapnik);
//mOsmPathOverlay = new OsmPathOverlay(context);
//mMapView.getOverlayManager().add(mOsmPathOverlay);
Polyline line = new Polyline();
line.setTitle("Central Park, NYC");
line.setSubDescription(Polyline.class.getCanonicalName());
line.setWidth(20f);
List<GeoPoint> pts = new ArrayList<>();
//here, we create a polygon, note that you need 5 points in order to make a closed polygon (rectangle)
pts.add(new GeoPoint(40.796788, -73.949232));
pts.add(new GeoPoint(40.796788, -73.981762));
pts.add(new GeoPoint(40.768094, -73.981762));
pts.add(new GeoPoint(40.768094, -73.949232));
pts.add(new GeoPoint(40.796788, -73.949232));
line.setPoints(pts);
line.setGeodesic(true);
line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, mMapView));
//Note, the info window will not show if you set the onclick listener
//line can also attach click listeners to the line
/*
line.setOnClickListener(new Polyline.OnClickListener() {
@Override
public boolean onClick(Polyline polyline, MapView mapView, GeoPoint eventPos) {
Toast.makeText(context, "Hello world!", Toast.LENGTH_LONG).show();
return false;
}
});*/
mMapView.getOverlayManager().add(line);
mMapView.setMaxZoomLevel(22);
Marker marker = new Marker(mMapView);
marker.setDraggable(false);
marker.setTitle("Central Park");
marker.setPosition(new GeoPoint(((40.796788-40.768094)/2)+40.768094,
((-73.949232- -73.981762)/2) + -73.981762));
marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
marker.setIcon(getResources().getDrawable(R.drawable.sfgpuci));
marker.setTitle("Start point");
marker.setDraggable(true);
mMapView.getOverlays().add(marker);
//here, we create a polygon using polygon class, note that you need 4 points in order to make a rectangle
Polygon polygon = new Polygon();
polygon.setTitle("This is a polygon");
polygon.setSubDescription(Polygon.class.getCanonicalName());
polygon.setFillColor(Color.RED);
polygon.setVisible(true);
polygon.setStrokeColor(Color.BLACK);
polygon.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, mMapView));
pts = new ArrayList<>();
pts.add(new GeoPoint(40.886788, -73.959232));
pts.add(new GeoPoint(40.886788, -73.971762));
pts.add(new GeoPoint(40.878094, -73.971762));
pts.add(new GeoPoint(40.878094, -73.959232));
polygon.setPoints(pts);
mMapView.getOverlays().add(polygon);
Marker m = new Marker(mMapView);
m.setPosition(new GeoPoint(51.7875, 6.135278));
m.setImage(getResources().getDrawable(R.drawable.icon));
line = new Polyline();
line.setTitle("TEST");
line.setSubDescription(Polyline.class.getCanonicalName());
line.setWidth(20f);
pts = new ArrayList<>();
//here, we create a polygon, note that you need 5 points in order to make a closed polygon (rectangle)
pts.add(new GeoPoint(51.7875, 6.135278));
pts.add(new GeoPoint(51.7875, 6.135288));
pts.add(new GeoPoint(51.7874, 6.135288));
pts.add(new GeoPoint(51.7874, 6.135288));
pts.add(new GeoPoint(51.7875, 6.135278));
line.setPoints(pts);
line.setGeodesic(true);
line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, mMapView));
mMapView.getOverlayManager().add(m);
mMapView.getOverlayManager().add(line);
List<MyMapItem> list = new ArrayList<>();
list.add(new MyMapItem("title","description", new GeoPoint(51.7875, 6.135278)));
ItemizedIconOverlay<MyMapItem> layer = new ItemizedIconOverlay<MyMapItem>(list, getResources().getDrawable(R.drawable.shgpuci), new ItemizedIconOverlay.OnItemGestureListener<MyMapItem>() {
@Override
public boolean onItemSingleTapUp(int index, MyMapItem item) {
return false;
}
@Override
public boolean onItemLongPress(int index, MyMapItem item) {
return false;
}
}, getActivity());
PathOverlay path = new PathOverlay(Color.RED, 200f);
List<IGeoPoint> pathpoints = new ArrayList<>();
pathpoints.add(new GeoPoint(50.7865, 6.135278));
pathpoints.add(new GeoPoint(50.7865, 6.135288));
pathpoints.add(new GeoPoint(51.7864, 6.235288));
pathpoints.add(new GeoPoint(51.7864, 6.235288));
pathpoints.add(new GeoPoint(51.7865, 6.235278));
path.addPoints(pathpoints);
mMapView.getOverlayManager().add(path);
mMapView.getOverlayManager().add(layer);
mMapView.setMapListener(this);
}
@Override
public boolean onScroll(ScrollEvent event) {
return false;
}
@Override
public boolean onZoom(final ZoomEvent event) {
Activity act=getActivity();
if (act!=null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Log.i("Zoomer", "zoom event triggered " + event.getZoomLevel());
//Toast.makeText(getActivity(), "Zoom is " + event.getZoomLevel(), Toast.LENGTH_SHORT).show();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
return true;
}
@Override
public void runTestProcedures(){
final GeoPoint geoPoint = new GeoPoint(40.886788, -73.959232);
while (mMapView.getZoomLevel() < mMapView.getMaxZoomLevel()){
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mMapView.getController().animateTo(geoPoint);
mMapView.getController().zoomIn();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
final GeoPoint geoPoint2 = new GeoPoint(40.796788, -73.949232);
while (mMapView.getZoomLevel() < mMapView.getMaxZoomLevel()){
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mMapView.getController().animateTo(geoPoint2);
mMapView.getController().zoomIn();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}