2015-01-04 3 views
0

확인. 나는 자바 또는 안드로이드 프로그래머가 아니지만 버스 정류장을 보여주는 버스 경로가 특정 색상과 마커를 사용하여 중복되는지도 앱용 코드를 작성합니다. 코드는 작동하지만 버스 길을 따라 가려면 더 많은 포인트가 필요하며 주로 마커와 폴리 라인에 대한 LatLng 값이 다른 동일한 코드가 필요합니다. 나는 XML을 배열과 루프로 파싱하는 것으로 생각한다. 그러나 : 1) 많은 튜토리얼을 따른 후에 내가 원하는 방식으로 어떻게해야하는지 모르겠다. 2) 필자가 원하는대로 외부 XML을 사용하지 않기를 바란다. 너무 많은 인터넷 deppendant을 할 수 있습니다 (전용 캐시에 대한지도, 또는 업데이트 노선의 XML의)XML을 구문 분석하여보다 효율적인 코드를 작성 하시겠습니까?

는 XML :

<?xml version="1.0" encoding="utf-8"?> 
<iLPbus> 
<iLPbus_Route conuter="1"> 
    <iLPbus_Route_name>Inca Llojeta->PUC</iLPbus_Route_name> 
    <iLPbus_Route_icon>R.drawable.ic_illojeta</iLPbus_Route_icon> 
    <iLPbus_Route_Polyline> 
     <poly_color>0xff81488e</poly_color> 
     <point counter="1"> 
      <lat>-16.529183</lat> 
      <lng>-68.143298</lng> 
     </point>  
     <point counter="2"> 
      <lat>-16.534203</lat> 
      <lng>-68.14593</lng> 
     </point> 
     <point counter="3"> 
      <lat>-16.532493</lat> 
      <lng>-68.142459</lng> 
     </point> 
     <point counter="4"> 
      <lat>-16.533225</lat> 
      <lng>-68.140485</lng> 
     </point> 
     <point counter="5"> 
      <lat>-16.533513</lat> 
      <lng>-68.137939</lng> 
     </point> 
     <point counter="6"> 
      <lat>-16.534187</lat> 
      <lng>-68.134404</lng> 
     </point> 
     <point counter="7"> 
      <lat>-16.533058</lat> 
      <lng>-68.131521</lng> 
     </point> 
    </iLPbus_Route_Polyline> 
    <iLPbus_BusStops counter="1"> 
     <lat>-16.529183</lat> 
     <lng>-68.143298</lng> 
     <name>R. Tupac Katari</name> 
    </iLPbus_BusStops> 
    <iLPbus_BusStops counter="2"> 
     <cords> 
      <lat>13.72331</lat> 
      <lng>100.78453999999999</lng> 
     </cords> 
     <name>Raul Salmón</name> 
    </iLPbus_BusStops> 
</iLPbus_Ruta> 
</iLPbus> 

자바가 : (이전 구현 파서)

import android.app.Activity; 
import android.os.Bundle; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.model.PolylineOptions; 

public class MapaMoradoaPUCActivity extends Activity { 

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mapa_morado_apuc); 
    Bundle extras = getIntent().getExtras(); 
    setUpMapIfNeeded(extras); 
} 

protected void onResume(Object extras) { 
    super.onResume(); 
    setUpMapIfNeeded(extras); 
} 

