Postgis發(fā)布動態(tài)矢量切片服務

    @CrossOrigin
    @GetMapping("/tile/{z}/{x}/{y}.mvt")
    @ApiOperation("獲取矢量瓦片")
    public void tile(@PathVariable("z") int z,
                     @PathVariable("x") int x,
                     @PathVariable("y") int y,
                     @RequestParam(value = "regionCode", required = false) String regionCode,
                     @RequestParam(value = "version", required = false) String version,
                     @RequestParam(value = "mapType", required = false) String mapType,
                     HttpServletResponse response) {
        mapDataService.tile(z, x, y, regionCode, version, mapType, response);
    }
 /**
     * 獲取矢量瓦片
     *
     * @param z
     * @param x
     * @param y
     * @param regionCode
     * @param version
     * @param mapType
     * @param response
     */
    @Override
    public void tile(int z, int x, int y, String regionCode, String version, String mapType, HttpServletResponse response) {
        try {
            TileData tile = mapDataMapper.tile(z, x, y, regionCode, version, mapType);
            response.setContentType("application/vnd.mapbox-vector-tile");

            ServletOutputStream outputStream = response.getOutputStream();
            if (tile != null) {
                outputStream.write(tile.getTile());
            }

            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            log.error("獲取矢量切片失敗", e);
        }
    }
@Data
public class TileData {

    private byte[] tile;

}
 /**
     * 獲取矢量瓦片
     *
     * @param z
     * @param x
     * @param y
     * @param regionCode
     * @param version
     * @param mapType
     * @return
     * @author yk
     * @since 2022/11/22 13:54
     */
    TileData tile(@Param("z") int z, @Param("x") int x, @Param("y") int y,
                  @Param("regionCode") String regionCode, @Param("version") String version,
                  @Param("mapType") String mapType);
  <select id="tile" resultType="com.fpi.prd.erms.entity.dto.TileData">
        SELECT
            ST_AsMVT ( tile ) tile
        FROM
            (
                SELECT
                    t.id,
                    t.region_code as region_code,
                    t.version as version,
                    t.map_type as map_type,
        (case when t.map_type ='A03000001' then t2.color
        when t.map_type ='A10000001'  then t3.color
        when t.map_type ='A10000002'  then t3.color
        else t4.color

        end) as color,

                    ST_AsMVTGEOM (
                            ST_TRANSFORM(t.geom,3857),
                            ST_TileEnvelope ( #{z}, #{x}, #{y}),
                            4096,
                            0,
                            TRUE
                        ) AS geom
                FROM
            t_map_data t LEFT JOIN t_dictionary t2
        on   t2.category='redLineType' and t.red_line_type_code=t2.code
        LEFT JOIN t_dictionary t3
        on  t3.category='controlUnit'  and t.control_area_code=t3.code
        LEFT JOIN t_dictionary t4
        on  t4.category='controlArea'  and t.control_area_code=t4.code
        <where>
            t.delete_flag =0

            <if test="@org.apache.commons.lang3.StringUtils@isNotBlank(regionCode)">
                and t.region_code = #{regionCode,jdbcType=VARCHAR}
            </if>
            <if test="@org.apache.commons.lang3.StringUtils@isNotBlank(version)">
                and t.version = #{version,jdbcType=VARCHAR}
            </if>
            <if test="@org.apache.commons.lang3.StringUtils@isNotBlank(mapType)">
                and t.map_type = #{mapType,jdbcType=VARCHAR}
            </if>
        </where>
            ) AS tile
        WHERE
            tile.geom IS NOT NULL
    </select>
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容