这个GeoTools FeatureId有什么问题?

时间:2011-05-12 23:25:42

标签: java geotools

使用GeoTools WFS-T插件,我创建了一个新行,在提交之后,我有一个FeatureId,其中.getId()返回一个看起来像这样的丑陋字符串:

newmy_database:my_table.9223372036854775807

除了“my_database”开头的“new”这个词是一个惊喜之外,这个数字决不会反映新行的主键(在本例中是“23”)。很公平,我认为这可能是一些内部编号系统。但是,现在我想在另一个表中使用外键来获取此行中新行的主键,并且我不确定如何从此FID获取值。有些地方建议你可以在这样的查询中使用FID:

Filter filter = filterFactory.id(Collections.singleton(fid));
Query query = new Query(tableName, filter);
SimpleFeatureCollection features = simpleFeatureSource.getFeatures(query);

但这在解析所有地方的下划线FID时都失败了!在创建行时,该下划线是存在的(我必须将“my_database:my_table”作为要添加行的表传递给)。

我确定这个ID有问题,或者我以某种方式错误地使用它。任何人都可以放弃任何光明吗?

1 个答案:

答案 0 :(得分:2)

似乎有些事情出错了 - 也许还需要一个错误报告。

开头的“new”FeatureId是临时ID;一旦调用commit,就应该用实际结果替换它。

有很多方法可以了解这一点:

1)您可以侦听BatchFeatureEvent;这提供了关于“temp id”的信息 - > “wfs id”

2)在内部,此信息将从WFS返回的事务结果中解析。结果保存在WFSTransactionState中供您访问。这是在BatchFeatureEvent发明之前。

Transaction transaction = new transaction("insert");
try {
     SimpleFeatureStore featureStore =
           (SimpleFeatureStore) wfs.getFeatureSource( typeName );
     featureStore.setTransaction( transaction );
     featureStore.addFeatures( DataUtilities.collection( feature ) );

     transaction.commit();

     // get the final feature id
     WFSTransactionState wfsts = (WFSTransactionState) transaction.getState(wfs);

     // In this example there is only one fid. Get it.
     String result = wfsts.getFids( typeName )[0];
}
finally {
     transaction.close();
}         

我已使用上面的示例更新了文档: