Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>thanks for the answer, in theory that sounds great. But I retrieve no Update on my map... the comment function offers to small space for my code, that's why I post it right here:</p> <pre><code>public class NavigationActivity extends MapActivity { // static GeoPoint posCar; // static GeoPoint posUser; MapController mc; LinearLayout linearLayout; MapView mapView; Intent intent = null; static GeoPoint posCar = PositionController.getCoordsCar(); static GeoPoint posUser = PositionController.getCoordsUser(); private LocationManager lm; private LocationListener locationListener = new MyLocationListener(); int routeDefaultColor = Color.RED; /** * Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Use Layout "main.xml" lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener); mapView = (MapView) findViewById(R.id.mapView); // Gets the map view by // ID mapView.setBuiltInZoomControls(true); // Enables the zoom buttons mc = mapView.getController(); // Receive intent intent = getIntent(); //posCar = PositionController.getCoordsCar(); //posUser = PositionController.getCoordsUser(); // Show only "car position" or "full route" // Show the full route // Calculates the geographic middle between start and end point int latMiddle = (int) ((posCar.getLatitudeE6() + posUser .getLatitudeE6()) / 2); int lonMiddle = (int) ((posCar.getLongitudeE6() + posUser .getLongitudeE6()) / 2); GeoPoint middle = new GeoPoint(latMiddle, lonMiddle); // Focus "middle" mc.setCenter(middle); // Retrieve route informations from google: // Generate URL for Google Maps query final String googleMapsUrl = "http://maps.google.com/maps?f=d&amp;hl=en&amp;saddr=" + Double.toString(posUser.getLatitudeE6() / 1E6) + "," + Double.toString(posUser.getLongitudeE6() / 1E6) + "&amp;daddr=" + Double.toString(posCar.getLatitudeE6() / 1E6) + "," + Double.toString(posCar.getLongitudeE6() / 1E6) + "&amp;ie=UTF8&amp;0&amp;om=0&amp;output=kml" // Requested output format: + "&amp;dirflg=w"; // Walking mode // KML-File Log.v("URL", googleMapsUrl); // Connect to the Internet and request corresponding KML file HttpURLConnection urlConn = null; try { // Start up a new URL-Connection URL url = new URL(googleMapsUrl); urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("GET"); urlConn.setDoInput(true); // Needed for Input urlConn.setDoOutput(true); // Needed for Output urlConn.connect(); // Parsing the KML file DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(urlConn.getInputStream()); // Extract the &lt;coordinates&gt; Tag from &lt;GeometryCollection&gt; as // String String coordString = doc.getElementsByTagName("GeometryCollection") .item(0).getFirstChild().getFirstChild().getFirstChild() .getNodeValue(); // Divide the huge string into an string array of coordinates, // using // " " as separator String[] coords = coordString.split(" "); String[] lngLat; lngLat = coords[0].split(","); GeoPoint gpFrom = new GeoPoint( (int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double .parseDouble(lngLat[0]) * 1E6)); GeoPoint gpTo = null; for (int i = 1; i &lt; coords.length; i++) { lngLat = coords[i].split(","); gpTo = new GeoPoint( (int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0]) * 1E6)); mapView.getOverlays() .add( new PathOverlay(gpFrom, gpTo, Color.RED, getResources())); gpFrom = gpTo; } } catch (MalformedURLException e) { Log.v("Exception", "Generated URL is invalid"); e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { Log.v("Exception", "Error while parsing the KML file - Config error"); e.printStackTrace(); } catch (SAXException e) { Log.v("Exception", "Error while parsing the KML file - Parser error"); e.printStackTrace(); } MarkerOverlay pin1 = new MarkerOverlay(posCar, getResources()); MarkerOverlay pin2 = new MarkerOverlay(posUser, getResources()); mapView.getOverlays().add(pin1); mapView.getOverlays().add(pin2); mc.zoomToSpan(Math .abs(posCar.getLatitudeE6() - posUser.getLatitudeE6()), Math .abs(posCar.getLongitudeE6() - posUser.getLongitudeE6())); mapView.invalidate(); } private class MyLocationListener implements LocationListener { int lat; int lon; @Override public void onLocationChanged(Location loc) { if (loc != null) { lat = (int) (loc.getLatitude() * 1E6); lon = (int) (loc.getLongitude() * 1E6); posUser = new GeoPoint(lat, lon); mapView.invalidate(); } } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } @Override protected boolean isRouteDisplayed() { return false; } } </code></pre> <p>The huge part in the middle works great and can be ignored....may the error occur because the mapView is invalidated twice? It seems to me that the onCreate method is not called again.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload