3

Я хотел бы узнать, как я могу показать маршрут, содержащийся в файле KML на Google Maps V2?Проложить маршрут из файла KML в Google Map V2

Я могу извлечь значения «координат» в файле KML, но я не знаю, почему мой класс не показывает путь в компонент карты.

Это мой класс:

public class Mappa extends FragmentActivity implements LocationListener { 
    private GoogleMap googleMap; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mappa); 

     // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 

     if(status != ConnectionResult.SUCCESS) { 
      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 
     } 
     else { 

     // Getting reference to the SupportMapFragment of activity_main.xml 
      SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting GoogleMap object from the fragment 
      googleMap = fm.getMap(); 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
       onLocationChanged(location); 
      } 
      locationManager.requestLocationUpdates(provider, 20000, 0, this); 

      new LoadPath().execute(Environment.getExternalStorageDirectory().getPath() + "FILE.kml"); 
     } 
    } 

@Override 
public void onLocationChanged(Location location) { 

     // Getting latitude of the current location 
     double latitude = location.getLatitude(); 

     // Getting longitude of the current location 
     double longitude = location.getLongitude(); 

     // Creating a LatLng object for the current location 
     LatLng latLng = new LatLng(latitude, longitude); 

     // Showing the current location in Google Map 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

     // Zoom in the Google Map 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 
} 

@Override 
public vo id onProviderDisabled(String provider) { } 

@Override 
public void onProviderEnabled(String provider) { } 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { } 

private class LoadPath extends AsyncTask<String, Void, Void>{ 

    Vector<PolylineOptions> path; 
    Vector<Vector<LatLng>> path_fragment; 
    Vector<Polyline> lines; 

    @Override 
    p rotected void onPreExecute() { 
     super.onPreExecute(); 
     path_fragment = new Vector<Vector<LatLng>>(); 
     path = new Vector <PolylineOptions>(); 
     lines = new Vector<Polyline>(); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 
     try { 
      InputStream inputStream = new FileInputStream(params[0]); 

      DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 

      Document document = docBuilder.parse(inputStream); 

      NodeList listCoordinateTag = null; 

      if (document == null) { 
       return null; 
      } 

      listCoordinateTag = document.getElementsByTagName("coordinates"); 

      for (int i = 0; i < listCoordinateTag.getLength(); i++) { 

       String coordText = listCoordinateTag.item(i).getFirstChild().getNodeValue().trim(); 
       String[] vett = coordText.split("\\ "); 
       Vector<LatLng> temp = new Vector<LatLng>(); 
       for(int j=0; j < vett.length; j++){ 
        temp.add(new LatLng(Double.parseDouble(vett[j].split("\\,")[0]),Double.parseDouble(vett[j].split("\\,")[1]))); 
       } 
       path_fragment.add(temp); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
      e.printStackTrace(); 
     } catch (SAXException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     googleMap.clear(); 
      for(int i=0; i < path_fragment.size(); i++){ 

       // Poliline options 
       PolylineOptions temp = new PolylineOptions(); 

       for(int j=0; j< path_fragment.get(i).size(); j++) 
       temp.add(path_fragment.get(i).get(j)); 

       path.add(temp); 
     } 

      for(int i = 0; i < path.size(); i++) 
       lines.add(googleMap.addPolyline(path.get(i))); 

      for(int i = 0; i < lines.size(); i++){ 
       lines.get(i).setWidth(4); 
       lines.get(i).setColor(Color.RED); 
       lines.get(i).setGeodesic(true); 
       lines.get(i).setVisible(true); 
      } 

    } 

} 

} 

Таким образом, я могу получить все различные координаты Int следующим образом:

широта - долгота - высота

XXXXXXXX - XXXXXXXXX - XXXXXXXX

YYYYYYYY - YYYYYYYYY - YYYYYYYY

zzzzzzzz - zzzzzzzzz - zzzzzzzz

Но я не могу показать их на карте. Вы можете мне помочь?

ответ

4

Я нашел проблему от себя!

В выше широты и обмениваются кодом ...

Это правильная вещь, чтобы сделать в классе AsyncTask:

temp.add(new LatLng(Double.parseDouble(vett[j].split("\\,")[**1**]),Double.parseDouble(vett[j].split("\\,")[**0**]))); 

В А KML ПОДАТЬ координаты ПРЕДОСТАВЛЯЮТСЯ В ЭТОМ ПУТИ LONGITUDE - LATITUDE - ALTITUDE вот почему я обменял индексы!

Извините за вопрос!

+1

Плохо, плохо KML. Позор. Вы можете принять свой собственный ответ, поэтому люди, которые хотят помочь, не будут рассматривать этот вопрос. –

+0

Файл KML не построен мной ... – starScream

+0

поблагодарить так много starScream за замечательный код, который он сохранил во времени и работал без ошибок :) – jyomin

 Смежные вопросы

  • Нет связанных вопросов^_^