일단 맵 파싱 소스는
aaa.java
public class aaa extends MapActivity implements LocationListener {
GeoPoint point;
MapView mapView;
MapController mapController ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.location);
mapView = (MapView)findViewById(R.id.map);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapView.setStreetView(true);
// 위치정보 클래스 초기화
final LocationManager locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// GPS현재 위치 수신
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
String best = locationMgr.getBestProvider(criteria, true);
locationMgr.requestLocationUpdates(best, 1000, 0, aaa.this);
Toast.makeText(aaa.this, "위치 정보를 수신중입니다. 잠시만 기다려주세요. ", 5000).show();
BackThread t = new BackThread();
Thread thread = new Thread(t);
thread.start();
}
public void onLocationChanged(Location location) {
GeoPoint newPoint = new GeoPoint((int) (location.getLatitude()* 1E6), (int) (location.getLongitude() * 1E6));
mapController.animateTo(newPoint);
MapView.LayoutParams mapMarkerParams = new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, newPoint, MapView.LayoutParams.TOP_LEFT);
ImageView mapMarker = new ImageView(getApplicationContext());
mapMarker.setImageResource(R.drawable.marker);
mapView.addView(mapMarker, mapMarkerParams);
}
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
class BackThread implements Runnable {
public void run() {
double d_latitude;
double d_longitude;
final List<Overlay> list = mapView.getOverlays();
Drawable marker = getResources().getDrawable(R.drawable.marker);
final MapItemizedOverlay itemizedOverlay = new MapItemizedOverlay(marker);
try
{
URL text = new URL("http://earthquake.usgs.gov/earthquakes/shakemap/rss.xml");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(text.openStream(), "UTF-8");
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
switch(parser.getEventType()){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.START_TAG:
if(parser.getName().equals("geo:long")){
d_longitude = Double.parseDouble(parser.getAttributeValue(16));
d_latitude = Double.parseDouble(parser.getAttributeValue(17));
//lng = Double.parseDouble(parser.getAttributeValue(16));
//lat = Double.parseDouble(parser.getAttributeValue(17));
point = new GeoPoint((int)(d_latitude*1E6), (int)(d_longitude*1E6));
OverlayItem overItem = new OverlayItem(point, "", "");
itemizedOverlay.addOverlay(overItem);
}
break;
}
parser.next();
}
}catch(Throwable t) {
// Toast.makeText(aaa.this, "실패: " + t.toString(), Toast.LENGTH_LONG).show();
}
list.add(itemizedOverlay);
}
}
}
소스는 이렇습니다.
여기서 빨강색 부분에 URL이 위도 경도가 포함된 rss 형태이고 이 소스는
<item>
<title>3.98 - 18.8 miles SE of EUREKA-NV</title>
<description><![CDATA[<img src="http://earthquake.usgs.gov/eqcenter/shakemap/thumbs/shakemap_nn_2011313_354699.jpg" width="100" align="left" hspace="10"/><p>Date: Wed, 09 Nov 2011 06:40:23 UTC<br/>Lat/Lon: 39.2971/-115.746<br/>Depth: 0</p>]]></description>
<link>http://earthquake.usgs.gov/eqcenter/shakemap/nn/shake/2011313_354699/</link>
<pubDate>Wed, 09 Nov 2011 07:24:20 +0000</pubDate>
<geo:lat>39.2971</geo:lat><geo:long>-115.746</geo:long>
<dc:subject>3</dc:subject><eq:seconds>1320820823</eq:seconds>
<eq:depth>0</eq:depth><eq:region>nn</eq:region>
</item>
이런형식입니다.
안드로이드 펍에서 어떤분이 질문하신 소스 이고 이것을 가지고 공부중입니다.
일단 맵은 에물로 돌아가나 마커는 찍히지않습니다.
소스에 어떤부분을 추가,삭제 해야하는지 또는 XML 파일을 어떤식으로 써야하는지 조언부탁드립니다.
제가 초보라 이해를 못한부분이 많아서 자세히 설명해주시면 정말 감사하겠습니다.ㅠ
로그캣 에러도 첨부하였습니다.
아래는 ItemizedOverlay 입니다.
MapItemizedOverlay.java
public class MapItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MapItemizedOverlay(Drawable defaultMarker) {
super(defaultMarker);
boundCenterBottom(defaultMarker);
populate();
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow){
super.draw(canvas, mapView, false);
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay){
mOverlays.add(overlay);
populate();
}
}