package com.terra.proxy.controller;
|
|
import cn.hutool.json.JSONObject;
|
import com.terra.proxy.bean.TiandiantuMergeInfo;
|
import com.terra.proxy.mapper.ServiceMapper;
|
import com.terra.proxy.properties.TerraProperties;
|
import org.apache.http.HttpEntity;
|
import org.apache.http.HttpResponse;
|
import org.apache.http.client.ClientProtocolException;
|
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.MediaType;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.imageio.ImageIO;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.awt.*;
|
import java.awt.image.BufferedImage;
|
import java.io.*;
|
import java.net.URI;
|
import java.net.URISyntaxException;
|
import java.util.List;
|
import java.util.Map;
|
|
|
@RestController
|
@RequestMapping("/")
|
@CrossOrigin
|
public class TiantiduMergeController {
|
|
private Logger log = LoggerFactory.getLogger(TiantiduMergeController.class);
|
|
@Autowired
|
private TerraProperties properties;
|
|
@Resource
|
ServiceMapper mapper;
|
|
/**
|
* 获取天地图影像类融合地址
|
*
|
* @param ditu 底图
|
* @param zhujigroup 注记图层组,用,号隔开
|
*/
|
@RequestMapping(value = "/tianditumerge/getmergeaddress", method = RequestMethod.GET)
|
public String getmergeaddress(HttpServletRequest request, String ditu, String zhujigroup, int resourceid) {
|
StringBuilder sb = new StringBuilder();
|
TiandiantuMergeInfo t = new TiandiantuMergeInfo();
|
t.setBasemap(ditu);
|
t.setZhujimapgroup(zhujigroup);
|
t.setResourceid(resourceid);
|
int result = mapper.addtianditumerge(t);
|
if (result > 0) {
|
sb.append(properties.getProxy().getHost()).append("/ter").append("/" + t.getMergeid() + "/getinfo_w");
|
JSONObject JSON = new JSONObject();
|
JSON.put("url", sb.toString());
|
return JSON.toString();
|
}
|
|
return null;
|
}
|
|
/**
|
* 获取天地图影像类融合地址
|
*
|
* @param ditu 底图
|
* @param zhujigroup 注记图层组,用,号隔开
|
*/
|
@RequestMapping(value = "/arcgis/getarcgismergeaddress", method = RequestMethod.GET)
|
public String getarcgismergeaddress(HttpServletRequest request, String ditu, String zhujigroup, int resourceid) {
|
StringBuilder sb = new StringBuilder();
|
TiandiantuMergeInfo t = new TiandiantuMergeInfo();
|
t.setBasemap(ditu);
|
t.setZhujimapgroup(zhujigroup);
|
t.setResourceid(resourceid);
|
int result = mapper.addtianditumerge(t);
|
if (result > 0) {
|
sb.append(properties.getProxy().getHost()).append("/arcgis/rest/services").append("/" + t.getMergeid() + "/merge");
|
JSONObject JSON = new JSONObject();
|
JSON.put("url", sb.toString());
|
return JSON.toString();
|
}
|
|
return null;
|
}
|
|
/**
|
* arcgis融合代理服务,根据mergeid寻找 注册的图层,http请求返回图片数组,合成返回前端
|
*
|
* @param request
|
* @param mergeid
|
* @return
|
* @throws IOException
|
* @throws URISyntaxException
|
*/
|
@RequestMapping(value = "/ter_/{id}/getinfo_w/**", produces = MediaType.IMAGE_JPEG_VALUE, method = RequestMethod.GET)
|
public void getarcgisimageinfo(HttpServletRequest request, HttpServletResponse httpresponse, @PathVariable(value = "id") int mergeid) throws IOException, URISyntaxException {
|
//根据mergeid获取关联的图层
|
List<Map> list = mapper.querytianditumerge(mergeid);
|
String pathinfo = request.getQueryString();
|
String pstring = "/wmts?" + pathinfo;
|
Map<String, Object> map = list.get(0);
|
map.get("BASEMAP");
|
String basepstring = concataddress(map.get("BASEMAP").toString(), pstring);
|
String str1 = map.get("BASEMAP").toString().concat(basepstring);
|
String[] zhujis = map.get("ZHUJIMAPGROUP").toString().split(",");
|
BufferedImage img = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
|
Graphics g = img.getGraphics();
|
process(str1, g);
|
for (int i = 0; i < zhujis.length; i++) {
|
String temp = concataddress(zhujis[i], pstring);
|
if (!zhujis[i].isEmpty()) {
|
zhujis[i] = zhujis[i].concat(temp);
|
|
process(zhujis[i], g);
|
}
|
}
|
g.dispose();
|
|
ImageIO.write(img, "png", httpresponse.getOutputStream());
|
}
|
|
|
/**
|
* 天地图融合代理服务,根据mergeid寻找 注册的图层,http请求返回图片数组,合成返回前端
|
*
|
* @param request
|
* @param mergeid
|
* @return
|
* @throws IOException
|
* @throws URISyntaxException
|
*/
|
@RequestMapping(value = "/arcgis/rest/services/{id}/merge/**", method = RequestMethod.GET)
|
public void getinfo(HttpServletRequest request, HttpServletResponse httpresponse, @PathVariable(value = "id") int mergeid, String extstr) throws IOException, URISyntaxException {
|
//根据mergeid获取关联的图层
|
List<Map> list = mapper.querytianditumerge(mergeid);
|
String pathinfo = request.getQueryString();
|
String t = request.getRequestURI();
|
if (t.contains("MapServer")) {
|
extstr = t.substring(t.indexOf("merge/MapServer") + 15);
|
}
|
if (t.contains("ImageServer")) {
|
extstr = t.substring(t.indexOf("merge/ImageServer") + 17);
|
}
|
|
String[] ext = extstr.split("/");
|
|
Map<String, Object> map = list.get(0);
|
|
|
String str1 = map.get("BASEMAP").toString();
|
String[] zhujis = map.get("ZHUJIMAPGROUP").toString().split(",");
|
|
|
HttpResponse response = null;
|
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
//解决
|
if (pathinfo != null && pathinfo.contains("f=json")) {
|
HttpGet httpGet = new HttpGet(str1.concat("?f=json"));
|
response = httpClient.execute(httpGet);
|
HttpEntity entitiy = response.getEntity();
|
if (entitiy != null) {
|
entitiy.writeTo(httpresponse.getOutputStream());
|
}
|
} else {
|
if (extstr.contains("query")) {
|
StringBuilder sb = new StringBuilder(zhujis[0]);
|
sb.append("/").append(extstr).append("?").append(pathinfo);
|
HttpGet httpGet = new HttpGet(sb.toString());
|
response = httpClient.execute(httpGet);
|
} else {
|
StringBuilder sb = new StringBuilder(str1);
|
sb.append(extstr);
|
str1 = sb.toString();
|
if (pathinfo != null) {
|
sb.append("?").append(pathinfo);
|
}
|
HttpGet httpGet = new HttpGet(sb.toString());
|
response = httpClient.execute(httpGet);
|
}
|
BufferedImage img = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
|
Graphics g = img.getGraphics();
|
process(str1, g);
|
for (int i = 0; i < zhujis.length; i++) {
|
if (!zhujis[i].isEmpty()) {
|
zhujis[i] = zhujis[i].concat(extstr);
|
process(zhujis[i], g);
|
}
|
}
|
g.dispose();
|
HttpEntity entitiy = response.getEntity();
|
if (entitiy != null) {
|
ImageIO.write(img, "png", httpresponse.getOutputStream());
|
}
|
}
|
|
}
|
|
private byte[] fileconverterToByteArray(File file) {
|
byte[] data = null;
|
try {
|
FileInputStream fis = new FileInputStream(file);
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
int len;
|
byte[] buffer = new byte[1024];
|
while ((len = fis.read(buffer)) != -1) {
|
baos.write(buffer, 0, len);
|
}
|
data = baos.toByteArray();
|
fis.close();
|
baos.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return data;
|
}
|
|
public void process(String url, Graphics g) throws URISyntaxException, ClientProtocolException, IOException {
|
URI uri = new URI(url);
|
HttpResponse response = null;
|
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
HttpGet httpGet = new HttpGet(uri);
|
response = httpClient.execute(httpGet);
|
InputStream inputStream = response.getEntity().getContent();
|
BufferedImage buffer = ImageIO.read(inputStream);
|
|
g.drawImage(buffer.getScaledInstance(256, 256, Image.SCALE_DEFAULT), 0, 0, null);
|
}
|
|
public String concataddress(String str, String pstring) {
|
str = str.substring(str.lastIndexOf("/") + 1, str.length());
|
str = str.replace("_w", "");
|
pstring = pstring.replace("LAYER=getinfo", "LAYER=" + str);
|
return pstring;
|
}
|
|
}
|