155 lines
4.5 KiB
Markdown
155 lines
4.5 KiB
Markdown
---
|
||
title: GeoTools-快速起步
|
||
date: 2023-11-19
|
||
author: ac
|
||
categries:
|
||
- GIS
|
||
tags:
|
||
- GeoTools
|
||
---
|
||
|
||
|
||
|
||
### GeoTools-快速起步
|
||
|
||
#### 1.maven构建
|
||
|
||
```shell
|
||
mvn archetype:generate -DgroupId=org.geotools -DartifactId=tutorial -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart
|
||
```
|
||
|
||
> archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。
|
||
|
||

|
||
|
||
|
||
|
||
#### 2. 添加依赖
|
||
|
||
```xml
|
||
<properties>
|
||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||
<maven.compiler.source>1.7</maven.compiler.source>
|
||
<maven.compiler.target>1.7</maven.compiler.target>
|
||
<!-- 指定geotools的版本号-->
|
||
<geotools.version>31-SNAPSHOT</geotools.version>
|
||
<maven.deploy.skip>true</maven.deploy.skip>
|
||
</properties>
|
||
|
||
<!-- 添加仓库地址-->
|
||
<repositories>
|
||
<repository>
|
||
<id>osgeo</id>
|
||
<name>OSGeo Release Repository</name>
|
||
<url>https://repo.osgeo.org/repository/release/</url>
|
||
<snapshots><enabled>false</enabled></snapshots>
|
||
<releases><enabled>true</enabled></releases>
|
||
</repository>
|
||
<repository>
|
||
<id>osgeo-snapshot</id>
|
||
<name>OSGeo Snapshot Repository</name>
|
||
<url>https://repo.osgeo.org/repository/snapshot/</url>
|
||
<snapshots><enabled>true</enabled></snapshots>
|
||
<releases><enabled>false</enabled></releases>
|
||
</repository>
|
||
</repositories>
|
||
<dependencies>
|
||
<dependency>
|
||
<groupId>junit</groupId>
|
||
<artifactId>junit</artifactId>
|
||
<version>4.13.2</version>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.geotools</groupId>
|
||
<artifactId>gt-shapefile</artifactId>
|
||
<version>${geotools.version}</version>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.geotools</groupId>
|
||
<artifactId>gt-swing</artifactId>
|
||
<version>${geotools.version}</version>
|
||
</dependency>
|
||
</dependencies>
|
||
```
|
||
|
||
|
||
|
||
#### 3. 主程序
|
||
|
||
```java
|
||
import java.io.File;
|
||
import java.util.logging.Logger;
|
||
|
||
import org.geotools.api.data.FileDataStore;
|
||
import org.geotools.api.data.FileDataStoreFinder;
|
||
import org.geotools.api.data.SimpleFeatureSource;
|
||
import org.geotools.map.FeatureLayer;
|
||
import org.geotools.map.Layer;
|
||
import org.geotools.map.MapContent;
|
||
import org.geotools.styling.SLD;
|
||
import org.geotools.api.style.Style;
|
||
import org.geotools.swing.JMapFrame;
|
||
import org.geotools.swing.data.JFileDataStoreChooser;
|
||
|
||
/**
|
||
* Prompts the user for a shapefile and displays the contents on the screen in a map frame.
|
||
*
|
||
* <p>This is the GeoTools Quickstart application used in documentationa and tutorials. *
|
||
*/
|
||
public class Quickstart {
|
||
/**
|
||
* GeoTools Quickstart demo application.
|
||
* Prompts the user for a shapefile and displays its
|
||
* contents on the screen in a map frame
|
||
*/
|
||
public static void main(String[] args) throws Exception {
|
||
|
||
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);
|
||
}
|
||
}
|
||
```
|
||
|
||
选择一份`shp`文件,程序会读取该文件添加到mapContent面板中。
|
||
|
||
<img src="./images/image-20231120142008338.png" alt="image-20231120142008338" style="zoom: 80%;" />
|
||
|
||
注意:shp文件没有被加载到内存中,而是每次需要时都从磁盘读取它。这种方式允许您处理大于内存的数据集。
|
||
|
||
|
||
|
||
#### 4. advance
|
||
|
||
为了更好的交互体验,我们可以通过`DataStoreFinder`获取数据源时添加额外的参数,如设置缓存、创建空间索引等方法来优化。
|
||
|
||
```java
|
||
File file = JFileDataStoreChooser.showOpenFile("shp", null);
|
||
|
||
Map<String, Object> params = new HashMap<>();
|
||
params.put("url", file.toURI().toURL());
|
||
params.put("create spatial index", true);
|
||
params.put("memory mapped buffer", true);
|
||
params.put("charset", "UTF-8");
|
||
|
||
DataStore store = DataStoreFinder.getDataStore(params);
|
||
SimpleFeatureSource featureSource = store.getFeatureSource(store.getTypeNames()[0]);
|
||
```
|
||
|