private List<Integer> waynodesAsList(List<GeoCoordinate> waynodeCoordinates) { ArrayList<Integer> result = new ArrayList<Integer>(); for (GeoCoordinate geoCoordinate : waynodeCoordinates) { result.add(geoCoordinate.getLatitudeE6()); result.add(geoCoordinate.getLongitudeE6()); } return result; }
private long writeContainerHeader( long date, int version, short tilePixel, String comment, boolean debugStrings, boolean waynodeCompression, boolean polygonClipping, boolean pixelCompression, GeoCoordinate mapStartPosition) throws IOException { // get metadata for the map file int numberOfZoomIntervals = dataStore.getZoomIntervalConfiguration().getNumberOfZoomIntervals(); logger.fine("writing header"); MappedByteBuffer containerHeaderBuffer = randomAccessFile.getChannel().map(MapMode.READ_WRITE, 0, HEADER_BUFFER_SIZE); // write file header // magic byte byte[] magicBytes = MAGIC_BYTE.getBytes(); containerHeaderBuffer.put(magicBytes); // write container header size int headerSizePosition = containerHeaderBuffer.position(); containerHeaderBuffer.position(headerSizePosition + 4); // version number of the binary file format containerHeaderBuffer.putInt(version); // meta info byte containerHeaderBuffer.put( buildMetaInfoByte( debugStrings, mapStartPosition != null, pixelCompression, polygonClipping, waynodeCompression)); // amount of map files inside this file containerHeaderBuffer.put((byte) numberOfZoomIntervals); // projection type writeUTF8(PROJECTION, containerHeaderBuffer); // width and height of a tile in pixel containerHeaderBuffer.putShort(tilePixel); logger.fine( "Bounding box for file: " + dataStore.getBoundingBox().maxLatitudeE6 + ", " + dataStore.getBoundingBox().minLongitudeE6 + ", " + dataStore.getBoundingBox().minLatitudeE6 + ", " + dataStore.getBoundingBox().maxLongitudeE6); // upper left corner of the bounding box containerHeaderBuffer.putInt(dataStore.getBoundingBox().maxLatitudeE6); containerHeaderBuffer.putInt(dataStore.getBoundingBox().minLongitudeE6); containerHeaderBuffer.putInt(dataStore.getBoundingBox().minLatitudeE6); containerHeaderBuffer.putInt(dataStore.getBoundingBox().maxLongitudeE6); if (mapStartPosition != null) { containerHeaderBuffer.putInt(mapStartPosition.getLatitudeE6()); containerHeaderBuffer.putInt(mapStartPosition.getLongitudeE6()); } // date of the map data containerHeaderBuffer.putLong(date); // store the mapping of tags to tag ids containerHeaderBuffer.putShort((short) PoiEnum.values().length); for (PoiEnum poiEnum : PoiEnum.values()) { writeUTF8(poiEnum.toString(), containerHeaderBuffer); containerHeaderBuffer.putShort((short) poiEnum.ordinal()); } containerHeaderBuffer.putShort((short) WayEnum.values().length); for (WayEnum wayEnum : WayEnum.values()) { writeUTF8(wayEnum.toString(), containerHeaderBuffer); containerHeaderBuffer.putShort((short) wayEnum.ordinal()); } // comment if (comment != null && !comment.equals("")) { writeUTF8(comment, containerHeaderBuffer); } else { writeUTF8("", containerHeaderBuffer); } // initialize buffer for writing zoom interval configurations bufferZoomIntervalConfig = randomAccessFile .getChannel() .map( MapMode.READ_WRITE, containerHeaderBuffer.position(), SIZE_ZOOMINTERVAL_CONFIGURATION * numberOfZoomIntervals); containerHeaderBuffer.position( containerHeaderBuffer.position() + SIZE_ZOOMINTERVAL_CONFIGURATION * numberOfZoomIntervals); // -4 bytes of header size variable itself int headerSize = containerHeaderBuffer.position() - headerSizePosition - 4; containerHeaderBuffer.putInt(headerSizePosition, headerSize); return containerHeaderBuffer.position(); }