概要
在 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 |