postgresql – 如何使用GeoTools从hstore列过滤数据?
我正在尝试使用GeoTools从支持PostGIS的数据库中的功能表中过滤功能.
我的配置: > PostgreSQL 8.4 建立 我通过按顺序执行这些sql脚本来设置我的postgis启用数据库: > [PATH_TO_POSTGRESQL_8.4] /share/contrib/postgis-1.5/postgis.sql 然后我导入一些使用OSMembrane从europe.osm中提取的.osm数据. 到目前为止,一切都很好.所有表都包含一些数据. CREATE TABLE ways ( id bigint NOT NULL,"version" integer NOT NULL,user_id integer NOT NULL,tstamp timestamp without time zone NOT NULL,changeset_id bigint NOT NULL,tags hstore,nodes bigint[],CONSTRAINT pk_ways PRIMARY KEY (id) ) 特别是’tags’列包含我想用于过滤的键/值对. SELECT tags FROM ways where tags @> 'natural => coastline' Example result: '"source"=>"PGS","natural"=>"coastline","created_by"=>"almien_coastlines"' 尝试使用GeoTools并不能按预期工作,因为这个例子有望向您展示. package getfeaturesapplication; import java.util.HashMap; import java.util.Map; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.postgis.PostgisNGDataStoreFactory; import org.geotools.data.simple.SimpleFeatureSource; public class GetFeaturesApplication { public static void main(String[] args) { try { Map<String,Object> parameters = new HashMap<String,Object>(); parameters.put(PostgisNGDataStoreFactory.DBTYPE.key,"postgis"); parameters.put(PostgisNGDataStoreFactory.HOST.key,"localhost"); parameters.put(PostgisNGDataStoreFactory.PORT.key,new Integer(5432)); parameters.put(PostgisNGDataStoreFactory.DATABASE.key,"postgis"); parameters.put(PostgisNGDataStoreFactory.SCHEMA.key,"public"); parameters.put(PostgisNGDataStoreFactory.USER.key,"osm"); parameters.put(PostgisNGDataStoreFactory.PASSWD.key,"osm"); DataStore dataStore = DataStoreFinder.getDataStore(parameters); String featureName = "ways"; SimpleFeatureSource featureSource = dataStore.getFeatureSource(featureName); //=> WARNINGS SimpleFeatureCollection features1 = featureSource.getFeatures(); System.out.println("Feature count: " + features1.size()); //406391 FilterFactory2 filterFactory = CommonFactoryFinder.getFilterFactory2(null); Filter filter = filterFactory.equals(filterFactory.literal("natural"),filterFactory.literal("coastline")); SimpleFeatureCollection features2 = featureSource.getFeatures(filter); System.out.println("Features found after filtering: " + !features2.isEmpty()); //SEEMS TO BE ALWAYS EMPTY } catch (Exception ex) { ex.printStackTrace(); } } } 运行此应用程序时,我得到: 31.01.2012 15:27:49 org.geotools.jdbc.JDBCFeatureSource buildFeatureType WARNING: Could not find mapping for 'tags',ignoring the column and setting the feature type read only 31.01.2012 15:27:49 org.geotools.jdbc.JDBCFeatureSource buildFeatureType WARNING: Could not find mapping for 'nodes',ignoring the column and setting the feature type read only Feature count: 406391 Features found after filtering: false hstore和bigint []列存在问题,还是我滥用GeoTools?也许,你可以给我一些提示. 解决方法
我不确定GeoTools PostGIS阅读器是否支持hstore列.
Here are some notes我在PostGIS中导入OSM数据.我的目标是在GeoServer中显示它们,它使用GeoTools数据存储来读取它.我按标签分割数据以使其正常工作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |