<dependency> <groupId>no.ecc.vectortile</groupId> <artifactId>java-vector-tile</artifactId> <version>1.2.1</version> </dependency>
<dependency> <groupId>org.mapfish.geo</groupId> <artifactId>mapfish-geo-lib</artifactId> <version>1.2.0</version> </dependency>
创建基本的spring boot应用。
引入依赖包。
import no.ecc.vectortile.VectorTileEncoder;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Point;
主要方法:
public byte[] getTollJsonByTile(int x, int y, int z, int gap) throws Exception { //x,y,z 是瓦片号和等级,gap是扩圈的值 if(5>z||z>17){ return null; } //这里我用瓦片转成wkt,去库中框信息,利用空间索引 String wkt = MercatorProjection.getWktWithGap(x, y, z, gap); VectorTileEncoder vector = new VectorTileEncoder(4096, 16, false); //这里是mybatis的映射方法,得到数据 List<RT_GATE> listToll = tollMapping.getTollGeomtry(wkt); for(RT_GATE rt:listToll){ Map<String,Object> attrs = new HashMap<>(); attrs.put("pid",rt.getPid()); attrs.put("in_link_pid",rt.getIn_link_pid()); attrs.put("out_link_pid",rt.getOut_link_pid()); attrs.put("node_pid",rt.getNode_pid()); attrs.put("type",rt.getType()); attrs.put("system_id",rt.getSystem_id()); Coordinate coordinate = new Coordinate(rt.getjGeometry().getPoint()[0],rt.getjGeometry().getPoint()[1]); Point point = geometryFactory.createPoint(coordinate); //转像素坐标,MercatorProjection是一个自定义的工具类 MercatorProjection.convert2Piexl(x,y,z,point); vector.addFeature("toll",attrs,point); } return vector.encode(); }
Controller:
@Controller public class WelcomeController { @Autowired Ora2Protobuf ora2Protobuf; // @GET // @Path("/base/tollcost/{z}/{x}/{y}") // //@Produces("application/protobuf") // public Response getTollgeom(@PathParam("z") int z, @PathParam("x") int x, @PathParam("y") int y, HttpServletResponse response) throws Exception { // //// return ora2Protobuf.getTollJsonByTile(x,y,z,0); // return HttpResUtil.buildResponse(ora2Protobuf.getTollJsonByTile(x,y,z,0)); // } @RequestMapping(value = "/base/tollcost/{z}/{x}/{y}") public ResponseEntity getTollgeom(@PathVariable("z") int z, @PathVariable("x") int x, @PathVariable("y") int y) throws Exception { return ResponseEntity.ok(ora2Protobuf.getTollJsonByTile(x,y,z,0)); // return ora2Protobuf.getTollJsonByTile(x,y,z,0); //return HttpResUtil.buildResponse(ora2Protobuf.getTollJsonByTile(x,y,z,0)); }
请求:localhost:8080/base/tollcost/11/1685/777
返回二进制,前端可以用mapbox 的js包,获取toll图层进行适量瓦片的渲染了。