Geotools--生成等值线

好久没用geotools去写东西了,因为近几年一直在接触所谓数字孪生和可视化相关项目,个人的重心也往前端可视化去倾斜,在后端的开发上到变得停滞下来。

这次用的是geotools 28.4版本,生成等值线的方法在

	<dependency>
		    <groupId>org.geotools</groupId>
		    <artifactId>gt-process-feature</artifactId>
		    <version>28.4</version>
		</dependency>

这是使用矢量点生成等值线,geotools中也提供了栅格影像生成等值线的方法,都是一个名字

ContourProcess,栅格的方法在:

	<dependency>
		    <groupId>org.geotools</groupId>
		    <artifactId>gt-process-raster</artifactId>
		    <version>${geotools.version}</version>
		</dependency>

中,本文仅结束矢量点生成等值线方法:

全部代码如下:

import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.geotools.data.DefaultTransaction;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.Transaction;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.data.simple.SimpleFeatureStore;
import org.geotools.process.vector.ContourProcess;

public class MainP {

	public static void main(String[] args) {
        //点shp
		SimpleFeatureCollection sf = getGeometries("D:\\tmp\\inPoints.shp");
		ContourProcess cp = new ContourProcess();
		double[] levels = new double[]{};
		//如果进行线平滑,可能出现线相交情况!,“zfirst”为点shp图层中描述高度的属性字段名称,这里设置20米间隔进行等高线划分
		SimpleFeatureCollection outSF = cp.execute(sf, "zfirst", levels, 20.0, false, false, null);
		buildShpByFeatureCollection(outSF,"D:\\tmp\\contour.shp");
	}
	
	public static SimpleFeatureCollection getGeometries(String shpFilePath) {
		
		try {
			FileDataStore store = FileDataStoreFinder.getDataStore(new File(shpFilePath));
	        SimpleFeatureSource featureSource = store.getFeatureSource();
	        SimpleFeatureCollection simpleFeatureCollection = featureSource.getFeatures();
	        return simpleFeatureCollection;
		}catch(Exception ex) {
			System.out.println(ex.getMessage());
		}
		return null;
	}
	
	public static void buildShpByFeatureCollection(SimpleFeatureCollection collection, String outShpPath) {
        File outShpFile = new File(outShpPath);

        ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();

        try {
            Map<String, Serializable> params = new HashMap<>();
            params.put("url", outShpFile.toURI().toURL());
            params.put("create spatial index", Boolean.TRUE);

            ShapefileDataStore newDataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore(params);
            newDataStore.createSchema(collection.getSchema());

            Transaction transaction = new DefaultTransaction("create");

            String typeName = newDataStore.getTypeNames()[0];
            SimpleFeatureSource featureSource = newDataStore.getFeatureSource(typeName);

            if (featureSource instanceof SimpleFeatureStore) {
                SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
                featureStore.setTransaction(transaction);
                try {
                    featureStore.addFeatures(collection);
                    transaction.commit();
                } catch (Exception problem) {
                    problem.printStackTrace();
                    transaction.rollback();
                } finally {
                    transaction.close();
                }
                System.exit(0);
            } else {
                System.out.println(typeName + " does not support read/write access");
                System.exit(1);
            }
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        }

    }
    

}

Geotools是一个用于地理空间数据处理的Java库,它提供了一系列强大的功能,其中包括绘制等值线。 绘制等值线是一种展示数据变化的方法,通过在具有相等数值的点之间绘制曲线来呈现变化的梯度。使用Geotools可以轻松地将地理空间数据转换为等值线图。 要绘制等值线,首先需要准备一个包含高程或其他相关数据的栅格图层。这可以是一个栅格数据集,例如常见的DEM(数字高程模型),或者是由其他方法计算得出的栅格图像。 首先,我们需要使用Geotools加载栅格图层。这可以通过使用相关的读取器类(例如GeoTiffReader)来完成。该类可以读取栅格图像,并将其转换为一个表示地理空间的对象,通常是GridCoverage2D。 接下来,我们需要使用Geotools等值线生成工具来生成等值线。可以使用ContourProcess类来实现这一目标。这个类提供了各种方法来生成等值线,例如使用简单的线性插值方法或更复杂的算法。 一旦生成等值线,我们可以使用绘图工具来将其绘制到一个图像或地图上。这可以使用Geotools中的JFreeChart库来实现。 最后,我们可以将生成等值线图保存为一个图像文件,以供进一步使用或展示。这可以使用Geotools的图像输出工具类,例如ImageIO,来实现。 绘制等值线Geotools提供的一种强大功能,它们可以用于许多不同的地理空间数据可视化应用,例如地形分析、气象预测、环境研究等。通过使用Geotools,我们可以轻松地将地理空间数据转换为等值线图,并对数据分布进行可视化和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值