@Override
    public Drawable loadTile(final MapTileRequestState pState) {

      ITileSource tileSource = mTileSource.get();
      if (tileSource == null) {
        return null;
      }

      final MapTile pTile = pState.getMapTile();

      // if there's no sdcard then don't do anything
      if (!getSdCardAvailable()) {
        if (OpenStreetMapTileProviderConstants.DEBUGMODE) {
          Log.d(IMapView.LOGTAG, "No sdcard - do nothing for tile: " + pTile);
        }
        return null;
      }

      InputStream inputStream = null;
      try {
        if (OpenStreetMapTileProviderConstants.DEBUGMODE) {
          Log.d(IMapView.LOGTAG, "Tile doesn't exist: " + pTile);
        }

        inputStream = getInputStream(pTile, tileSource);
        if (inputStream != null) {
          if (OpenStreetMapTileProviderConstants.DEBUGMODE) {
            Log.d(IMapView.LOGTAG, "Use tile from archive: " + pTile);
          }
          final Drawable drawable = tileSource.getDrawable(inputStream);
          return drawable;
        }
      } catch (final Throwable e) {
        Log.e(IMapView.LOGTAG, "Error loading tile", e);
      } finally {
        if (inputStream != null) {
          StreamUtils.closeStream(inputStream);
        }
      }

      return null;
    }
示例#2
0
  public Route request(
      final Context ctx,
      final DirectionsLanguage nat,
      final GeoPoint start,
      final List<GeoPoint> vias,
      final GeoPoint end,
      final RoutePreferenceType pRoutePreference,
      final boolean pProvideGeometry,
      final boolean pAvoidTolls,
      final boolean pAvoidHighways,
      final boolean pRequestHandle,
      final ArrayList<AreaOfInterest> pAvoidAreas,
      final boolean pSaveRoute)
      throws MalformedURLException, IOException, SAXException, ORSException {
    final String cloudmadeurl =
        "http://routes.cloudmade.com/"
            + CloudmadeUtil.getCloudmadeKey()
            + "/api/0.3/"
            + CloudmadeRSRequestComposer.create(nat, start, vias, end, pRoutePreference);
    Log.d(OSMConstants.DEBUGTAG, "Cloudmade url " + cloudmadeurl);
    final URL requestURL = new URL(cloudmadeurl);

    final HttpURLConnection acon = (HttpURLConnection) requestURL.openConnection();
    acon.setAllowUserInteraction(false);
    acon.setRequestMethod("GET");
    acon.setRequestProperty("Content-Type", "application/xml");
    acon.setDoOutput(true);
    acon.setDoInput(true);
    acon.setUseCaches(false);

    /* Get a SAXParser from the SAXPArserFactory. */
    final SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp;
    try {
      sp = spf.newSAXParser();
    } catch (final ParserConfigurationException e) {
      throw new SAXException(e);
    }

    /* Get the XMLReader of the SAXParser we created. */
    final XMLReader xr = sp.getXMLReader();
    /* Create a new ContentHandler and apply it to the XML-Reader*/
    final CloudmadeRSParser openLSParser = new CloudmadeRSParser();
    xr.setContentHandler(openLSParser);

    /* Parse the xml-data from our URL. */
    xr.parse(new InputSource(new BufferedInputStream(acon.getInputStream())));

    /* The Handler now provides the parsed data to us. */
    final Route r = openLSParser.getRoute();
    r.finalizeRoute(vias);

    if (pSaveRoute) {
      /* Exception would have been thrown in invalid route. */
      try {
        // Ensure folder exists
        final String traceFolderPath =
            Util.getAndRoadExternalStoragePath() + SDCARD_SAVEDROUTES_PATH;
        new File(traceFolderPath).mkdirs();

        // Create file and ensure that needed folders exist.
        final String filename = traceFolderPath + SDF.format(new Date(System.currentTimeMillis()));
        final File dest = new File(filename + ".route");

        // Write Data
        final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(dest));

        out.writeObject(r);
        StreamUtils.closeStream(out);
      } catch (final Exception e) {
        Log.e(OSMConstants.DEBUGTAG, "File-Writing-Error", e);
      }
    }

    return r;
  }