use of com.baremaps.osm.domain.State in project baremaps by baremaps.
the class OpenStreetMapTest method monacoStateTxt.
@Test
void monacoStateTxt() throws URISyntaxException, IOException {
try (InputStream inputStream = MONACO_STATE_TXT.openStream()) {
State state = new OsmStateParser().state(inputStream);
assertEquals(2788, state.getSequenceNumber());
assertEquals(LocalDateTime.parse("2020-11-10T21:42:03"), state.getTimestamp());
}
}
use of com.baremaps.osm.domain.State in project baremaps by baremaps.
the class UpdateService method call.
@Override
public Void call() throws Exception {
Header header = headerRepository.selectLatest();
String replicationUrl = header.getReplicationUrl();
Long sequenceNumber = header.getReplicationSequenceNumber() + 1;
Consumer<Entity> createGeometry = new CreateGeometryConsumer(coordinates, references);
Consumer<Entity> reprojectGeometry = new ReprojectEntityConsumer(4326, srid);
Consumer<Change> prepareGeometries = new ChangeEntityConsumer(createGeometry.andThen(reprojectGeometry));
Function<Change, Change> prepareChange = consumeThenReturn(prepareGeometries);
Consumer<Change> saveChange = new SaveChangeConsumer(nodeRepository, wayRepository, relationRepository);
URI changeUri = resolve(replicationUrl, sequenceNumber, "osc.gz");
Blob changeBlob = blobStore.get(changeUri);
ProgressLogger progressLogger = new ProgressLogger(changeBlob.getContentLength(), 5000);
try (InputStream blobInputStream = changeBlob.getInputStream();
InputStream progressInputStream = new InputStreamProgress(blobInputStream, progressLogger);
InputStream gzipInputStream = new GZIPInputStream(progressInputStream)) {
new OsmChangeParser().changes(gzipInputStream).map(prepareChange).forEach(saveChange);
}
URI stateUri = resolve(replicationUrl, sequenceNumber, "state.txt");
Blob stateBlob = blobStore.get(stateUri);
try (InputStream stateInputStream = stateBlob.getInputStream()) {
State state = new OsmStateParser().state(stateInputStream);
headerRepository.put(new Header(state.getSequenceNumber(), state.getTimestamp(), header.getReplicationUrl(), header.getSource(), header.getWritingProgram()));
}
return null;
}
use of com.baremaps.osm.domain.State in project baremaps by baremaps.
the class OsmStateParser method state.
/**
* Parse an OSM state file.
*
* @param input the OpenStreetMap state file
* @return the state
*/
public State state(InputStream input) throws IOException {
InputStreamReader reader = new InputStreamReader(input, StandardCharsets.UTF_8);
Map<String, String> map = new HashMap<>();
for (String line : CharStreams.readLines(reader)) {
String[] array = line.split("=");
if (array.length == 2) {
map.put(array[0], array[1]);
}
}
long sequenceNumber = Long.parseLong(map.get("sequenceNumber"));
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
LocalDateTime timestamp = LocalDateTime.parse(map.get("timestamp").replace("\\", ""), format);
return new State(sequenceNumber, timestamp);
}
Aggregations