2

GeoTools WFS-T プラグインを使用して新しい行を作成し、コミット後、.getId() が次のような醜い文字列を返す FeatureId を作成しました。

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 に何か問題があるか、何らかの方法で間違って使用していると確信しています。誰でも光を当てることができますか?

4

1 に答える 1

2

いくつかのことがうまくいかないように見えます - おそらくバグレポートが必要です.

先頭に「new」が付いている FeatureId は一時的な ID です。コミットが呼び出されたら、実際の結果に置き換える必要があります。

これを認識する方法はいくつかあります。

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();
}         

上記の例でドキュメントを更新しました。

于 2011-05-24T23:43:21.523 に答える