|
@@ -29,114 +29,129 @@ public class TileServiceImpl implements ITileService {
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public byte[] tileData(GeoRequestParam requestParam, LayerGroupDsView layerGroupDsView,List<LayerStyleView> layerStyleViewList) {
|
|
|
+ public byte[] tileData(GeoRequestParam requestParam, List<LayerGroupDsView> layerGroupDsViewList,Map<String,List<LayerStyleView>> dataMaps) {
|
|
|
|
|
|
- //2根据cql规则获取图层对应的空间地理数据
|
|
|
+ for(LayerGroupDsView layerGroupDsView:layerGroupDsViewList){
|
|
|
|
|
|
- long currentTimeMillis = System.currentTimeMillis();
|
|
|
|
|
|
- StringBuffer filterCqlStr = new StringBuffer();
|
|
|
+ //获取图层代码对应的样式
|
|
|
+ List<LayerStyleView> layerStyleViewList = new ArrayList<LayerStyleView>();
|
|
|
|
|
|
- String filterCql = requestParam.getCqlFilter();
|
|
|
+ if(dataMaps.containsKey(layerGroupDsView.getLayerCode())){
|
|
|
|
|
|
- if(filterCql !=null && !"".equals(filterCql)){
|
|
|
+ layerStyleViewList = dataMaps.get(layerGroupDsView.getLayerCode());
|
|
|
|
|
|
- filterCqlStr.append(filterCql);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- String bbox = requestParam.getBbox();
|
|
|
|
|
|
- if(bbox !=null && !"".equals(bbox)){
|
|
|
+ //2根据cql规则获取图层对应的空间地理数据
|
|
|
|
|
|
- StringBuffer sbBbox = new StringBuffer();
|
|
|
- sbBbox.append("(bbox (");
|
|
|
- sbBbox.append(layerGroupDsView.getBoxColumn()+",");
|
|
|
- sbBbox.append(requestParam.getBbox()+"))");
|
|
|
+ long currentTimeMillis = System.currentTimeMillis();
|
|
|
|
|
|
- if(filterCqlStr.length() >0){
|
|
|
+ StringBuffer filterCqlStr = new StringBuffer();
|
|
|
|
|
|
- filterCqlStr.append(" and "+sbBbox.toString());
|
|
|
- }else{
|
|
|
+ String filterCql = requestParam.getCqlFilter();
|
|
|
|
|
|
- filterCqlStr.append(sbBbox.toString());
|
|
|
+ if(filterCql !=null && !"".equals(filterCql)){
|
|
|
|
|
|
+ filterCqlStr.append(filterCql);
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- String layerDataType = layerGroupDsView.getLayerDataType();
|
|
|
- String layerDataRun = layerGroupDsView.getLayerDataRun();
|
|
|
+ String bbox = requestParam.getBbox();
|
|
|
|
|
|
- if(layerDataType !=null && !"".equals(layerDataType) && "cql".equals(layerDataType)){
|
|
|
+ if(bbox !=null && !"".equals(bbox)){
|
|
|
|
|
|
- if(layerDataRun !=null && !"".equals(layerDataRun)){
|
|
|
+ StringBuffer sbBbox = new StringBuffer();
|
|
|
+ sbBbox.append("(bbox (");
|
|
|
+ sbBbox.append(layerGroupDsView.getBoxColumn()+",");
|
|
|
+ sbBbox.append(requestParam.getBbox()+"))");
|
|
|
|
|
|
if(filterCqlStr.length() >0){
|
|
|
|
|
|
- filterCqlStr.append(" and "+layerDataRun);
|
|
|
+ filterCqlStr.append(" and "+sbBbox.toString());
|
|
|
}else{
|
|
|
|
|
|
- filterCqlStr.append(layerDataRun);
|
|
|
+ filterCqlStr.append(sbBbox.toString());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ String layerDataType = layerGroupDsView.getLayerDataType();
|
|
|
+ String layerDataRun = layerGroupDsView.getLayerDataRun();
|
|
|
|
|
|
- System.out.println("查询条件:" + filterCqlStr.toString());
|
|
|
+ if(layerDataType !=null && !"".equals(layerDataType) && "cql".equals(layerDataType)){
|
|
|
|
|
|
- String host = layerGroupDsView.getHost().split(",")[0].split(":")[0];
|
|
|
- String port = layerGroupDsView.getHost().split(",")[0].split(":")[1];
|
|
|
+ if(layerDataRun !=null && !"".equals(layerDataRun)){
|
|
|
|
|
|
- Map<String, Object> cqlDsParams = new HashMap<String, Object>();
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.DATABASE.key, layerGroupDsView.getDataBase());
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.DBTYPE.key, layerGroupDsView.getDbType());
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.HOST.key, host);
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.PORT.key, port);
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.USER.key, layerGroupDsView.getUserName());
|
|
|
- cqlDsParams.put(JDBCDataStoreFactory.PASSWD.key, layerGroupDsView.getUserPassword());
|
|
|
- cqlDsParams.put("tableName", layerGroupDsView.getTableName());
|
|
|
+ if(filterCqlStr.length() >0){
|
|
|
|
|
|
+ filterCqlStr.append(" and "+layerDataRun);
|
|
|
+ }else{
|
|
|
|
|
|
- Map<String, Object> mapParams = new HashMap<String, Object>();
|
|
|
+ filterCqlStr.append(layerDataRun);
|
|
|
|
|
|
- if(filterCqlStr.length() >0){
|
|
|
+ }
|
|
|
|
|
|
- mapParams.put("cql", filterCqlStr.toString());
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
+ System.out.println("查询条件:" + filterCqlStr.toString());
|
|
|
|
|
|
- PageResult pageResult = ecqlService.cqlQuery(cqlDsParams, mapParams);
|
|
|
+ String host = layerGroupDsView.getHost().split(",")[0].split(":")[0];
|
|
|
+ String port = layerGroupDsView.getHost().split(",")[0].split(":")[1];
|
|
|
|
|
|
- if (pageResult.getRecordCount() > 0) {
|
|
|
+ Map<String, Object> cqlDsParams = new HashMap<String, Object>();
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.DATABASE.key, layerGroupDsView.getDataBase());
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.DBTYPE.key, layerGroupDsView.getDbType());
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.HOST.key, host);
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.PORT.key, port);
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.USER.key, layerGroupDsView.getUserName());
|
|
|
+ cqlDsParams.put(JDBCDataStoreFactory.PASSWD.key, layerGroupDsView.getUserPassword());
|
|
|
+ cqlDsParams.put("tableName", layerGroupDsView.getTableName());
|
|
|
|
|
|
- List<Map<String, Object>> cqlDataList = (List<Map<String, Object>>) pageResult.getDatas();
|
|
|
|
|
|
- //3根据空间地理数据生成图层二进制数据
|
|
|
-// System.out.println("返回的数据:" + cqlDataList.toString());
|
|
|
+ Map<String, Object> mapParams = new HashMap<String, Object>();
|
|
|
+
|
|
|
+ if(filterCqlStr.length() >0){
|
|
|
|
|
|
- System.out.println("数据查询耗时:"+(System.currentTimeMillis()-currentTimeMillis));
|
|
|
- long start = System.currentTimeMillis();
|
|
|
- //根据图层名称在mysql表中查询样式
|
|
|
- ShapeStyle shapeStyle = new ShapeStyle();
|
|
|
- InputStream in = ClassLoader.getSystemResourceAsStream("images/gis-layout-tools_example-axcbypyj.png");
|
|
|
- try {
|
|
|
- BufferedImage image = ImageIO.read(in);
|
|
|
- shapeStyle.setHeight(12);
|
|
|
- shapeStyle.setWidth(12);
|
|
|
- shapeStyle.setPointMarkerImage(image);
|
|
|
- } catch (IOException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ mapParams.put("cql", filterCqlStr.toString());
|
|
|
}
|
|
|
- byte[] tileByte = ShapeUtils.getTileByte(requestParam.getBbox(), convert(cqlDataList), shapeStyle);
|
|
|
- long end = System.currentTimeMillis();
|
|
|
- System.out.println("根据数据生成瓦片耗时"+(end-start));
|
|
|
- return tileByte;
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
- log.info("根据cql规则:" + filterCqlStr.toString() + "和图层代码:" + requestParam.getLayers() + " 没有找到图层对应的数据源的空间地理数据");
|
|
|
+ PageResult pageResult = ecqlService.cqlQuery(cqlDsParams, mapParams);
|
|
|
+
|
|
|
+ if (pageResult.getRecordCount() > 0) {
|
|
|
+
|
|
|
+ List<Map<String, Object>> cqlDataList = (List<Map<String, Object>>) pageResult.getDatas();
|
|
|
+
|
|
|
+ //3根据空间地理数据生成图层二进制数据
|
|
|
+// System.out.println("返回的数据:" + cqlDataList.toString());
|
|
|
+
|
|
|
+ System.out.println("数据查询耗时:"+(System.currentTimeMillis()-currentTimeMillis));
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ //根据图层名称在mysql表中查询样式
|
|
|
+ ShapeStyle shapeStyle = new ShapeStyle();
|
|
|
+ InputStream in = ClassLoader.getSystemResourceAsStream("images/gis-layout-tools_example-axcbypyj.png");
|
|
|
+ try {
|
|
|
+ BufferedImage image = ImageIO.read(in);
|
|
|
+ shapeStyle.setHeight(12);
|
|
|
+ shapeStyle.setWidth(12);
|
|
|
+ shapeStyle.setPointMarkerImage(image);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ byte[] tileByte = ShapeUtils.getTileByte(requestParam.getBbox(), convert(cqlDataList), shapeStyle);
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ System.out.println("根据数据生成瓦片耗时"+(end-start));
|
|
|
+ return tileByte;
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ log.info("根据cql规则:" + filterCqlStr.toString() + "和图层代码:" + requestParam.getLayers() + " 没有找到图层对应的数据源的空间地理数据");
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
return new byte[0];
|