2017-05-16 2 views
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" 

私が何か間違ったことをやっていますか?

答えて

0

bug hereのように見えますが、簡単なテストケースを書いて、bug reportというファイルを書くことができれば簡単に修正できます。

関連する問題