| | |
| | | package com.se.simu.service; |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | |
| | | import com.se.simu.domain.SeField; |
| | | import com.se.simu.domain.SeLayer; |
| | | import com.se.simu.helper.RsaHelper; |
| | | import com.se.simu.helper.ShpHelper; |
| | | import com.se.simu.helper.StringHelper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Service |
| | | @SuppressWarnings("ALL") |
| | | public class SedbService { |
| | | @Value("${sys.path.in}") |
| | | String inPath; |
| | | |
| | | @Value("${sedb.host}") |
| | | String host; |
| | | |
| | |
| | | |
| | | String password; |
| | | |
| | | |
| | | @Resource |
| | | RestTemplate restTemplate; |
| | | |
| | | public String test() throws Exception { |
| | | public boolean test() throws Exception { |
| | | // 469538.6536261877,4416744.922022615,469853.14714664617,4417049.378602433 |
| | | String bbox = "116.64388473935195,39.884315914604464,116.64754729082588,39.887069143903496"; |
| | | |
| | | String token = getToken(); |
| | |
| | | SeDb db = getSeDb(token); |
| | | db.setBbox(bbox); |
| | | |
| | | List<SeLayer> layers = getLayers(token, db.getDbid()); |
| | | List<SeLayer> layers = getLayers(token, db); |
| | | queryData(token, db, layers); |
| | | |
| | | return db.getDbid(); |
| | | createShps(inPath + "\\20240913", layers); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public String getToken() throws Exception { |
| | |
| | | } |
| | | |
| | | public String getPassword() throws Exception { |
| | | if (StringUtils.isEmpty(password)) { |
| | | if (StringHelper.isEmpty(password)) { |
| | | String key = getPublicKey(); |
| | | RsaHelper.setPublicKey(key); |
| | | password = RsaHelper.encrypt(pwd); |
| | |
| | | return list.stream().filter(db -> dbName.equals(db.getName())).findFirst().orElse(null); |
| | | } |
| | | |
| | | public List<SeLayer> getLayers(String token, String dbid) { |
| | | String uri = String.format("%sgeo-service/entitydb/map/config?dbid=%s&token=%s", host, dbid, token); |
| | | public List<SeLayer> getLayers(String token, SeDb db) { |
| | | String uri = String.format("%sgeo-service/entitydb/map/config?dbid=%s&token=%s", host, db.getDbid(), token); |
| | | JSONObject obj = restTemplate.getForObject(uri, JSONObject.class); |
| | | |
| | | JSONObject data = obj.getJSONObject("data"); |
| | |
| | | String name = jb.getStr("name"); |
| | | if (layerNames.contains(name)) { |
| | | String id = jb.getStr("id"); |
| | | Integer dataType = jb.getInt("_data_type"); |
| | | String queryType = getQueryType(jb); |
| | | List<SeField> fields = JSONUtil.toList(jb.getJSONArray("fields"), SeField.class); |
| | | fields = fields.stream().filter(f -> !sysFields.contains(f.getName())).collect(Collectors.toList()); |
| | | String shpName = shpNames.get(layerNames.indexOf(name)); |
| | | |
| | | layers.add(new SeLayer(id, name, shpName, dataType, fields)); |
| | | layers.add(new SeLayer(id, name, queryType, fields, shpName, db)); |
| | | } |
| | | } |
| | | |
| | | return layers; |
| | | } |
| | | |
| | | private String getQueryType(JSONObject jb) { |
| | | String qt = jb.getStr("pointlod"); |
| | | if (!StringHelper.isEmpty(qt)) { |
| | | return "point"; |
| | | } |
| | | |
| | | qt = jb.getStr("polylinelod"); |
| | | if (!StringHelper.isEmpty(qt)) { |
| | | return "polyline"; |
| | | } |
| | | |
| | | return "polygon"; |
| | | } |
| | | |
| | | public void queryData(String token, SeDb db, List<SeLayer> layers) throws Exception { |
| | |
| | | } |
| | | } |
| | | |
| | | public int getCount(String token, SeDb db, SeLayer layer) { |
| | | private int getCount(String token, SeDb db, SeLayer layer) { |
| | | Map<String, Object> map = new HashMap<>(6); |
| | | map.put("token", token); |
| | | map.put("dbid", db.getDbid()); |
| | |
| | | return obj.getInt("data"); |
| | | } |
| | | |
| | | public JSONArray query(String token, SeDb db, SeLayer layer, int start, int count) { |
| | | private JSONArray query(String token, SeDb db, SeLayer layer, int start, int count) { |
| | | Map<String, Object> map = new HashMap<>(9); |
| | | map.put("token", token); |
| | | map.put("start", start); |
| | |
| | | |
| | | return data.getJSONArray("features"); |
| | | } |
| | | |
| | | public void createShps(String basePath, List<SeLayer> layers) throws Exception { |
| | | File f = new File(basePath); |
| | | if (f.exists() && f.isDirectory()) { |
| | | FileUtil.del(f); |
| | | } |
| | | f.mkdirs(); |
| | | |
| | | for (SeLayer layer : layers) { |
| | | String path = String.format("%s\\%s.shp", basePath, layer.getShpName()); |
| | | if (!ShpHelper.createShp(path, layer)) { |
| | | throw new Exception(layer.getName() + ",创建ShapeFile文件失败!"); |
| | | } |
| | | } |
| | | } |
| | | } |