Java网络调用ArcGIS REST API

Java网络调用ArcGIS REST API

一、说明

  • ArcGIS REST API(图层要素查询、叠加分析)
  • Java 网络请求调用(HttpClient)

二、记录

1. 添加 httpclient 依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.62</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc -->
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>fluent-hc</artifactId>
  <version>4.5.10</version>
</dependency>

2.网络请求工具类

package com.demo.utils;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URISyntaxException;
import java.util.List;

/**
 * 网络请求工具类
 * */
public class RequestUtils {
    /**
     * 通过 url,Post 请求数据
     * @param url
     * @return result
     * */
    public static String fPost(String url) throws IOException {
        // System.out.println("======= use fPost =======");
        return fPost(url, null);
    }

    /**
     * 通过 url,Post 请求数据
     * @param url
     * @return result
     * */
    public static String fPost(String url, List<NameValuePair> nvps) throws IOException {
        // System.out.println("======= use fPost-nvps =======");
        Request request = Request.Post(url);
        if(nvps != null && nvps.size() > 0){
            request = request.bodyForm(nvps);
        }
        return request.execute().returnContent().asString();
    }

    /**
     * 通过 url,Get 请求数据
     * @param url
     * @return result
     * */
    public static String fGet(String url) throws IOException {
        // System.out.println("======= use fGet =======");
        return fGet(url, null);
    }

    /**
     * 通过 url,Get 请求数据
     * @param url
     * @return result
     * */
    public static String fGet(String url, List<NameValuePair> nvps) throws IOException {
        // System.out.println("======= use fGet-nvps =======");
        Request request = Request.Get(url);
        if(nvps != null && nvps.size() > 0){
            request = request.bodyForm(nvps);
        }
        return request.execute().returnContent().asString();
    }

    /**
     * 通过 url,Post 请求数据
     * @param url
     * @param nvps
     * @return result
     * */
    public static String hPost(String url, List<NameValuePair> nvps) throws IOException {
        // System.out.println("======= use hPost =======");
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        if(nvps != null && nvps.size() > 0){
            httpPost.setEntity(new UrlEncodedFormEntity(nvps));
        }
        CloseableHttpResponse response = httpClient.execute(httpPost);
        HttpEntity httpEntity = response.getEntity();
        return EntityUtils.toString(httpEntity);
    }

    /**
     * 通过 url,Get 请求数据
     * @param url
     * @param nvps
     * @return result
     * */
    public static String hGet(String url, List<NameValuePair> nvps) throws IOException, URISyntaxException {
        // System.out.println("======= use hGet =======");
        CloseableHttpClient httpClient = HttpClients.createDefault();
        URIBuilder uriBuilder = new URIBuilder(url);
        if(nvps != null && nvps.size() > 0){
            uriBuilder.setParameters(nvps);
        }
        HttpGet httpGet = new HttpGet(uriBuilder.build());
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity httpEntity = response.getEntity();
        return EntityUtils.toString(httpEntity);
    }

    /**
     * 将内容输入出到指定txt
     * @param filePath txt文件路径
     * @param content 文本内容
     * */
    public static void outText(String filePath, Object content) throws IOException {
        // System.out.println("======= use outText =======");
        File file = new File(filePath);
        // 判断文件是否存在
        if(file.exists()){
            file.createNewFile();
        }
        // 内容输出到文件
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file));
        outputStreamWriter.write(content.toString());
        outputStreamWriter.close();
    }
}

3.ArcGIS REST API 调用工具类

Query (Map Service/Layer) - query

Geometry Service - buffer、cut、lengths、union、project

package com.demo.utils;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * ArcGIS REST API 调用工具类
 * */
public class GeomSerUtils {

    // GeometryServer 服务地址==http://127.0.0.1:6080/arcgis/manager/service.html?name=Geometry.GeometryServer&folder=Utilities
    private final static String geometryServerUrl = "http://127.0.0.1:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer";

