Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. Coordinate nw = num2deg(xInfo, yInfo, zInfo);
  2. Coordinate se = num2deg(xInfo + 1, yInfo + 1, zInfo);
  3.  
  4. if ("mvt".equalsIgnoreCase(resultStr) && zInfo >= 10 && (nw.y < 49 && nw.y > 48.3) && (nw.x > 10.5 && nw.x < 11.5)) {
  5.  
  6. qr = locationIndex.findClosest((nw.y + se.y) / 2, (nw.x + se.x) / 2, edgeFilter);
  7. if (!qr.isValid())
  8. throw new IllegalArgumentException("Point not found:" + point);
  9. queryGraph = new QueryGraph(graph);
  10. queryGraph.lookup(Collections.singletonList(qr));
  11. hintsMap = new HintsMap();
  12. RouteResource.initHints(hintsMap, uriInfo.getQueryParameters());
  13. weighting = graphHopper.createWeighting(hintsMap, encoder, graph);
  14. isochrone = new Isochrone(queryGraph, weighting, reverseFlow);
  15. isochrone.setTimeLimit(1200);
  16. List<Number[]> edgeList = isochrone.searchEdges(qr.getClosestNode());
  17. IGeometryFilter acceptAllGeomFilter = geometry -> true;
  18.  
  19. Envelope tileEnvelope = new Envelope(se, nw);
  20.  
  21. MvtLayerParams layerParams = new MvtLayerParams(256, 4096);
  22. GeometryFactory geometryFactory = new GeometryFactory();
  23.  
  24. LineString[] edgeListGeometry = new LineString[edgeList.size()];
  25. for (int edgeCounter = 0; edgeCounter < edgeList.size(); edgeCounter++) {
  26. Number[] edge = edgeList.get(edgeCounter);
  27. edgeListGeometry[edgeCounter] = geometryFactory.createLineString(
  28. new Coordinate[]{new Coordinate(edge[0].doubleValue(), edge[1].doubleValue()),
  29. new Coordinate(edge[2].doubleValue(), edge[3].doubleValue())});
  30. }
  31.  
  32. logger.info("start encoding: " + resultStr + ", edges:" + 1);
  33. // doing some AffineTransformation
  34. TileGeomResult tileGeom = JtsAdapter.createTileGeom(
  35. geometryFactory.createMultiLineString(edgeListGeometry),
  36. tileEnvelope,
  37. geometryFactory,
  38. layerParams,
  39. acceptAllGeomFilter);
  40.  
  41. MvtLayerProps layerProps = new MvtLayerProps();
  42. VectorTile.Tile.Layer.Builder layerBuilder = MvtLayerBuild.newLayerBuilder("roads", layerParams);
  43. MvtLayerBuild.writeProps(layerBuilder, layerProps);
  44. List<VectorTile.Tile.Feature> features = JtsAdapter.toFeatures(tileGeom.mvtGeoms, layerProps, new UserDataKeyValueMapConverter());
  45. VectorTile.Tile mvt = VectorTile.Tile.newBuilder().addLayers(layerBuilder.addAllFeatures(features).build()).build();
  46. byte[] bytes = mvt.toByteArray();
  47. String tookStr = "" + sw.stop().getSeconds() * 1000;
  48. logger.info("took: " + tookStr);
  49. return Response.fromResponse(Response.ok(bytes, new MediaType("application", "x-protobuf")).build())
  50. .header("X-GH-Took", tookStr)
  51. .build();
  52.  
  53. }
  54.  
  55.  
  56.  
  57.  
  58. Coordinate num2deg(int xInfo, int yInfo, int zoom) {
  59. double n = Math.pow(2, zoom);
  60. double lonDeg = xInfo / n * 360.0 - 180.0;
  61. // unfortunately latitude numbers goes from north to south
  62. double latRad = Math.atan(Math.sinh(Math.PI * (1 - 2 * yInfo / n)));
  63. double latDeg = Math.toDegrees(latRad);
  64. return new Coordinate(lonDeg, latDeg);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement