You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ArcGIS Java SDK中用CreationDate查询ServiceFeatureTable报错求助

基于CreationDate字段查询ServiceFeatureTable的解决方案

当然可以基于CreationDate字段查询ServiceFeatureTable!你遇到的Invalid query parameters错误,几乎可以肯定是日期格式不匹配导致的——ArcGIS Runtime SDK对日期字段的查询语法要求和你之前用REST直接请求的方式略有不同,咱们来一步步解决:

问题根源

你直接把毫秒时间戳字符串传给CreationDate的where子句,但ArcGIS的服务端期望的是符合标准格式的日期字符串(比如UTC格式的yyyy-MM-dd'T'HH:mm:ss.SSS'Z'),而不是原始的毫秒数。

解决方案1:转换为标准日期字符串

把你的毫秒时间戳转换成ArcGIS支持的日期格式,再传入where子句:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

// 要查询的起始时间(毫秒时间戳)
long startTimeMillis = 1527671854180L;

// 转换为ArcGIS服务端认可的UTC日期字符串
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedStartDate = dateFormatter.format(new Date(startTimeMillis));

// 构建查询参数
ServiceFeatureTable featureTable = new ServiceFeatureTable(url);
QueryParameters query = new QueryParameters();
// 注意日期值要放在单引号内
query.setWhereClause("CreationDate >= '" + formattedStartDate + "'");
query.setReturnGeometry(true);

ListenableFuture<FeatureQueryResult> queryFeaturesAsync = featureTable.queryFeaturesAsync(query);

解决方案2:使用TimeExtent(更推荐)

ArcGIS Runtime SDK提供了TimeExtent类,专门用于时间范围查询,不需要手动拼接where子句,SDK会自动处理日期格式,更简洁可靠:

// 定义时间范围:从指定毫秒时间戳到当前时间
TimeExtent timeExtent = new TimeExtent(new Date(1527671854180L), new Date());

ServiceFeatureTable featureTable = new ServiceFeatureTable(url);
QueryParameters query = new QueryParameters();
query.setTimeExtent(timeExtent); // 设置时间范围
query.setReturnGeometry(true);

ListenableFuture<FeatureQueryResult> queryFeaturesAsync = featureTable.queryFeaturesAsync(query);

额外注意事项

  • 先确认你的服务中CreationDate字段的类型确实是esriFieldTypeDate(可以通过REST服务的字段详情页面查看),如果是字符串类型,那查询语法又不一样了。
  • 如果你的要素服务使用的是非UTC时区,需要调整日期格式化时的时区,确保和服务端一致。

内容的提问来源于stack exchange,提问作者Naveen Kumar H S

火山引擎 最新活动