Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Coordinate nw = num2deg(xInfo, yInfo, zInfo);
- Coordinate se = num2deg(xInfo + 1, yInfo + 1, zInfo);
- if ("mvt".equalsIgnoreCase(resultStr) && zInfo >= 10 && (nw.y < 49 && nw.y > 48.3) && (nw.x > 10.5 && nw.x < 11.5)) {
- qr = locationIndex.findClosest((nw.y + se.y) / 2, (nw.x + se.x) / 2, edgeFilter);
- if (!qr.isValid())
- throw new IllegalArgumentException("Point not found:" + point);
- queryGraph = new QueryGraph(graph);
- queryGraph.lookup(Collections.singletonList(qr));
- hintsMap = new HintsMap();
- RouteResource.initHints(hintsMap, uriInfo.getQueryParameters());
- weighting = graphHopper.createWeighting(hintsMap, encoder, graph);
- isochrone = new Isochrone(queryGraph, weighting, reverseFlow);
- isochrone.setTimeLimit(1200);
- List<Number[]> edgeList = isochrone.searchEdges(qr.getClosestNode());
- IGeometryFilter acceptAllGeomFilter = geometry -> true;
- Envelope tileEnvelope = new Envelope(se, nw);
- MvtLayerParams layerParams = new MvtLayerParams(256, 4096);
- GeometryFactory geometryFactory = new GeometryFactory();
- LineString[] edgeListGeometry = new LineString[edgeList.size()];
- for (int edgeCounter = 0; edgeCounter < edgeList.size(); edgeCounter++) {
- Number[] edge = edgeList.get(edgeCounter);
- edgeListGeometry[edgeCounter] = geometryFactory.createLineString(
- new Coordinate[]{new Coordinate(edge[0].doubleValue(), edge[1].doubleValue()),
- new Coordinate(edge[2].doubleValue(), edge[3].doubleValue())});
- }
- logger.info("start encoding: " + resultStr + ", edges:" + 1);
- // doing some AffineTransformation
- TileGeomResult tileGeom = JtsAdapter.createTileGeom(
- geometryFactory.createMultiLineString(edgeListGeometry),
- tileEnvelope,
- geometryFactory,
- layerParams,
- acceptAllGeomFilter);
- MvtLayerProps layerProps = new MvtLayerProps();
- VectorTile.Tile.Layer.Builder layerBuilder = MvtLayerBuild.newLayerBuilder("roads", layerParams);
- MvtLayerBuild.writeProps(layerBuilder, layerProps);
- List<VectorTile.Tile.Feature> features = JtsAdapter.toFeatures(tileGeom.mvtGeoms, layerProps, new UserDataKeyValueMapConverter());
- VectorTile.Tile mvt = VectorTile.Tile.newBuilder().addLayers(layerBuilder.addAllFeatures(features).build()).build();
- byte[] bytes = mvt.toByteArray();
- String tookStr = "" + sw.stop().getSeconds() * 1000;
- logger.info("took: " + tookStr);
- return Response.fromResponse(Response.ok(bytes, new MediaType("application", "x-protobuf")).build())
- .header("X-GH-Took", tookStr)
- .build();
- }
- Coordinate num2deg(int xInfo, int yInfo, int zoom) {
- double n = Math.pow(2, zoom);
- double lonDeg = xInfo / n * 360.0 - 180.0;
- // unfortunately latitude numbers goes from north to south
- double latRad = Math.atan(Math.sinh(Math.PI * (1 - 2 * yInfo / n)));
- double latDeg = Math.toDegrees(latRad);
- return new Coordinate(lonDeg, latDeg);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement