0
GeoToolsとそのOGR Pluginを使用してJavaでMapInfo MAPファイルを読み込もうとしています。特定の並べ替え順序でフィーチャを繰り返し処理したいと思います。私はこの目的のためにGeoToolのクエリとSortByを使用しようとしていますが、生成されるSQLクエリに構文エラーがあります。GeoTools Query with SortBy:生成されたSQLの構文が間違っています
コードサンプル:
OGRDataStoreFactory factory = new JniOGRDataStoreFactory();
Map<String, String> connectionParams = new HashMap<String, String>();
connectionParams.put("DriverName", "MapInfo File");
connectionParams.put("DatasourceName", new File("MyTable.TAB").getAbsolutePath());
DataStore store = factory.createDataStore(connectionParams);
SimpleFeatureSource featureSource = store.getFeatureSource("MyTable");
Query query = new Query();
query.setSortBy(new SortBy[]{ new SortByImpl(new AttributeExpressionImpl("PED"), SortOrder.ASCENDING)});
SimpleFeatureIterator features = featureSource.getFeatures(query).features();
int count = 0;
while (features.hasNext() && count++ < 10) {
Feature feature = features.next();
System.out.println(feature);
}
これはstderrに出力このエラーメッセージで結果:
ERROR 1: SQL Expression Parsing Error: syntax error, unexpected ORDER, expecting '.'. Occurred around :
SELECT FID, * FROM 'MyTable' ORDER BY PED
^
問題は、テーブル名の前後に単一引用符です。
setSortBy()
行を削除すると、機能が返されます。したがって、データアクセスは一般的に機能します。
私は二重引用符でコマンドライン上ogr2ogr
を使用して、同じクエリをしようとすると期待どおりに動作します:
ogr2ogr -f "CSV" /vsistdout/ MyTable.TAB -lco GEOMETRY=AS_WKT -sql "SELECT FID, * FROM \"MyTable\" ORDER BY \"PED\" ASC"
私が何か間違ったことをやっていますか?