Drawing route between coordinates in Google map - android

Can anyone show me the simple method to draw a line between coordinates in the Google map?
I found some results in Google, but I am looking for something which is simple.

use this simple code...may be work in your application
public class GPSLine extends MapActivity {
private List<Overlay> mapOverlays;
private Projection projection;
MapView mapView;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setClickable(true);
mapOverlays = mapView.getOverlays();
projection = mapView.getProjection();
mapOverlays.add(new MyOverlay(null));
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
class MyOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MyOverlay(Drawable defaultMarker) {
super(defaultMarker);
// TODO Auto-generated constructor stub
}
#Override
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(2);
GeoPoint gP1 = new GeoPoint(19240000,-99120000);
GeoPoint gP2 = new GeoPoint(37423157, -122085008);
Point p1 = new Point();
Point p2 = new Point();
Path path = new Path();
projection.toPixels(gP1, p1);
projection.toPixels(gP2, p2);
path.moveTo(p2.x, p2.y);
path.lineTo(p1.x,p1.y);
canvas.drawPath(path, mPaint);
}
#Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
#Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
}
}

Related

GoogleMaps v2 - add Overlay to Activity or FragmentActivity

Tell me please, I have a lot of hours can not understand.
I have a map. I want to paint it your way.
The problem is that all the examples mapView, and I have a fragment.
I do not understand how can I draw a route?
How to create Activity?
So
public class TravelMapActivity extends Activity implements OnClickListener {
private GoogleMap map;
private ToggleButton travelOnOffButton;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.travel_map_activity);
init();
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
travelOnOffButton = (ToggleButton) findViewById(R.id.travel_start_stop);
travelOnOffButton.setOnClickListener(this);
}
or so?
public class TravelMapActivity extends FragmentActivity implements OnClickListener {
private GoogleMap map;
private ToggleButton travelOnOffButton;
private SupportMapFragment mMapFragment;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMapFragment = new SupportMapFragment();
try {
MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
// TODO handle error
e.printStackTrace();
}
getSupportFragmentManager().beginTransaction().add(android.R.id.content, mMapFragment).commit();
travelOnOffButton = (ToggleButton) findViewById(R.id.travel_start_stop);
travelOnOffButton.setOnClickListener(this);
}
In this case it has been online setOnClickListener - throws NullPointerException.
And as an example.
class RouteOverlay extends Overlay {
private Projection projection;
public RouteOverlay() {
}
public void draw(Canvas canvas, MapView mapv, boolean shadow) {
super.draw(canvas, mapv, shadow);
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(2);
GeoPoint gP1 = new GeoPoint(19240000, -99120000);
GeoPoint gP2 = new GeoPoint(37423157, -122085008);
Point p1 = new Point();
Point p2 = new Point();
Path path = new Path();
projection.toPixels(gP1, p1);
projection.toPixels(gP2, p2);
path.moveTo(p2.x, p2.y);
path.lineTo(p1.x, p1.y);
canvas.drawPath(path, mPaint);
}
}
To draw a route on Maps V2, you add a Polyline to the GoogleMap:
PolylineOptions line=
new PolylineOptions().add(new LatLng(40.70686417491799,
-74.01572942733765),
new LatLng(40.76866299974387,
-73.98268461227417),
new LatLng(40.765136435316755,
-73.97989511489868),
new LatLng(40.748963847316034,
-73.96807193756104))
.width(5).color(Color.RED);
map.addPolyline(line);
(code taken from this sample project)

Draw line between several GPS coordinates

How can I draw lines between different GPS coordinates to connect them all together?
I should mention that this is not a route. I am using satellite view and the line can go over a house for example.
If its just two coordinates than how about drawing a simple canvas over the map and drawing a straight line between those coordinates, so it would be a simple line and it could be any drawn anywhere , even over a house.
Below Sample Code was taken
Drawing a line/path on Google Maps
/** Called when the activity is first created. */
private List<Overlay> mapOverlays;
private Projection projection;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
linearLayout = (LinearLayout) findViewById(R.id.zoomview);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
projection = mapView.getProjection();
mapOverlays.add(new MyOverlay());
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
class MyOverlay extends Overlay{
public MyOverlay(){
}
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(2);
GeoPoint gP1 = new GeoPoint(19240000,-99120000);
GeoPoint gP2 = new GeoPoint(37423157, -122085008);
Point p1 = new Point();
Point p2 = new Point();
Path path = new Path();
projection.toPixels(gP1, p1);
projection.toPixels(gP2, p2);
path.moveTo(p2.x, p2.y);
path.lineTo(p1.x,p1.y);
canvas.drawPath(path, mPaint);
}

How to plot markers alone between two places? - android

