加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 如何使用GeoTools从hstore列过滤数据?

发布时间:2020-12-13 15:54:14 所属栏目:百科 来源:网络整理
导读:我正在尝试使用GeoTools从支持PostGIS的数据库中的功能表中过滤功能. 我的配置: PostgreSQL 8.4 PostGIS 1.5 渗透0.40.1 OSMembrane build 845 GeoTools 2.7.4 建立 我通过按顺序执行这些sql脚本来设置我的postgis启用数据库: [PATH_TO_POSTGRESQL_8.4] /s
我正在尝试使用GeoTools从支持PostGIS的数据库中的功能表中过滤功能.

我的配置:

> PostgreSQL 8.4
> PostGIS 1.5
>渗透0.40.1
> OSMembrane build 845
> GeoTools 2.7.4

建立

我通过按顺序执行这些sql脚本来设置我的postgis启用数据库:

> [PATH_TO_POSTGRESQL_8.4] /share/contrib/postgis-1.5/postgis.sql
> [PATH_TO_POSTGRESQL_8.4] /share/contrib/postgis-1.5/spatial_ref_sys.sql
> [PATH_TO_POSTGRESQL_8.4] /postgresql/8.4/contrib/hstore.sql
> [PATH_TO_OSMOSIS_0_40_1 / script / pgsnapshot_schema_0.6.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’列包含我想用于过滤的键/值对.
当尝试在SQL中按“natural = coastline”过滤行时,我得到?550行.

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数据存储来读取它.我按标签分割数据以使其正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读