    /**
     * 缓冲区(单位:米)
     * @param inSr 坐标系wkid e.g. 32650
     * @param x 经度
     * @param y 纬度
     * @param distances 半径
     * @return result
     * */
    public static String reqBuffer(String inSr, String x, String y, String distances) throws IOException {
        String url = geometryServerUrl + "/buffer";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("inSr", inSr));
        params.add(new BasicNameValuePair("unit", "9001")); // 单位:米
        params.add(new BasicNameValuePair("distances", distances));
        params.add(new BasicNameValuePair("geometries"
                , "{'geometryType':'esriGeometryPoint','geometries': [{'x':"+x+",'y':"+y+"}]}"));
        return RequestUtils.fPost(url, params);
    }

    /**
     * 根据缓冲区,进行查询
     * @param queryUrl MapServer URL e.g. ( http://127.0.0.1:6080/arcgis/rest/services/test001/MapServer/0 )
     * @param geometry 缓冲区
     * @param where 查询条件,null = "1=1"
     * @param outFields 输出字段,null = "*"
     * @return result
     * */
    public static String reqQueryByBuffer(String queryUrl, String geometry, String where, String outFields) throws IOException {
        String url = queryUrl+"/query";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("where", where == null ? "1=1" : where));
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("geometryType", "esriGeometryPolygon"));
        params.add(new BasicNameValuePair("spatialRel", "esriSpatialRelIntersects"));
        params.add(new BasicNameValuePair("returnGeometry", "true"));
        params.add(new BasicNameValuePair("outFields", outFields == null ? "*" : outFields));
        params.add(new BasicNameValuePair("geometry", geometry));
        return RequestUtils.fPost(url, params);
    }

    /**
     * 剪切
     * @param sr 坐标系wkid e.g. 32650
     * @param cutter 剪切线 e.g. {"paths":[[[123.22,12.22],[123.22,12.22],[123.22,12.22]]]}
     * @param target 目标几何图形 e.g. {"geometries":[{"paths":[[[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22],[123.22,12.22]]]}],"geometryType":"esriGeometryPolyline"}
     * @return result
     * */
    public static String reqCut(String sr, String cutter, String target) throws IOException {
        String url = geometryServerUrl+"/cut";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("sr", sr));
        params.add(new BasicNameValuePair("cutter", cutter));
        params.add(new BasicNameValuePair("target", target));
        return RequestUtils.fPost(url, params);
    }

    /**
     * 计算长度(单位:米)
     * @param sr 坐标系wkid e.g. 32650
     * @param polylines 线几何图形 e.g. [{"paths":[[[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22],[123.22,12.22]]]}]
     * @return result
     * */
    public static String reqLenths(String sr, String polylines) throws IOException {
        String url = geometryServerUrl+"/lengths";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("sr", sr));
        params.add(new BasicNameValuePair("lengthUnit", "9001")); // 单位:米
        params.add(new BasicNameValuePair("calculationType", "preserveShape"));
        params.add(new BasicNameValuePair("polylines", polylines));
        return RequestUtils.fPost(url, params);
    }

    /**
     * 合并
     * @param sr 坐标系wkid e.g. 32650
     * @param geometries 几何图形 e.g. {"geometries":[{"paths":[[[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22],[123.22,12.22]]]},{"paths":[[[123.22,12.22],[123.22,12.22],[123.22,12.22]]]}],"geometryType":"esriGeometryPolyline"}
     * @return result
     * */
    public static String reqUnion(String sr, String geometries) throws IOException {
        String url = geometryServerUrl + "/union";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("sr", sr));
        params.add(new BasicNameValuePair("geometries", geometries));
        return RequestUtils.fPost(url, params);
    }

    /**
     * 坐标系转换
     * @param inSR 原wkid,e.g. 4326
     * @param outSR 目标wkid,e.g. 32650
     * @param geometries 原几何图形,e.g. {"geometries":[{"x":123.22,"y":12.22}],"geometryType":"esriGeometryPoint"}
     * @return result
     * */
    public static String reqProject(String inSR, String outSR, String geometries) throws IOException {
        String url = geometryServerUrl+"/project";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("f", "json"));
        params.add(new BasicNameValuePair("inSR", inSR));
        params.add(new BasicNameValuePair("outSR", outSR));
        params.add(new BasicNameValuePair("geometries", geometries));
        return RequestUtils.fPost(url, params);
    }

}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
ArcGIS REST API是Esri公司提供的一种基于HTTP/HTTPS协议的Web API,用于访问和管理ArcGIS Server和ArcGIS Online等GIS服务和资源。ArcGIS REST API支持多种编程语言和平台,例如Java、Python、JavaScript、.NET、iOS和Android等。以下是ArcGIS REST API的一些主要特点和功能: 1. 支持多种HTTP操作:ArcGIS REST API支持多种HTTP操作,例如GET、POST、PUT和DELETE等,可以用于从GIS服务中获取或修改数据。 2. 支持多种数据格式:ArcGIS REST API支持多种数据格式,包括JSON、XML、HTML和二进制等,可以根据需要选择合适的数据格式。 3. 支持多种GIS服务和资源:ArcGIS REST API支持多种GIS服务和资源,例如地图服务、要素服务、空间分析服务、地理编码服务、地理处理服务、Web地图和Web应用程序等。 4. 支持数据查询和过滤:ArcGIS REST API支持对GIS服务中的数据进行查询和过滤,可以根据要求返回符合条件的数据。 5. 支持安全认证和授权:ArcGIS REST API支持多种安全认证和授权方式,例如基本认证、令牌认证和OAuth2.0认证等,可以保证GIS服务和资源的安全性和可靠性。 6. 支持跨域访问:ArcGIS REST API支持跨域访问,可以在不同的域名和网站之间进行数据交互和共享。 7. 支持自定义扩展:ArcGIS REST API支持自定义扩展,可以根据需要扩展和定制GIS服务和资源的功能和特性。 总之,ArcGIS REST API是Esri公司提供的一种基于HTTP/HTTPS协议的Web API,用于访问和管理ArcGIS Server和ArcGIS Online等GIS服务和资源,具有多种特点和功能,可以满足不同用户的需求和要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趴着喝可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值