2015-01-04 29 views
0

好的。我不是一个java或android程序员,但我写了一个地图应用程序的代码,其中显示公交车站的巴士路线使用特定的颜色和标记重叠。该代码有效,但路线将需要更多的点跟随巴士路线,主要是具有不同的标记和折线LatLng值的代码。我认为在解析一些XML到一个数组和一个循环,但是:1)在遵循了很多教程后,我不知道如何以我想要的方式,2)我preffer不使用外部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> 

Java的:(前实现解析器)

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

既然你有固定的路线,虽然通过标记表示的多段线和巴士站代表,我建议将它们存储在Android SDK中内置的SQLite数据库的表中。无论用户何时安装您的应用程序,无论他是在线还是离线,这些数据都会持续存在。运行时功能(如位置侦听器)可以在用户联机时实现从一个位置到另一个位置的路由,但可以再次对其进行缓存。由于解析XML是一项昂贵的操作,用户每次都必须连接到互联网,因此存储固定路径的路由数据是一个很好的选择。

请按照thisthislink了解关于在SQLite数据库中存储经纬度的更多信息。

希望这会帮助!