将XML解析为更高效的地图代码?

时间:2015-01-04 06:26:55

标签: android xml google-maps marker polyline

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

你应该推荐什么?

1 个答案:

答案 0 :(得分:0)

由于您通过标记表示通过折线和公交车站表示的固定路线,我建议将它们存储在Android SDK中内置的SQLite数据库的表格中。每当用户安装您的应用程序时,无论他是在线还是离线,这些数据都将始终存在。当用户在线但可以再次缓存它们时,可以实现位置监听器等运行时功能,从一个地方到另一个地方查找路径。由于解析XML是一项昂贵的操作,并且用户每次都必须连接到互联网,因此存储固定路径的路径数据是一个不错的选择。

请按照thisthis link了解有关在SQLite DB中存储lat lang的更多信息。

希望这会有所帮助!!!

相关问题