使用令牌在 Android 中使用 Esri REST-API 访问 GeoJSON-String
Access GeoJSON-String with Esri REST-API in Android with Token
我已经为此苦苦思索了一段时间,但没有找到可行的解决方案:
我想从自己的 ArcGIS Web 服务器获取 GeoJSON 字符串。我想使用 REST-API 并让它在浏览器中工作。我只需输入我的用户名和密码,在我进行身份验证后,我可以使用 link 来获取 GeoJSON 字符串。
在 Android 中,我尝试了不同的解决方案,其中之一 - 当然 - 是按照 Esri-Website 上的说明进行操作。他们在这里解释了如何设置 Username 和 Password 来创建 UserCredential。 UserCredential 现在被传递给方法以与 REST-Link 一起创建一个新的 ArcGISDynamicMapServiceLayer。所以他们得到了一个新层,但是没有方法,你可以通过 UserCredential 和 Link 来得到一个细绳。
因为我想获得我认为的多边形,ArcGISFeatureLayer 可以帮助我。但是,如果我传递给定的用户信息和 Link,我只会返回一个空对象。
这是我最有希望的代码片段:
String url = "https://domain.de/arcgis/rest/services/FeatureEditor/FeatureEditor/FeatureServer/13/query?where=fahrzeug_id+%3D+21+AND+auftrag_revisionnewest+%3D+1+AND+auftrag_id+%3D+45&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&units=esriSRUnit_Foot&outFields=*&returnGeometry=true&outSR=4326&returnDistinctValues=false&returnIdsOnly=false&returnCountOnly=false&returnExtentOnly=false&returnZ=false&returnM=false&f=geojson";
UserCredentials creds = new UserCredentials();
creds.setSSLRequired(true);
creds.setUserAccount("username", "password");
ArcGISFeatureLayer featureLayer = new ArcGISFeatureLayer(url,(ArcGISFeatureLayer.Options)null,creds);
所以最好的办法是只使用 Link 访问 GeoJSON-String。但是如何使用用户名和密码访问HTTP?
如果您想在 ArcGIS Android SDK 中执行这种查询方式,您必须创建一个 FeatureLayer,然后使用 Query class 来定义相当于您的查询字符串。这将返回一个 FeatureSet,其中包含应该具有您要查找的信息的要素,但它不会采用 GeoJSON 的形式。 FeatureSet 上有一个 toJSON 方法可能会为您提供您正在寻找的东西,但我并不肯定。如果您只想要一个纯粹的 JSON 响应,您将不得不自己执行 HTTP 请求,在您的请求中设置 REST API 需要的任何身份验证,然后处理响应。
我已经为此苦苦思索了一段时间,但没有找到可行的解决方案: 我想从自己的 ArcGIS Web 服务器获取 GeoJSON 字符串。我想使用 REST-API 并让它在浏览器中工作。我只需输入我的用户名和密码,在我进行身份验证后,我可以使用 link 来获取 GeoJSON 字符串。 在 Android 中,我尝试了不同的解决方案,其中之一 - 当然 - 是按照 Esri-Website 上的说明进行操作。他们在这里解释了如何设置 Username 和 Password 来创建 UserCredential。 UserCredential 现在被传递给方法以与 REST-Link 一起创建一个新的 ArcGISDynamicMapServiceLayer。所以他们得到了一个新层,但是没有方法,你可以通过 UserCredential 和 Link 来得到一个细绳。 因为我想获得我认为的多边形,ArcGISFeatureLayer 可以帮助我。但是,如果我传递给定的用户信息和 Link,我只会返回一个空对象。
这是我最有希望的代码片段:
String url = "https://domain.de/arcgis/rest/services/FeatureEditor/FeatureEditor/FeatureServer/13/query?where=fahrzeug_id+%3D+21+AND+auftrag_revisionnewest+%3D+1+AND+auftrag_id+%3D+45&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&units=esriSRUnit_Foot&outFields=*&returnGeometry=true&outSR=4326&returnDistinctValues=false&returnIdsOnly=false&returnCountOnly=false&returnExtentOnly=false&returnZ=false&returnM=false&f=geojson";
UserCredentials creds = new UserCredentials();
creds.setSSLRequired(true);
creds.setUserAccount("username", "password");
ArcGISFeatureLayer featureLayer = new ArcGISFeatureLayer(url,(ArcGISFeatureLayer.Options)null,creds);
所以最好的办法是只使用 Link 访问 GeoJSON-String。但是如何使用用户名和密码访问HTTP?
如果您想在 ArcGIS Android SDK 中执行这种查询方式,您必须创建一个 FeatureLayer,然后使用 Query class 来定义相当于您的查询字符串。这将返回一个 FeatureSet,其中包含应该具有您要查找的信息的要素,但它不会采用 GeoJSON 的形式。 FeatureSet 上有一个 toJSON 方法可能会为您提供您正在寻找的东西,但我并不肯定。如果您只想要一个纯粹的 JSON 响应,您将不得不自己执行 HTTP 请求,在您的请求中设置 REST API 需要的任何身份验证,然后处理响应。