Kreis in Mapview zeichnen

  • Antworten:4
ChriCo
  • Forum-Beiträge: 24

19.03.2011, 14:55:51 via Website

Hallo zusammen,

ich versuche einen Umkreis um eine gegebene GPS-Adresse auf einer Google Maps Mapview anzeigen zu lassen. Allerdings leider ohne Erfolg. Leider bin ich mit der Google Maps Api noch nicht ganz so vertraut.
Hier ist ein Auschnitt meines Codes:

dest_lat = 48.765083; dest_lon = 11.424694;

Projection projection = mapview.getProjection();

Point pt = new Point();

GeoPoint geo = new GeoPoint((int) (dest_lat *1e6), (int)(dest_lon * 1e6));

projection.toPixels(geo ,pt);

float circleRadius = 20;

Paint innerCirclePaint;

innerCirclePaint = new Paint();
innerCirclePaint.setARGB(255, 255, 255, 255);
innerCirclePaint.setAntiAlias(true);

innerCirclePaint.setStyle(Paint.Style.FILL);

canvas.drawCircle((float)pt.x, (float)pt.y, circleRadius, innerCirclePaint);






Leider bin mit canvas und den mapoverlays nicht sehr vertraut. Kann mir jemand weiterhelfen?

Danke im voraus!

Liebe Grüße

Crico

Antworten
L3322
  • Forum-Beiträge: 467

20.03.2011, 00:11:35 via App

Ja wie "leider ohne Erfolg"?
Wird nichts gezeichnet oder bekommst du nen Force Close oder was?
zu wenig Code & Informationen!

"Hard work beats talent, when talent fails to work hard"

Antworten
ChriCo
  • Forum-Beiträge: 24

20.03.2011, 11:59:39 via Website

Hi, danke für dein Interesse!

Ich bekomme einen Force Close. Es liegt anscheinend irgendwie an der letzen Zeile des Codes.

canvas.drawCircle((float)pt.x, (float)pt.y, circleRadius, innerCirclePaint);

Kommentiere ich die Zeile aus, kommt es zu keinem Force Close mehr (natürlich wird auch da nichts angezeigt).

Ich wollte nicht mehr Code posten, da ja nur der angegebene Code relevant für das anzeigen des Kreises ist. Ich dachte so wäre es einfach übersichtlicher. Natürlich hänge ich gerne mehr Code an.

Es funktioniert leider nicht so, wie ich mir das vorgestellt habe und weiß nicht wo mein Fehler ist.

Danke für die Hilfe!

CriCo
______________________________________________
_______________________________________________
import android.content.Intent;
import android.graphics.Canvas;
import android.content.Context;

import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Paint.Style;

import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Projection;


import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

public class TesterUntenPlusDrei extends MapActivity {

LinearLayout linearLayout;

MapView mapview;
Canvas canvas;

@Override
public void onCreate(Bundle icicle)
{
// Layout (Schriften, Buttons definieren)
super.onCreate(icicle);
setContentView(R.layout.testeruntenplusdrei);

Button APNextMap2 = (Button) findViewById(R.id.APNextButtonTesterEinzeichnen_3);


// Mapview
mapview = (MapView) findViewById(R.id.mapview_testerplus3);
mapview.setBuiltInZoomControls(true);

double dest_lat = 48.765083, dest_lon = 11.424694;

Projection projection = mapview.getProjection();

Point pt = new Point();

GeoPoint geo = new GeoPoint((int) (dest_lat *1e6), (int)(dest_lon * 1e6));

projection.toPixels(geo ,pt);

float circleRadius = 20;

Paint innerCirclePaint;

innerCirclePaint = new Paint();
innerCirclePaint.setARGB(255, 255, 255, 255);
innerCirclePaint.setAntiAlias(true);

innerCirclePaint.setStyle(Paint.Style.FILL);

canvas.drawCircle((float)pt.x, (float)pt.y, circleRadius, innerCirclePaint);



// Button Next
APNextMap2.setOnClickListener(new OnClickListener(){

public void onClick(View v){
Intent explicitIntent = new Intent(TesterUntenPlusDrei.this, null);
startActivity(explicitIntent);
}

});


}



@Override
protected boolean isRouteDisplayed() {
return false;
}
}

Antworten
L3322
  • Forum-Beiträge: 467

20.03.2011, 12:24:01 via App

Wenn du einen Force Close bekommst wäre auch die Logcat ganz hilfreich!
Allerdings glaube ich nicht dass man mit Canvas einfach ohne eine View in die OnCreate Methode zeichnen kann
p.s. Dein Canvas ist null denk ich mal

