올해는 머신러닝이다.
android mapview overlay and draw path 본문
출처 : http://blog.naver.com/wind5395?Redirect=Log&logNo=150096686510
mapview위에 mark를 표시하는 방법은 Overlay를 이용한 것이다.
그런데, 안드로이드 상에서 MyLocationOverlay라는 특수한 overlay를 제공해준다. 이름에서 알 수 있듯이 현재 target의 위치를 mapview위에 띄워주는 overlay이다. 자신의 위치를 나타내고, 위치가 갱신이 되면 이동한 경로를 mapview에 그리고, 이동 거리를 계산하는 코드는 다음과 같다.
class MyOverlay extends MyLocationOverlay addresses = gc.getFromLocation(latitude, longitude, 10);
if(addresses.size() > 0) { Address address = addresses.get(0); for(int i = 0 ; i <= address.getMaxAddressLineIndex() ; i++) { if(i > 0) sb.append(" "); sb.append(address.getAddressLine(i)); } } else { sb.append(mContext.getString(R.string.unknown_address)); } ((MapTest)mContext).mMyLocationEditText.setText(sb.toString()); //현재 위치를 주소로 변환하여 text로 찍어준다. } catch (IOException e) { e.printStackTrace(); }
mMyBeforeLocation = mMyCurrentLocation; mMyCurrentLocation = location; if(mMyBeforeLocation != null && mMyCurrentLocation != null && mMyBeforeLocation != mMyCurrentLocation) { mMyPathLocationArray.add(new MyPathLocation(mMyBeforeLocation, mMyCurrentLocation)); //위치가 바뀔때마다 path를 추가해준다.
mMyDistance += mMyCurrentLocation.distanceTo(mMyBeforeLocation); //이동한 거리를 계산한다.
((MapTest)mContext).mMyLocationEditText.setText(String.valueOf(mMyDistance)); } else return;
}
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { //draw함수는 무한 반복 호출되는 callback이다 if(mMyBeforeLocation != null && mMyCurrentLocation != null) { mPath.reset(); //비어있는 path를 만들어 mapview위를 깨끗하게 초기화 한다. canvas.drawPath(mPath, mPaint); updatePath(); //위치가 바뀔때마다 추가해두었던 path 배열을 그리기위한 준비. mPaint.setStyle(Paint.Style.STROKE); canvas.drawPath(mPath, mPaint); } return super.draw(canvas, mapView, shadow, when); }
public void updatePath() { for(int i = 0 ; i < mMyPathLocationArray.size() ; i++) { Point startPoint = new Point(); Point endPoint = new Point(); MyPathLocation temp = mMyPathLocationArray.get(i); mMapView.getProjection().toPixels(new GeoPoint((int)(temp.mMyBeforeLocation.getLatitude()*1E6), (int)(temp.mMyBeforeLocation.getLongitude()*1E6)), startPoint); mMapView.getProjection().toPixels(new GeoPoint((int)(temp.mMyCurrentLocation.getLatitude()*1E6), (int)(temp.mMyCurrentLocation.getLongitude()*1E6)), endPoint);
Path p = new Path(); p.reset(); p.moveTo(startPoint.x, startPoint.y); p.lineTo(endPoint.x, endPoint.y); mPath.addPath(p); } } }
class MyPathLocation |
이 외 자세한 내용은 첨부한 파일을 참고.
'Android > Tip&Tech' 카테고리의 다른 글
listview 최적화하기 (0) | 2011.05.19 |
---|---|
출시 준비를 위한 체크 리스트 (0) | 2011.05.18 |
[펌]안드로이드 구글맵 거리계산, 좌표계산 (0) | 2011.05.18 |
android google map api 참고문서 (0) | 2011.05.17 |
android gallery left,reight move tip (0) | 2011.05.17 |