use of io.opentraffic.engine.geom.TripLine in project traffic-engine by opentraffic.
the class TripLineSerializer method deserialize.
@Override
public TripLine deserialize(DataInput in, int available) throws IOException {
long id = in.readLong();
int geomSize = in.readInt();
Coordinate[] coords = new Coordinate[geomSize];
for (int i = 0; i < geomSize; i++) {
coords[i] = new Coordinate(in.readDouble(), in.readDouble());
}
long segmentId = in.readLong();
int tripLineIndex = in.readInt();
double dist = in.readDouble();
TripLine item = new TripLine(id, coords, segmentId, tripLineIndex, dist);
return item;
}
use of io.opentraffic.engine.geom.TripLine in project traffic-engine by opentraffic.
the class OSMDataStore method createTripLine.
public TripLine createTripLine(StreetSegment streetSegment, int triplineIndex, LengthIndexedLine lengthIndexedLine, double lengthIndex, double dist) {
double l1Bearing = OSMDataStore.getBearing(lengthIndexedLine, lengthIndex);
synchronized (OSMDataStore.gc) {
Coordinate p1 = lengthIndexedLine.extractPoint(lengthIndex);
gc.setStartingGeographicPoint(p1.x, p1.y);
gc.setDirection(clampAzimuth(l1Bearing + 90), TRIPLINE_RADIUS);
Point2D tlRight = gc.getDestinationGeographicPoint();
gc.setDirection(clampAzimuth(l1Bearing - 90), TRIPLINE_RADIUS);
Point2D tlLeft = gc.getDestinationGeographicPoint();
Coordinate[] coords = new Coordinate[2];
coords[0] = new Coordinate(tlLeft.getX(), tlLeft.getY());
coords[1] = new Coordinate(tlRight.getX(), tlRight.getY());
TripLine tl = new TripLine(this.triplines.getNextId(), coords, streetSegment.id, triplineIndex, dist);
return tl;
}
}
use of io.opentraffic.engine.geom.TripLine in project traffic-engine by opentraffic.
the class OSMDataStore method addOsm.
private OSMArea addOsm(Fun.Tuple2<Integer, Integer> tile, Envelope env, OSM osm, Boolean keepCompleteGeometries) {
String placeName = null;
Long placePop = null;
for (Entry<Long, Node> entry : osm.nodes.entrySet()) {
Long id = entry.getKey();
Node node = entry.getValue();
if (id == 259009337) {
try {
long pop = Long.parseLong(node.getTag("population"));
if (placePop == null || placePop < pop) {
placePop = pop;
placeName = node.getTag("name");
}
} catch (Exception e) {
}
}
}
List<StreetSegment> segments = getStreetSegments(osm);
List<SpatialDataItem> segmentItems = new ArrayList<>();
List<SpatialDataItem> triplineItems = new ArrayList<>();
for (StreetSegment segment : segments) {
if (streetSegments.contains(segment.getSegmentId()))
continue;
if (segment.length > MIN_SEGMENT_LEN) {
LengthIndexedLine lengthIndexedLine = new LengthIndexedLine(segment.getGeometry());
double scale = (lengthIndexedLine.getEndIndex() - lengthIndexedLine.getStartIndex()) / segment.length;
List<TripLine> tripLines = new ArrayList<TripLine>();
tripLines.add(createTripLine(segment, 1, lengthIndexedLine, (OSMDataStore.INTERSECTION_MARGIN_METERS) * scale, OSMDataStore.INTERSECTION_MARGIN_METERS));
tripLines.add(createTripLine(segment, 2, lengthIndexedLine, ((segment.length - OSMDataStore.INTERSECTION_MARGIN_METERS) * scale), segment.length - OSMDataStore.INTERSECTION_MARGIN_METERS));
for (TripLine tripLine : tripLines) {
triplineItems.add(tripLine);
}
} else {
jumperDataStore.addJumper(new Jumper(segment));
}
if (!keepCompleteGeometries)
segment.truncateGeometry();
segmentItems.add(segment);
}
streetSegments.save(segmentItems);
jumperDataStore.save();
triplines.save(triplineItems);
long zoneOffset = timeZoneConverter.getOffsetForCoord(env.centre());
OSMArea osmArea = new OSMArea(osmAreaIds.getNextId(), tile.a, tile.b, Z_INDEX, placeName, placePop, zoneOffset, env);
osmAreas.put(tile, osmArea);
db.commit();
System.out.println("Loaded OSM " + tile.a + ", " + tile.b);
if (placeName != null)
System.out.println("\t" + placeName + ", " + placePop);
return osmArea;
}
Aggregations