— geändert am 20.03.2011, 12:24:55

"Hard work beats talent, when talent fails to work hard"

Antworten
ChriCo
  • Forum-Beiträge: 24

20.03.2011, 15:58:48 via Website

Hallo, ich habe das Problem gelöst. Er zeigt jetzt einen Kreis auf der Karte an. Der Radius ist dabei aber fix und unabhängig vom Zoom.

Ich würde sehr gerne den Radius "500 METER" eingeben und diesen dann Zoomunabhängig in der Karte anzeigen lassen. Hat jemand einen Rat, wie das funktionieren kann??

Danke


1package com.nemo.tester.teile;
2
3import android.content.Intent;
4import android.graphics.Canvas;
5import android.graphics.Paint;
6import android.graphics.Point;
7import android.graphics.Paint.Style;
8import android.graphics.RectF;
9import android.location.Location;
10import android.os.Bundle;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.widget.Button;
14import android.widget.LinearLayout;
15
16import com.google.android.maps.GeoPoint;
17import com.google.android.maps.MapActivity;
18import com.google.android.maps.MapController;
19import com.google.android.maps.MapView;
20import com.google.android.maps.MyLocationOverlay;
21import com.google.android.maps.Overlay;
22import com.google.android.maps.Projection;
23import com.google.android.maps.OverlayItem;
24
25public class TesterUntenFuenf extends MapActivity {
26
27 LinearLayout linearLayout;
28
29 private MapView mMapView;
30 private MapController mMapController;
31 private MyLocationOverlay mMyLocationOverlay;
32 private CircleOverlay mMapViewOverlay;
33
34
35 @Override
36 public void onCreate(Bundle icicle)
37 {
38 // Layout (Schriften, Buttons definieren)
39 super.onCreate(icicle);
40 setContentView(R.layout.testeruntenfuenf);
41
42 Button APNextMap2 = (Button) findViewById(R.id.APNextButtonTesterEinzeichnen_5);
43
44
45 initMapView();
46
47
48 mMapViewOverlay = new CircleOverlay();
49 mMapView.getOverlays().add(mMapViewOverlay);
50 mMapView.postInvalidate();
51
52
53
54
55 // Button Next
56 APNextMap2.setOnClickListener(new OnClickListener(){
57
58 public void onClick(View v){
59 Intent explicitIntent = new Intent(TesterUntenFuenf.this, null);
60 startActivity(explicitIntent);
61 }
62
63 });
64
65
66 }
67
68
69
70 @Override
71 protected boolean isRouteDisplayed() {
72 return false;
73 }
74
75 private void initMapView() {
76 mMapView = (MapView) findViewById(R.id.mapview_testerplus5);
77 mMapController = mMapView.getController();
78 final int maxZoomlevel = mMapView.getMaxZoomLevel ();
79 mMapController.setZoom(maxZoomlevel - 4); // zoom
80 mMapView.setBuiltInZoomControls(true);
81 // mMapView.setSatellite(true); // Satellitenbild
82 mMapView .setStreetView(true); // Strassenansicht
83 }
84
85
86
87 public class CircleOverlay extends Overlay {
88
89
90 final private Point mMeinPunkt = new Point () ;
91
92 final RectF mRect = new RectF();
93 final private Paint mPaint = new Paint();
94
95
96 @Override
97 public void draw(Canvas canvas, MapView mapView,boolean shadow) {
98
99 super.draw(canvas, mapView, shadow);
100 double dest_lat = 48.765083, dest_lon = 11.424694;
101 double start_lat = 48.365647, start_lon = 10.889969;
102 GeoPoint geo = new GeoPoint((int) (dest_lat *1e6), (int)(dest_lon * 1e6));
103
104
105 mapView.getProjection().toPixels(geo,mMeinPunkt);
106
107 float circleRadius = 20;
108
109 mRect.set(mMeinPunkt.x - 20, mMeinPunkt.y + 20,mMeinPunkt.x + 20, mMeinPunkt.y - 20);
110 mPaint.setARGB(255, 255, 255, 255);
111 mPaint.setAntiAlias(true);
112 mPaint.setStyle(Style.FILL);
113 canvas.drawOval (mRect, mPaint) ;
114
115 mPaint.setARGB(255, 0, 0, 0);
116 mPaint.setStyle(Style.STROKE);
117
118 canvas.drawCircle(mMeinPunkt.x, mMeinPunkt.y, circleRadius,mPaint);
119
120
121 }}
122
123
124
125 }

Antworten