首页 > 解决方案 > 形状文件或 geojson 到数据库

问题描述

我正在尝试读取大形状文件并尝试使用 geotools 查找 lat 和 long 是否在坐标中

有没有办法将形状文件存储到数据库中?或者将存储为geojson并更快地退休以检查纬度和经度是否在坐标中?Node js 或 java 哪个更容易实现。

标签: javanode.jsspringgeotools

解决方案


最简单的方法是使用数据存储打开Shapefile(或 GeoJSON)文件,然后将要素从该存储复制到PostGIS(或其他数据库)数据存储。只需确保在您的 maven pom.xml 中包含相关模块即可。

  public static void main(String[] args) throws MalformedURLException, IOException {
    File inFile = new File("/home/ian/Data/states/states.shp");
    Map<String, Object> outParams = new HashMap<>();
    outParams.put(PostgisNGDataStoreFactory.DBTYPE.key, PostgisNGDataStoreFactory.DBTYPE.sample);
    outParams.put(PostgisNGDataStoreFactory.USER.key, "ian");
    outParams.put(PostgisNGDataStoreFactory.PASSWD.key, "ianian");
    outParams.put(PostgisNGDataStoreFactory.HOST.key, "localhost");
    outParams.put(PostgisNGDataStoreFactory.PORT.key, 5432);
    outParams.put(PostgisNGDataStoreFactory.DATABASE.key, "ian");
    outParams.put(PostgisNGDataStoreFactory.SCHEMA.key, "public");
    // Read
    DataStore inputDataStore = DataStoreFinder.getDataStore(
            Collections.singletonMap("url", URLs.fileToUrl(inFile)));

    String inputTypeName = inputDataStore.getTypeNames()[0];
    SimpleFeatureType inputType = inputDataStore.getSchema(inputTypeName);

    FeatureSource<SimpleFeatureType, SimpleFeature>
            source = inputDataStore.getFeatureSource(inputTypeName);

    FeatureCollection<SimpleFeatureType, SimpleFeature>
            inputFeatureCollection = source.getFeatures();

    DataStore newDataStore = DataStoreFinder.getDataStore(outParams);


    String typeName = inputTypeName;

    newDataStore.createSchema(inputType);
    SimpleFeatureStore featureStore = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName);

    /*
     * //Optional Filter block //filter String geometryPropertyName =
     * inputType.getGeometryDescriptor().getLocalName();
     * CoordinateReferenceSystem targetCRS =
     * inputType.getGeometryDescriptor().getCoordinateReferenceSystem();
     * 
     * double x1 = 11.5; double y1 = 49.8; double x2 = 12.0; double y2 = 50.1;
     * 
     * ReferencedEnvelope bbox = new ReferencedEnvelope(x1, y1, x2, y2,
     * targetCRS); FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
     * Filter filter = ff.bbox(ff.property(geometryPropertyName), bbox);
     */
    // write results
    featureStore.addFeatures(source.getFeatures(/*filter*/));
    //tidy up
    inputDataStore.dispose();
    newDataStore.dispose();
    newDataStore.createSchema(inputType);
    String typeName1 = newDataStore.getTypeNames()[0];

    SimpleFeatureStore featureStore1 = (SimpleFeatureStore) newDataStore.getFeatureSource(typeName1);

    featureStore1.addFeatures(inputFeatureCollection);

    inputDataStore.dispose();
    newDataStore.dispose();
  }

推荐阅读