`

springboot 返回mapbox 的pbf 矢量瓦片

阅读更多
<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图层进行适量瓦片的渲染了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics