添加geotools
This commit is contained in:
		
							parent
							
								
									1690647e0a
								
							
						
					
					
						commit
						5e767e2121
					
				| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: Qgis制作网格
 | 
				
			||||||
 | 
					date: 2023-11-18
 | 
				
			||||||
 | 
					author: ac
 | 
				
			||||||
 | 
					categries:
 | 
				
			||||||
 | 
					 - GIS
 | 
				
			||||||
 | 
					tags: 
 | 
				
			||||||
 | 
					 - Qgis
 | 
				
			||||||
 | 
					 - grid
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Qgis 制作网格
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 1. 数据准备
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://t{s}.tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=ea3530e6803b44025cfa81500eaae01f
 | 
				
			||||||
 | 
					————————————————
 | 
				
			||||||
 | 
					版权声明:本文为CSDN博主「wu_223」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 | 
				
			||||||
 | 
					原文链接:https://blog.csdn.net/qq_34790644/article/details/86535456
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=ea3530e6803b44025cfa81500eaae01f
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,154 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					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]);
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,261 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: GeoTools-创建要素Feature
 | 
				
			||||||
 | 
					date: 2023-11-19
 | 
				
			||||||
 | 
					author: ac
 | 
				
			||||||
 | 
					categries:
 | 
				
			||||||
 | 
					 - GIS
 | 
				
			||||||
 | 
					tags:
 | 
				
			||||||
 | 
					 - GeoTools
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### GeoTools-创建要素
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> csv2shp,通过csv转点shp文件,学习:
 | 
				
			||||||
 | 
					>
 | 
				
			||||||
 | 
					> 1. 如何创建`FeatureType`、`FeatureCollection`和`Features`;
 | 
				
			||||||
 | 
					> 2. 通过`GeometryFactory`构建`Points`点集;
 | 
				
			||||||
 | 
					> 3. 输出shp文件;
 | 
				
			||||||
 | 
					> 4. 设置投影。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 1.数据准备
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					下载一份[csv文件](https://docs.geotools.org/latest/userguide/_downloads/d4bcf8751cc3f33a9fb673902a960e53/locations.csv) ,内容格式如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```text
 | 
				
			||||||
 | 
					LAT, LON, CITY, NUMBER
 | 
				
			||||||
 | 
					46.066667, 11.116667, Trento, 140
 | 
				
			||||||
 | 
					44.9441, -93.0852, St Paul, 125
 | 
				
			||||||
 | 
					13.752222, 100.493889, Bangkok, 150
 | 
				
			||||||
 | 
					45.420833, -75.69, Ottawa, 200
 | 
				
			||||||
 | 
					44.9801, -93.251867, Minneapolis, 350
 | 
				
			||||||
 | 
					46.519833, 6.6335, Lausanne, 560
 | 
				
			||||||
 | 
					48.428611, -123.365556, Victoria, 721
 | 
				
			||||||
 | 
					-33.925278, 18.423889, Cape Town, 550
 | 
				
			||||||
 | 
					-33.859972, 151.211111, Sydney, 436
 | 
				
			||||||
 | 
					41.383333, 2.183333, Barcelona, 914
 | 
				
			||||||
 | 
					39.739167, -104.984722, Denver, 869
 | 
				
			||||||
 | 
					52.95, -1.133333, Nottingham, 800
 | 
				
			||||||
 | 
					45.52, -122.681944, Portland, 840
 | 
				
			||||||
 | 
					37.5667,129.681944,Seoul,473
 | 
				
			||||||
 | 
					50.733992,7.099814,Bonn,700,2016
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 2.添加依赖
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```xml
 | 
				
			||||||
 | 
					<dependencies>
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					        <groupId>org.geotools</groupId>
 | 
				
			||||||
 | 
					        <artifactId>gt-shapefile</artifactId>
 | 
				
			||||||
 | 
					        <version>${geotools.version}</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					        <groupId>org.geotools</groupId>
 | 
				
			||||||
 | 
					        <artifactId>gt-epsg-hsql</artifactId>
 | 
				
			||||||
 | 
					        <version>${geotools.version}</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					</dependencies>
 | 
				
			||||||
 | 
					<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>
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 3. 示例
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```java
 | 
				
			||||||
 | 
					package learning;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.geotools.api.feature.simple.SimpleFeature;
 | 
				
			||||||
 | 
					import org.geotools.api.feature.simple.SimpleFeatureType;
 | 
				
			||||||
 | 
					import org.geotools.data.DataUtilities;
 | 
				
			||||||
 | 
					import org.geotools.data.shapefile.ShapefileDataStore;
 | 
				
			||||||
 | 
					import org.geotools.data.shapefile.ShapefileDataStoreFactory;
 | 
				
			||||||
 | 
					import org.geotools.feature.simple.SimpleFeatureBuilder;
 | 
				
			||||||
 | 
					import org.geotools.geometry.jts.JTSFactoryFinder;
 | 
				
			||||||
 | 
					import org.geotools.swing.data.JFileDataStoreChooser;
 | 
				
			||||||
 | 
					import org.locationtech.jts.geom.Coordinate;
 | 
				
			||||||
 | 
					import org.locationtech.jts.geom.GeometryFactory;
 | 
				
			||||||
 | 
					import org.locationtech.jts.geom.Point;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.swing.*;
 | 
				
			||||||
 | 
					import java.io.BufferedReader;
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileReader;
 | 
				
			||||||
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @author ac
 | 
				
			||||||
 | 
					 * @date 2023/11/20 15:44
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class Csv2Shape {
 | 
				
			||||||
 | 
					    public static void main(String[] args) throws Exception {
 | 
				
			||||||
 | 
					        // Set cross-platform look & feel for compatability
 | 
				
			||||||
 | 
					        UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        File file = JFileDataStoreChooser.showOpenFile("csv", null);
 | 
				
			||||||
 | 
					        if (file == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * We use the DataUtilities class to create a FeatureType that will describe the data in our
 | 
				
			||||||
 | 
					         * shapefile.
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * See also the createFeatureType method below for another, more flexible approach.
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * 通过 DataUtilities 创建 FeatureType ,类似定义shp文件的名称、几何类型、属性字段、空间参考等信息。
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        final SimpleFeatureType TYPE =
 | 
				
			||||||
 | 
					                DataUtilities.createType(
 | 
				
			||||||
 | 
					                        "Location",
 | 
				
			||||||
 | 
					                        "the_geom:Point:srid=4326,"
 | 
				
			||||||
 | 
					                                + // <- the geometry attribute: Point type
 | 
				
			||||||
 | 
					                                "name:String,"
 | 
				
			||||||
 | 
					                                + // <- a String attribute
 | 
				
			||||||
 | 
					                                "number:Integer" // a number attribute
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					        System.out.println("TYPE:" + TYPE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * A list to collect features as we create them.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        List<SimpleFeature> features = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * GeometryFactory will be used to create the geometry attribute of each feature,
 | 
				
			||||||
 | 
					         * using a Point object for the location.
 | 
				
			||||||
 | 
					         * 创建几何工厂实例,要素构建者实例
 | 
				
			||||||
 | 
					         * 通过缓冲流一行行读取,解析数据,构建Point实例
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
 | 
				
			||||||
 | 
					        SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
 | 
				
			||||||
 | 
					            /* First line of the data file is the header */
 | 
				
			||||||
 | 
					            String line = reader.readLine();
 | 
				
			||||||
 | 
					            System.out.println("Header: " + line);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (line = reader.readLine(); line != null; line = reader.readLine()) {
 | 
				
			||||||
 | 
					                if (line.trim().length() > 0) { // skip blank lines
 | 
				
			||||||
 | 
					                    String[] tokens = line.split("\\,");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    double latitude = Double.parseDouble(tokens[0]);
 | 
				
			||||||
 | 
					                    double longitude = Double.parseDouble(tokens[1]);
 | 
				
			||||||
 | 
					                    String name = tokens[2].trim();
 | 
				
			||||||
 | 
					                    int number = Integer.parseInt(tokens[3].trim());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    /* Longitude (= x coord) first ! */
 | 
				
			||||||
 | 
					                    // 创建几何实例geometry - point
 | 
				
			||||||
 | 
					                    Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // 创建要素实例feature
 | 
				
			||||||
 | 
					                    //        feature
 | 
				
			||||||
 | 
					                    //        ↙    ↘
 | 
				
			||||||
 | 
					                    // geometry   properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    featureBuilder.add(point);
 | 
				
			||||||
 | 
					                    featureBuilder.add(name);
 | 
				
			||||||
 | 
					                    featureBuilder.add(number);
 | 
				
			||||||
 | 
					                    SimpleFeature feature = featureBuilder.buildFeature(null);
 | 
				
			||||||
 | 
					                    features.add(feature);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * Get an output file name and create the new shapefile
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * 设置输出路径
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        File newFile = getNewShapeFile(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 创建数据存储工厂实例
 | 
				
			||||||
 | 
					        ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Map<String, Serializable> params = new HashMap<>();
 | 
				
			||||||
 | 
					        params.put("url", newFile.toURI().toURL());
 | 
				
			||||||
 | 
					        params.put("create spatial index", Boolean.TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 创建新的数据存储,会输出shp文件
 | 
				
			||||||
 | 
					        ShapefileDataStore newDataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore(params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * TYPE is used as a template to describe the file contents
 | 
				
			||||||
 | 
					         * 添加类型描述
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        newDataStore.createSchema(TYPE);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Prompt the user for the name and path to use for the output shapefile
 | 
				
			||||||
 | 
					     * 弹窗让用户选择新生成的shp文件的保存位置
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param csvFile the input csv file used to create a default shapefile name
 | 
				
			||||||
 | 
					     * @return name and path for the shapefile as a new File object
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static File getNewShapeFile(File csvFile) {
 | 
				
			||||||
 | 
					        String path = csvFile.getAbsolutePath();
 | 
				
			||||||
 | 
					        String newPath = path.substring(0, path.length() - 4) + ".shp";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        JFileDataStoreChooser chooser = new JFileDataStoreChooser("shp");
 | 
				
			||||||
 | 
					        chooser.setDialogTitle("Save shapefile");
 | 
				
			||||||
 | 
					        chooser.setSelectedFile(new File(newPath));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int returnVal = chooser.showSaveDialog(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (returnVal != JFileDataStoreChooser.APPROVE_OPTION) {
 | 
				
			||||||
 | 
					            // the user cancelled the dialog
 | 
				
			||||||
 | 
					            System.exit(0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        File newFile = chooser.getSelectedFile();
 | 
				
			||||||
 | 
					        if (newFile.equals(csvFile)) {
 | 
				
			||||||
 | 
					            System.out.println("Error: cannot replace " + csvFile);
 | 
				
			||||||
 | 
					            System.exit(0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return newFile;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 参考文章
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[1] Feature Tutorial https://docs.geotools.org/latest/userguide/tutorial/feature/csv2shp.html
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,133 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: GeoTools-简介
 | 
				
			||||||
 | 
					date: 2023-11-28
 | 
				
			||||||
 | 
					author: ac
 | 
				
			||||||
 | 
					categries:
 | 
				
			||||||
 | 
					 - GIS
 | 
				
			||||||
 | 
					tags:
 | 
				
			||||||
 | 
					 - GeoTools
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### GeoTools-简介
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1.简介
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GeoTools是一个开源(LGPL) Java代码库,它为地理空间数据的操作提供了符合标准的方法,例如实现地理信息系统。GeoTools库数据结构基于开放地理空间联盟(OGC)规范。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					了解GeoTools库是如何构建的,这有助于您找出需要在应用程序中包含哪些jar。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 2. GeoTools 库
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GeoTools库形成了一个软件“堆栈”,每个模块都建立在前一个定义的模块之上。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					“堆栈”的每一层都是建立在下一层之上的,例如:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 如果要使用`Referencing` ,你需要先使用`gt-api`,`gt-metadata`,`gt-references`,为了确保`EPSG`codes的正确,还需要使用一个插件`gt-epsg-hsql`来定义EPSG。
 | 
				
			||||||
 | 
					- 如果要使用`Coverage`,需要使用`gt-api`,`gt-metadata`,`gt-referencing(包含gt-epsg-hsql)`,`gt-main`和`gt-coverage`。为了充分利用Coverage模块,我们使用了一个插件,比如`gt-geotiff`来访问`GeoTIFF`文件。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`Maven`工具能够计算项目中需要的`jar`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					下面是各个模块的作用:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| Module           | Purpose                                                      |
 | 
				
			||||||
 | 
					| :--------------- | :----------------------------------------------------------- |
 | 
				
			||||||
 | 
					| `gt-render`      | Map API, with Java2D rendering engine for mapping.           |
 | 
				
			||||||
 | 
					| `gt-jdbc`        | Implements for accessing spatial database                    |
 | 
				
			||||||
 | 
					| `gt-xml`         | Implements of common spatial XML formats                     |
 | 
				
			||||||
 | 
					| `gt-cql`         | Implements of Common Query Language for filters              |
 | 
				
			||||||
 | 
					| `gt-coverage`    | Implementation for accessing raster information              |
 | 
				
			||||||
 | 
					| `gt-main`        | Data API, with default implementations of filter, feature, etc… |
 | 
				
			||||||
 | 
					| `gt-referencing` | Implementation of co-ordinate location and transformation    |
 | 
				
			||||||
 | 
					| `gt-metadata`    | Implementation of identification and description             |
 | 
				
			||||||
 | 
					| `gt-api`         | Definition of interfaces for common spatial concepts         |
 | 
				
			||||||
 | 
					| `jts`            | JTS Topology Suite (external library) implementing Geometry  |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 3. GeoTools 插件
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GeoTools提供插件来支持额外的数据格式和不同的坐标参考系统等功能。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| Module           | JAR                 | Plugin                           |
 | 
				
			||||||
 | 
					| :--------------- | :------------------ | :------------------------------- |
 | 
				
			||||||
 | 
					| `gt-render`      |                     |                                  |
 | 
				
			||||||
 | 
					| `gt-jdbc`        | `gt-jdbc-db2`       | Geometry in DB2                  |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-h2`        | Pure Java “H2” database          |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-mysql`     | Geometry in MySQL                |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-oracle`    | Oracle SDO Geometry              |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-postgis`   | PostgreSQL extension PostGIS     |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-sqlserver` | SQL Server                       |
 | 
				
			||||||
 | 
					|                  | `gt-jdbc-hana`      | SAP HANA                         |
 | 
				
			||||||
 | 
					| `gt-xml`         |                     |                                  |
 | 
				
			||||||
 | 
					| `gt-cql`         |                     |                                  |
 | 
				
			||||||
 | 
					| `gt-main`        | `gt-shape`          | Shapefile read/write support     |
 | 
				
			||||||
 | 
					|                  | `gt-wfs`            | WFS read/write support           |
 | 
				
			||||||
 | 
					| `gt-coverage`    | `gt-geotiff`        | GeoTIFF raster format            |
 | 
				
			||||||
 | 
					|                  | `gt-arcgrid`        | arcgrid format                   |
 | 
				
			||||||
 | 
					|                  | `gt-mif`            | MIF format                       |
 | 
				
			||||||
 | 
					|                  | `gt-image`          | JPG, PNG, TIFF formats           |
 | 
				
			||||||
 | 
					| `gt-referencing` | `epsg-access` .     | Official EPSG database in Access |
 | 
				
			||||||
 | 
					|                  | `epsg-hsql`         | Pure Java port of EPSG database  |
 | 
				
			||||||
 | 
					|                  | `epsg-wkt`          | Lightweight copy of EPSG codes   |
 | 
				
			||||||
 | 
					|                  | `epsg-postgresql`   | PostgreSQL port of EPSG database |
 | 
				
			||||||
 | 
					| `gt-metadata`    |                     |                                  |
 | 
				
			||||||
 | 
					| `gt-api`         |                     |                                  |
 | 
				
			||||||
 | 
					| `jts`            |                     |                                  |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					通常,每个层至少需要一个插件才能让GeoTools做一些事情。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 4.GeoTools 扩展
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					更进一步,在GeoTools库的基础上实现了一些有趣的“扩展”。这些扩展提供了使用核心库的全部功能构建在GeoTools之上的额外功能。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这些扩展相互独立,可能在您的应用程序中使用:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| JAR             | Extension                                            |
 | 
				
			||||||
 | 
					| :-------------- | :--------------------------------------------------- |
 | 
				
			||||||
 | 
					| `gt-app-schema` | Map from application schema to complex feature model |
 | 
				
			||||||
 | 
					| `gt-brewer`     | Generation of styles using color brewer              |
 | 
				
			||||||
 | 
					| `gt-complex`    | Support for making custom complex feature model      |
 | 
				
			||||||
 | 
					| `gt-graph`      | Work with graph and network traversals               |
 | 
				
			||||||
 | 
					| `gt-grid`       | Dynamicly generate features from grid definiton      |
 | 
				
			||||||
 | 
					| `gt-transform`  | Transform features on the fly                        |
 | 
				
			||||||
 | 
					| `gt-wms`        | Web Map Server client                                |
 | 
				
			||||||
 | 
					| `gt-wmts`       | Web Map Tile Server client                           |
 | 
				
			||||||
 | 
					| `gt-xsd`        | Parsing/Encoding for common OGC schemas              |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 5.XML
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					为了支持GeoTools中的XML模块,我们以JAR形式捆绑了几个XML模式(以避免每次需要时都需要从Internet下载它们)。此外,这些jar包含一个由Eclipse Modeling Framework生成的Java数据结构。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| JAR               | Schema                        |
 | 
				
			||||||
 | 
					| :---------------- | :---------------------------- |
 | 
				
			||||||
 | 
					| `net.opengis.ows` | open web services schema      |
 | 
				
			||||||
 | 
					| `net.opengis.wfs` | web feature service           |
 | 
				
			||||||
 | 
					| `net.opengis.wps` | web processing service schema |
 | 
				
			||||||
 | 
					| `net.opengis.wcs` | web coverage service schema   |
 | 
				
			||||||
 | 
					| `net.opengis.wfs` | web feature service schema    |
 | 
				
			||||||
 | 
					| `org.w3.xlink`    | XLink schema                  |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XSD解析器通过一系列XSD插件使用这些工具。这些插件指示如何使用Eclipse XSD库解析和编码附加内容,以解析XML模式文档,并提供“绑定”,显示如何解析和编码Java类,如String、Date、URL和Geometry。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| JAR             | Bindings                          |
 | 
				
			||||||
 | 
					| :-------------- | :-------------------------------- |
 | 
				
			||||||
 | 
					| `gt-xsd-core`   | Basic types defined by XML schema |
 | 
				
			||||||
 | 
					| `gt-xsd-fes`    | filter 2.0                        |
 | 
				
			||||||
 | 
					| `gt-xsd-filter` | filter (used by OGC CAT and WFS)  |
 | 
				
			||||||
 | 
					| `gt-xsd-kml`    | keyhole markup language           |
 | 
				
			||||||
 | 
					| `gt-xsd-wfs`    | web feature service               |
 | 
				
			||||||
 | 
					| `gt-xsd-wps`    | web processing service            |
 | 
				
			||||||
 | 
					| `gt-xsd-gml3`   | geographic markup language 3      |
 | 
				
			||||||
 | 
					| `gt-xsd-gml2`   | geographic markup language 2      |
 | 
				
			||||||
 | 
					| `gt-xsd-ows`    | open web services                 |
 | 
				
			||||||
 | 
					| `gt-xsd-wcs`    | web coverage service              |
 | 
				
			||||||
 | 
					| `gt-xsd-wms`    | web map service                   |
 | 
				
			||||||
 | 
					| `gt-xsd-sld`    | style layer descriptor            |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 参考文章
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[1] architecture https://docs.geotools.org/latest/userguide/welcome/architecture.html
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 57 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 22 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 31 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 30 KiB  | 
		Loading…
	
		Reference in New Issue