private OsmFile fileForSegment(final int lonDegree, final int latDegree) throws Exception {
        final int lonMod5 = lonDegree % 5;
        final int latMod5 = latDegree % 5;

        final int lon = lonDegree - 180 - lonMod5;
        final String slon = lon < 0 ? "W" + (-lon) : "E" + lon;
        final int lat = latDegree - 90 - latMod5;

        final String slat = lat < 0 ? "S" + (-lat) : "N" + lat;
        final String filenameBase = slon + "_" + slat;

        currentFileName = filenameBase + BRouterConstants.BROUTER_TILE_FILEEXTENSION;

        PhysicalFile ra = null;
        if (!fileCache.containsKey(filenameBase)) {

            final FileInformationCacheEntry fice = folderInfoCache.get(filenameBase);
            final ContentStorage.FileInformation fi;
            if (fice != null && (System.currentTimeMillis() - fice.fiTimestamp) < 60000) {
                fi = fice.fi;
            } else {
                fi = ContentStorage.get().getFileInfo(PersistableFolder.ROUTING_TILES.getFolder(), filenameBase + BRouterConstants.BROUTER_TILE_FILEEXTENSION);
                folderInfoCache.put(filenameBase, new FileInformationCacheEntry(fi));
            }

            if (fi != null && !fi.isDirectory) {
                currentFileName = fi.name;

                final InputStream is = ContentStorage.get().openForRead(fi.uri);
                if (is instanceof FileInputStream) {
                    ra = new PhysicalFile(fi.name, (FileInputStream) is, dataBuffers, lookupVersion);
                } else {
                    Log.w("Problem opening tile file " + fi + ", is = " + is);
                    IOUtils.closeQuietly(is);
                }
            }
            fileCache.put(filenameBase, ra);
        }
        ra = fileCache.get(filenameBase);
        final OsmFile osmf = new OsmFile(ra, lonDegree, latDegree, dataBuffers);

        if (firstFileAccessName == null) {
            firstFileAccessName = currentFileName;
            firstFileAccessFailed = osmf.filename == null;
        }

        return osmf;
    }
get a node for the given id with all link-targets also non-hollow
<p>
It is required that an instance of the start-node does not yet
exist, not even a hollow instance, so getStartNode should only
be called once right after resetting the cache

@param id the id of the node to load
@return the fully expanded node for id, or null if it was not found
main/src/main/java/cgeo/geocaching/brouter/mapaccess/NodesCache.java