0

我按照此处的指南从 Maven Archetype 创建了一个新的 Jersey HTTP 服务器。一切都很好,资源按预期返回字符串,这里是资源:

package com.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("myresource")
    public class MyResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {         

        return "Hello from my Server";
}
}

我按照此处的指南使用下载的 ArcGIS Runtime SDK。我创建了以下简单的 Java 类来确定几何(圆、矩形、多边形……)内部是否有一个点:

package geoC;
import com.esri.arcgisruntime.geometry.Geometry;
import com.esri.arcgisruntime.geometry.GeometryEngine;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReferences;

public class checkInside {

public static void main(String[] args) {

    Point pt = new Point( -0.04473405456542423, 39.98776978688296, SpatialReferences.getWgs84());       

    String rectangleJson = "{\"xmin\":-0.05225854142896743,\"ymin\":39.98251082423102,\"xmax\":-0.02856927140946811,\"ymax\":39.993164240959295,\"spatialReference\":{\"wkid\":4326}}";
    Geometry rectangle = (Geometry) Geometry.fromJson(rectangleJson);       

    //check if the point is inside the rectangle or not
    boolean decision = GeometryEngine.contains( rectangle, pt );            
    System.out.println(decision);
    }
}

此类工作正常,根据位置输入产生“真”或“假”。

当我尝试合并第一段和第二段代码时出现问题,我将第二段代码的内容放在第一段代码中:

package com.example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.esri.arcgisruntime.geometry.Geometry;
import com.esri.arcgisruntime.geometry.GeometryEngine;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.SpatialReferences;

@Path("myresource")
public class MyResource {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {  

    Point pt = new Point( -0.04473405456542423, 39.98776978688296, SpatialReferences.getWgs84());       

    String rectangleJson = "{\"xmin\":-0.05225854142896743,\"ymin\":39.98251082423102,\"xmax\":-0.02856927140946811,\"ymax\":39.993164240959295,\"spatialReference\":{\"wkid\":4326}}";
    Geometry rectangle = (Geometry) Geometry.fromJson(rectangleJson);       

    boolean decision = GeometryEngine.contains( rectangle, pt );        
    System.out.println(decision);

    return "Hello from my Server";
}
}

mvn compile ---> 构建成功

mvn exec:java ---> 构建失败

错误是:无法在项目 TestArcGISJersey 上执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli):执行 Java 类时发生异常。null:InvocationTargetException:com/esri/arcgisruntime/geometry/Geometry:com.esri.arcgisruntime.geometry.Geometry -> [帮助 1]

此外,如果我评论 2 行(布尔决策 = ... + System.out.println(...) )然后 mvn exec:java 成功执行,但是当我向资源发送 GET 请求时,请求失败而不是得到预期的字符串。

有人在这里有任何想法吗?非常感谢。

4

2 回答 2

0

ArcGIS Runtime SDK for Java 不适合作为在服务器环境中使用的 API。虽然某些 API 可能有效,但不支持此用例。API 不是为在服务器容器中使用而设计的。

但是,对于您描述的用例,您可能需要查看此处的 Java Geometry API 开源项目:https ://github.com/Esri/geometry-api-java 。

尽管如此,在陈述了这一现实之后,我确实认为它是服务器开发的可行解决方案是很自然的。这么好的问题!

于 2017-05-21T22:40:14.643 回答
0

好像还没有拿到license,记住所有的ArcGIS产品都需要有license,付不付都无所谓。

我建议您按照 ArcGIS Developers (ArcGIS runtime for JAVA 100.0.0) “许可您的应用程序”中的这些步骤进行操作

在那里你可以看到你需要这样的一行:

https://developers.arcgis.com/java/latest/guide/license-your-app.htm

    // license with a license key
ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud#########,day-month-year,####################");

我不确定在 Maven Archetype 的 Jersey HTTP 服务器上使用 ArcGIS 运行时。您将需要额外的测试并始终查看服务器日志。

于 2016-12-01T09:23:16.023 回答