I have plotted the line between two points(locations), but i dont know how to plot the markers on those points. Can anyone give me some ideas.....
public void drawPath(MapView mv, Canvas canvas)
{
int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
for (int i = 0; i < mPoints.size(); i++)
{
Point point = new Point();
mv.getProjection().toPixels(mPoints.get(i), point);
x2 = point.x;
y2 = point.y;
if (i > 0)
{
canvas.drawLine(x1, y1, x2, y2, paint);
}
x1 = x2;
y1 = y2;
}
}
You can add overlays to the starting and ending point of your line.
Here's example.. Hope this will help you..
RouteActivity.java
public class RouteActivity extends MapActivity
{
private List<Overlay> mapOverlays;
private Projection projection;
MapView mapView;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Drawable drawable = this.getResources().getDrawable(R.drawable.pin); // Marker that you want to display..
mapOverlays = mapView.getOverlays();
List<Overlay> mapOverlays = mapView.getOverlays();
MyOverlay itemizedoverlay = new MyOverlay(drawable,this);
GeoPoint point = new GeoPoint(19240000,-99120000); // overlay 1
OverlayItem overlayitem = new OverlayItem(point, null, null);
GeoPoint point1 = new GeoPoint(44046665, 72559236); // overlay 2
OverlayItem overlayitem1 = new OverlayItem(point1, null, null);
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.addOverlay(overlayitem1);
mapOverlays.add(itemizedoverlay);
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
}
MyOverlay.java
public class MyOverlay extends ItemizedOverlay
{
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
Context mContext;
public MyOverlay(Drawable defaultMarker)
{
super(boundCenterBottom(defaultMarker));
}
public MyOverlay(Drawable defaultMarker, Context context) {
// super(defaultMarker);
super(boundCenterBottom(defaultMarker));
mContext = context;
}
public void draw(Canvas canvas, MapView mapv, boolean shadow)
{
super.draw(canvas, mapv, shadow);
// line drawing code goes here.....
canvas.drawPath(path, mPaint);
}
#Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
#Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
}
Thanks...

Line is not coming according to geopoint

Through my main java file I am calling overlay and than I am passing the geopoint, and the lines is coming so wierd not even close. Starts from top corner and goes to the middle of the screen.
java1:
public class TourmapActivity extends MapActivity {
private MapView mapView;
private MyOverlay myOverlay;
private List<Overlay> mapOverlays;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
myOverlay = new MyOverlay(mapView);
mapOverlays.add(myOverlay);
}
#Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
java2:
public class MyOverlay extends Overlay {
private Point point1;
private Point point2;
private Projection projection;
public MyOverlay(MapView mapView){
projection = mapView.getProjection();
}
public void draw(Canvas canvas, MapView mapView, boolean shadow){
super.draw(canvas, mapView, shadow);
Paint paint = new Paint();
paint.setDither(true);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(2);
point1 = new Point();
point2 = new Point();
Path path = new Path();
//43.26082327999097, -79.92047309875488 jhe
float longitude = 43.26082327999097f; // first point
float latitude = -79.92047309875488f;
//43.26347189172956, -79.91776943206787 student center
float longitude_1 = 43.26347189172956f; // second point
float latitude_1 = -79.91776943206787f;
GeoPoint geoPoint1 = new GeoPoint((int)(longitude * 1E6), (int)(latitude * 1E6));
GeoPoint geoPoint2 = new GeoPoint((int)(longitude_1 * 1E6), (int)(latitude_1* 1E6));
projection.toPixels(geoPoint1, point1);
projection.toPixels(geoPoint2, point2);
path.lineTo(point1.x, point1.y);
path.lineTo(point2.x, point2.y);
canvas.drawPath(path, paint);
}
}
You should look at the documentation for Path, specifically for lineTo and moveTo.
So you want to change
path.lineTo(point1.x, point1.y);
to
path.moveTo(point1.x, point1.y);

Connect points on map with lines

I have three gps points in android app. How to set on map connect first and second with red and second and third with blue line ? How to connect any two points on map, draw line between them?
Here's a minimal implementation (2 points only, no markers) using a map overlay and mapView.getProjection() fro you to expand upon:
public class HelloGoogleMaps extends MapActivity {
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapController mMapController;
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mMapController = mapView.getController();
mMapController.setZoom(18);
// Two points in Mexico about 1km apart
GeoPoint point1 = new GeoPoint(19240000,-99120000);
GeoPoint point2 = new GeoPoint(19241000,-99121000);
mMapController.setCenter(point2);
// Pass the geopoints to the overlay class
MapOverlay mapOvlay = new MapOverlay(point1, point2);
mapView.getOverlays().add(mapOvlay);
}
public class MapOverlay extends com.google.android.maps.Overlay {
private GeoPoint mGpt1;
private GeoPoint mGpt2;
protected MapOverlay(GeoPoint gp1, GeoPoint gp2 ) {
mGpt1 = gp1;
mGpt2 = gp2;
}
#Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
long when) {
super.draw(canvas, mapView, shadow);
Paint paint;
paint = new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
Point pt1 = new Point();
Point pt2 = new Point();
Projection projection = mapView.getProjection();
projection.toPixels(mGpt1, pt1);
projection.toPixels(mGpt2, pt2);
canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint);
return true;
}
}
#Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
.

Categories

Resources