private void setUpMap(Object extras) { 
    // RUTA MORADA Inca Llojeta hacia PUC 
    LatLng RM01aPUC = new LatLng(-16.529183, -68.143298); 
    LatLng RM02aPUC = new LatLng(-16.534203, -68.14593); 
    LatLng RM03aPUC = new LatLng(-16.532493, -68.142459); 
    LatLng RM04aPUC = new LatLng(-16.533225, -68.140485); 
    LatLng RM05aPUC = new LatLng(-16.533513, -68.137939); 
    LatLng RM06aPUC = new LatLng(-16.534187, -68.134404); 
    LatLng RM07aPUC = new LatLng(-16.533058, -68.131521); 
    LatLng RM08aPUC = new LatLng(-16.529911, -68.128731); 
    LatLng RM09aPUC = new LatLng(-16.531228, -68.126199); 
    LatLng RM10aPUC = new LatLng(-16.526527, -68.126339); 
    LatLng RM11aPUC = new LatLng(-16.525992, -68.123598); 
    LatLng RM12aPUC = new LatLng(-16.523153, -68.1218); 
    LatLng RM13aPUC = new LatLng(-16.520057, -68.125395); 
    LatLng RM14aPUC = new LatLng(-16.517146, -68.121607); 
    LatLng RM15aPUC = new LatLng(-16.514277, -68.11444); 
    LatLng RM16aPUC = new LatLng(-16.503846, -68.12856); 
    LatLng RM17aPUC = new LatLng(-16.500287, -68.132014); 
    LatLng RM18aPUC = new LatLng(-16.500719, -68.130083); 

    mMap.setMyLocationEnabled(true); 

    if (extras != null) { 
     int number = getIntent().getExtras().getInt("keyMap"); 
     if (number == 1) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM01aPUC, 16)); 
     } 
     if (number == 2) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM02aPUC, 16)); 
     } 
     if (number == 3) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM03aPUC, 16)); 
     } 
     if (number == 4) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM04aPUC, 16)); 
     } 
     if (number == 5) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM05aPUC, 16)); 
     } 
     if (number == 6) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM06aPUC, 16)); 
     } 
     if (number == 7) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM07aPUC, 16)); 
     } 
     if (number == 8) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM08aPUC, 16)); 
     } 
     if (number == 9) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM09aPUC, 16)); 
     } 
     if (number == 10) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM10aPUC, 16)); 
     } 
     if (number == 11) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM11aPUC, 16)); 
     } 
     if (number == 12) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM12aPUC, 16)); 
     } 
     if (number == 13) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM13aPUC, 16)); 
     } 
     if (number == 14) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM14aPUC, 16)); 
     } 
     if (number == 15) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM15aPUC, 16)); 
     } 
     if (number == 16) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM16aPUC, 16)); 
     } 
     if (number == 17) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM17aPUC, 16)); 
     } 
     if (number == 18) { 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(RM18aPUC, 16)); 
     } 
    } 

    // Trazar Rutas 

    // RUTA MORADA Inca Llojeta hacia PUC 
    mMap.addPolyline(new PolylineOptions().geodesic(true).color(0xff81488e).width(5) 
      .add(RM01aPUC).add(RM02aPUC).add(RM03aPUC).add(RM04aPUC) 
      .add(RM05aPUC).add(RM06aPUC).add(RM07aPUC).add(RM08aPUC) 
      .add(RM09aPUC).add(RM10aPUC).add(RM11aPUC).add(RM12aPUC) 
      .add(RM13aPUC).add(RM14aPUC).add(RM15aPUC).add(RM16aPUC) 
      .add(RM17aPUC).add(RM18aPUC)); 

    // Añadir marcadores 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM01aPUC).snippet("Inka Llojeta->PUC") 
      .title("R. Tupac Katari")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM02aPUC).snippet("Inka Llojeta->PUC") 
      .title("Raul Salmón")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM03aPUC).snippet("Inka Llojeta->PUC") 
      .title("UE José Santos Vargas")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM04aPUC).snippet("Inka Llojeta->PUC") 
      .title("Final Buenos Aires")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM05aPUC).snippet("Inka Llojeta->PUC") 
      .title("Centro de Salud El Vergel")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM06aPUC).snippet("Inka Llojeta->PUC") 
      .title("Vergelito")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM07aPUC).snippet("Inka Llojeta->PUC") 
      .title("Tomillo")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM08aPUC).snippet("Inka Llojeta->PUC") 
      .title("Las Petunias")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM09aPUC).snippet("Inka Llojeta->PUC") 
      .title("Las Acacias")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM10aPUC).snippet("Inka Llojeta->PUC") 
      .title("H. Nuestra Sra. de La Paz")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM11aPUC).snippet("Inka Llojeta->PUC") 
      .title("UE Boliviano Japones")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM12aPUC).snippet("Inka Llojeta->PUC") 
      .title("R. Cementerio Jardín")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM13aPUC).snippet("Inka Llojeta->PUC") 
      .title("Emaverde")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM14aPUC).snippet("Inka Llojeta->PUC") 
      .title("Puentes Trillizos")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM15aPUC).snippet("Inka Llojeta->PUC") 
      .title("4to Centenario")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM16aPUC).snippet("Inka Llojeta->PUC").title("UMSA")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM17aPUC).snippet("Inka Llojeta->PUC") 
      .title("Plaza Camacho")); 
    mMap.addMarker(new MarkerOptions() 
      .icon(BitmapDescriptorFactory 
      .fromResource(R.drawable.ic_illojeta)) 
      .position(RM18aPUC).snippet("Inka Llojeta->PUC") 
      .title("Simón Bolivar")); 
} 

private void setUpMapIfNeeded(Object extras) { 
    // Do a null check to confirm that we have not already instantiated the 
    // map. 
    if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.paradasmoradas)).getMap(); 
     // Check if we were successful in obtaining the map. 
     if (mMap != null) { 
      setUpMap(extras); 
     } 
    } 
} 
} 

당신은 무엇을 추천해야합니까 ??

답변

0

폴리선과 버스 정류장이 마커를 통해 표현 된 고정 경로가 있으므로 안드로이드 SDK에 내장 된 SQLite 데이터베이스의 테이블에 저장하는 것이 좋습니다. 사용자가 응용 프로그램을 설치할 때마다이 데이터는 온라인이든 오프라인이든간에 항상 유지됩니다. 위치 수신기와 같은 런타임 기능은 사용자가 온라인 상태 일 때 경로를 찾을 수 있지만 다시 캐시 할 수 있습니다. XML 구문 분석은 값 비싼 작업이므로 사용자는 매번 인터넷에 연결해야하므로 고정 경로에 대한 경로 데이터를 저장하는 것이 현재로서는 좋은 옵션입니다.

SQLite DB에 저장하는 방법에 대한 자세한 내용은 thisthislink을 따르십시오.

희망이 도움이 될 것입니다!