Geotools GeometryFactory 详解

default

概要

在 GeoTools 中,GeometryFactory 专门负责创建和管理JTS中的几何对象。

为什么没有内置 GeometryFactory 的常量?主要原因是存在多种不同的 GeometryFactory,适配不同的使用情况。

下文中针对不同的 GeometryFactory 作以说明。


各种 GeometryFactory 说明

标准 GeometryFactory

1
2
// 默认精度模型 (双精度)
GeometryFactory factory1 = new GeometryFactory();

指定精度的 GeometryFactory

1
2
3
4
// 指定精度模型
GeometryFactory factory2 = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING));
GeometryFactory factory3 = new GeometryFactory(new PrecisionModel(PrecisionModel.FIXED));
GeometryFactory factory4 = new GeometryFactory(new PrecisionModel(1000)); // 指定scale

指定坐标序列的 GeometryFactory

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 坐标序列
CoordinateSequenceFactory defaultCSF = 
    new CoordinateSequenceFactory();

// 打包坐标序列(提高性能)
CoordinateSequenceFactory csFactory = 
    new PackedCoordinateSequenceFactory();

// 双精度打包坐标序列(默认就是双精度)
CoordinateSequenceFactory csFactory = 
    new PackedCoordinateSequenceFactory(PackedCoordinateSequenceFactory.DOUBLE);

// 使用单精度打包坐标序列(节省空间)
CoordinateSequenceFactory csFactory = 
    new PackedCoordinateSequenceFactory(PackedCoordinateSequenceFactory.FLOAT);

// 轻量级坐标序列(节省内存)
CoordinateSequenceFactory geoToolsCSF = 
    new LiteCoordinateSequenceFactory();

GeometryFactory factory = new GeometryFactory(
    new PrecisionModel(), 
    4326, 
    csFactory
);

默认

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 获取默认工厂(通常配置了合适的坐标序列)
GeometryFactory defaultFactory = JTSFactoryFinder.getGeometryFactory();

// 获取带特定坐标序列的工厂
GeometryFactory packedFactory = JTSFactoryFinder.getGeometryFactory(
    new PackedCoordinateSequenceFactory()
);

// 获取带精度模型的工厂
GeometryFactory fixedPrecisionFactory = JTSFactoryFinder.getGeometryFactory(
    new PrecisionModel(1000)
);

指定坐标系

1
2
3
4
// 指定坐标系SRID
GeometryFactory wgs84Factory = new GeometryFactory(new PrecisionModel(), 4326);
GeometryFactory webMercatorFactory = new GeometryFactory(new PrecisionModel(), 3857);
GeometryFactory utmFactory = new GeometryFactory(new PrecisionModel(), 32650);

总结

使用场景 推荐的GeometryFactory配置
一般用途 JTSFactoryFinder.getGeometryFactory()
内存敏感 使用LiteCoordinateSequenceFactory
高性能计算 使用PackedCoordinateSequenceFactory.DOUBLE
存储优化 使用PackedCoordinateSequenceFactory.FLOAT
特定精度需求 配置相应的PrecisionModel
坐标系明确 指定正确的SRID
Licensed under CC BY-NC-SA 4.0
Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……