어떻게 두 POI 사이의 mapview에서 경로를 그릴 수 있습니까?두 개의 POI-S가있는 Mapview에 안드로이드 그리기 경로
답변
이 코드를 사용하십시오. UR의 요구 사항에 따라 코드를 수정
MapDirection.java :
public class MapDirection extends MapActivity{
MapView mapview;
MapRouteOverlay mapoverlay;
Context _context;
List<Overlay> maplistoverlay;
Drawable drawable,drawable2;
MapOverlay mapoverlay2,mapoverlay3;
GeoPoint srcpoint,destpoint;
Overlay overlayitem;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.map_direction);
RegisterActivities.registerActivity(this);
mapview=(MapView)this.findViewById(R.id.mapview);
callMap();
}
private void callMap() {
srcpoint=new GeoPoint((int)(Data.src_lat_date*1E6),(int)(Data.src_long_data*1E6));
maplistoverlay=mapview.getOverlays();
drawable=this.getResources().getDrawable(R.drawable.green_a);
mapoverlay2=new MapOverlay(drawable);
OverlayItem overlayitem = new OverlayItem(srcpoint, "", "");
mapoverlay2.addOverlay(overlayitem);
maplistoverlay.add(mapoverlay2);
destpoint=new GeoPoint((int)(Data.dest_lat_data*1E6),(int)(Data.dest_long_data*1E6));
drawable2=this.getResources().getDrawable(R.drawable.green_b);
mapoverlay3=new MapOverlay(drawable2);
OverlayItem overlayitem3 = new OverlayItem(destpoint, "", "");
mapoverlay3.addOverlay(overlayitem3);
maplistoverlay.add(mapoverlay3);
double dest_lat = Data.dest_lat_data;
double dest_long = Data.dest_long_data;
GeoPoint srcGeoPoint = new GeoPoint((int) (Data.src_lat_date* 1E6),
(int) (Data.src_long_data * 1E6));
GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
(int) (dest_long * 1E6));
DrawPath(srcGeoPoint, destGeoPoint, Color.BLUE, mapview);
mapview.getController().animateTo(srcGeoPoint);
mapview.getController().setZoom(13);
//mapview.setStreetView(true);
mapview.setBuiltInZoomControls(true);
mapview.invalidate();
}
private void DrawPath(GeoPoint src, GeoPoint dest, int color,
MapView mMapView01) {
// connect to map web service
StringBuilder urlString = new StringBuilder();
urlString.append("http://maps.google.com/maps?f=d&hl=en");
urlString.append("&saddr=");//from
urlString.append(Double.toString((double)src.getLatitudeE6()/1.0E6));
urlString.append(",");
urlString.append(Double.toString((double)src.getLongitudeE6()/1.0E6));
urlString.append("&daddr=");//to
urlString.append(Double.toString((double)dest.getLatitudeE6()/1.0E6));
urlString.append(",");
urlString.append(Double.toString((double)dest.getLongitudeE6()/1.0E6));
urlString.append("&ie=UTF8&0&om=0&output=kml");
Log.d("xxx","URL="+urlString.toString());
//System.out.println(urlString);
// get the kml (XML) doc. And parse it to get the coordinates(direction route).
Document doc = null;
HttpURLConnection urlConnection= null;
URL url = null;
try
{
url = new URL(urlString.toString());
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.connect();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConnection.getInputStream());
if(doc.getElementsByTagName("GeometryCollection").getLength()>0)
{
//String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName();
String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getFirstChild().getNodeValue() ;
Log.d("xxx","path="+ path);
String [] pairs = path.split(" ");
String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude lngLat[1]=latitude lngLat[2]=height
// src
GeoPoint startGP = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6));
//mMapView01.getOverlays().add(overlayitem);
GeoPoint gp1;
GeoPoint gp2 = startGP;
for(int i=1;i<pairs.length;i++) // the last one would be crash
{
lngLat = pairs[i].split(",");
gp1 = gp2;
// watch out! For GeoPoint, first:latitude, second:longitude
gp2 = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6));
mMapView01.getOverlays().add(new MapRouteOverlay(gp1,gp2,2,color));
Log.d("xxx","pair:" + pairs[i]);
}
//mMapView01.getOverlays().add(new MapRouteOverlay(dest,dest, 3)); // use the default color
}
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
MapRouteOverlay.java :
public class MapRouteOverlay extends Overlay {
private GeoPoint gp1;
private GeoPoint gp2;
private int mode=0;
private int defaultColor;
public MapRouteOverlay(GeoPoint gp1,GeoPoint gp2,int mode) // GeoPoint is a int. (6E)
{
this.gp1 = gp1;
this.gp2 = gp2;
this.mode = mode;
defaultColor = 999; // no defaultColor
}
public MapRouteOverlay(GeoPoint gp1,GeoPoint gp2,int mode, int defaultColor)
{
this.gp1 = gp1;
this.gp2 = gp2;
this.mode = mode;
this.defaultColor = defaultColor;
}
public int getMode()
{
return mode;
}
public boolean draw
(Canvas canvas, MapView mapView, boolean shadow, long when)
{
Projection projection = mapView.getProjection();
if (shadow == false)
{
Paint paint = new Paint();
paint.setAntiAlias(true);
Point point = new Point();
projection.toPixels(gp1, point);
if(mode==2)
{
if(defaultColor==999)
paint.setColor(Color.RED);
else
paint.setColor(defaultColor);
Point point2 = new Point();
projection.toPixels(gp2, point2);
paint.setStrokeWidth(5);
paint.setAlpha(120);
canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
}
}
return super.draw(canvas, mapView, shadow, when);
}
}
MapOverlay.java :
public class MapOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MapOverlay(Drawable _defaultMarker) {
super(boundCenterBottom(_defaultMarker));
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
public int size() {
return mOverlays.size();
}
}
, 내가 얻을 : 가 android.app.IntentReceiverLeaked : 활동 dk.lector.ao.mobile.shop.map.EmbeddedMapViewActivity 원래 등록 된 IntentReceiver com.google.android[email protected]4139a3b8를 유출했다 이리. unregisterReceiver()에 대한 호출이 누락 되었습니까? 이 모든 사항이 적합 할 수 있습니까? –
독일어로 완성 된 "der wahnsinn"))) thx a lot – cV2
안녕하세요, 'R.drawable.green_a' 및'R.drawable.green_b'은 무엇입니까? – pawel
- 1. 안드로이드 - MapView에서 오버레이로 경로 그리기
- 2. 두 지점 사이의 경로 그리기
- 3. 안드로이드 MapView에 이미지 추가
- 4. Google 정적지도에서 두 도시 간의 경로 그리기
- 5. 지도 키트의 두 점 그리기 경로
- 6. 9 개의 패치를 캔버스에 그리기 (안드로이드)
- 7. 안드로이드 : 두 개의 활동, 하나 개의 탭은
- 8. 두 개의 안드로이드 프로젝트를 병합
- 9. Google 정적지도에 경로 그리기
- 10. ImageView에서 안드로이드 그리기 경계
- 11. 안드로이드 확장 목록보기를 mapview에 추가하는 방법 ..?
- 12. 장고를 보여주는 두 개의 파이썬 경로
- 13. 안드로이드 액티비티로 그리기
- 14. 안드로이드 그리기 시간
- 15. 안드로이드 - 사각형 그리기
- 16. 두 개의 안드로이드 프로젝트를 결합하는 방법
- 17. 안드로이드 단일 표면에 두 개의 표면보기를 추가하십시오.
- 18. 두 개의 안드로이드 에뮬레이터 간의 소켓 프로그래밍
- 19. 두 개의 안드로이드 전화 사이의 거리
- 20. C# 그래픽 경로 그리기 문제
- 21. iPhone에서 CAKeyFrameAnimation을 사용하여 경로 그리기
- 22. 장소 표시 사이의 경로 그리기
- 23. 2 개의 평행선 그리기
- 24. android MapView에 GPolyline 오버레이
- 25. Blackberry (Java) - 두 개의 다른 글꼴로 텍스트 그리기
- 26. 충돌이 필요하고 다른 동작을해야하는 두 개의 객체 그리기
- 27. 안드로이드 - ImageView를 통해 그림 그리기
- 28. 안드로이드 Andengine 원형 경로
- 29. 화면에 수백만 개의 세그먼트 그리기
- 30. Google지도에 여러 개의 원 그리기
@pawel, 그들은 당신의 핀은 지도에 내가 생각하기에, 당신은 png 이미지 파일을 사용할 수 있습니다. 이를 사용하는 경우 – vtokmak