gpt4 book ai didi

shapefile - 使用 Geotools 从 shapefile 中提取多边形

转载 作者:行者123 更新时间:2023-12-02 23:39:08 28 4
gpt4 key购买 nike

我有一个形状文件 (Sample.shp) 以及其他两个文件(Sample.shx 和 Sample.dbf),其中为孟买的 15 个 pincode 定义了几何图形(多边形)。

我可以使用快速入门教程查看 .shp 文件。

    File file = JFileDataStoreChooser.showOpenFile("shp", null);
if (file == null) {
return;
}

FileDataStore store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();

// Create a map content and add our shapefile to it
MapContent map = new MapContent();
map.setTitle("Quickstart");

Style style = SLD.createSimpleStyle(featureSource.getSchema());
Layer layer = new FeatureLayer(featureSource, style);
map.addLayer(layer);

// Now display the map
JMapFrame.showMap(map);

现在我想将这 15 个 pincode 的几何形状转换为 15 个几何/多边形对象,以便我可以使用 Geometry.contains() 来查找某个点是否落在特定的几何/多边形中。

我尝试过:

ShapefileReader r = new ShapefileReader(new ShpFiles(file),true,false,geometryFactory);
System.out.println(r.getCount(0)); >> returns 51
System.out.println(r.hasNext()); >> returns false

非常感谢任何帮助

最佳答案

事实上,您不需要自己提取几何图形 - 只需创建一个过滤器并迭代过滤后的集合即可。在您的情况下,可能只会返回一项功能。

Filter pointInPolygon = CQL.toFilter("CONTAINS(the_geom, POINT(1 2))");
SimpleFeatureCollection features = source.getFeatures(filter);

SimpleFeatureIterator iterator = features.features();
try {
while (iterator.hasNext()) {
SimpleFeature feature = iterator.next();
Geometry geom = (Geometry) feature.getDefaultGeometry();
/*... do something here */
}
} finally {
iterator.close(); // IMPORTANT
}

有关查询数据存储的完整讨论,请参阅 Query Lab .

关于shapefile - 使用 Geotools 从 shapefile 中提取多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21700957/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com