java geotools库代码示例:使用Geotools库来读取和显示Shapefile文件(GIS java常用库示例)

这篇具有很好参考价值的文章主要介绍了java geotools库代码示例:使用Geotools库来读取和显示Shapefile文件(GIS java常用库示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

geotools库介绍

Geotools是一个开源的Java库,用于处理和分析地理空间数据,并提供了一组工具和API,以便在Java应用程序中使用地理空间数据。它是一个成熟的GIS库,具有广泛的功能和支持,可用于多种应用场景,包括地图制作、数据分析、空间查询和可视化等。

以下是Geotools库的一些主要特点:

  • 支持多种开放标准:Geotools支持多种开放标准,如OGC、ISO和OpenGIS等,使其可以与其他GIS和地理信息系统进行交互。
  • 处理多种数据格式:Geotools可以处理多种数据格式,包括Shapefile、GeoJSON、KML、GML等。
  • 提供多种数据源:Geotools支持多种数据源,包括文件、数据库、Web服务等。
  • 提供多种空间分析工具:Geotools提供了多种空间分析工具,如缓冲区分析、空间查询、地理编码、空间统计分析等。
  • 支持多种投影和坐标系统:Geotools支持多种投影和坐标系统,并提供了一些常见的投影和坐标系统的定义。
  • 提供多种可视化工具:Geotools提供了多种可视化工具,如渲染器、符号化工具、标注等,可以帮助用户创建动态和交互式地图。

总之,Geotools是一个强大的GIS库,具有广泛的功能和支持,可以用于多种地理空间数据处理和应用场景。

geotools pom

以下是Geotools的POM文件配置示例,可以将其添加到您的Maven项目中以便使用Geotools库:

<dependencies>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-shapefile</artifactId>
    <version>23.5</version>
  </dependency>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-swing</artifactId>
    <version>23.5</version>
  </dependency>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-epsg-hsql</artifactId>
    <version>23.5</version>
  </dependency>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-geojson</artifactId>
    <version>23.5</version>
  </dependency>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-referencing</artifactId>
    <version>23.5</version>
  </dependency>
  <dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-coverage</artifactId>
    <version>23.5</version>
  </dependency>
</dependencies>

这段POM文件中包含了Geotools的一些核心依赖项,包括:

  • gt-shapefile:用于读取和写入Shapefile文件的库。
  • gt-swing:用于创建Swing应用程序的库,包括创建地图框架和显示地图。
  • gt-epsg-hsql:用于提供EPSG投影和坐标系统定义的库。
  • gt-geojson:用于读取和写入GeoJSON文件的库。
  • gt-referencing:用于处理坐标参考系统和投影的库。
  • gt-coverage:用于处理栅格覆盖数据的库。

您可以根据您的具体需求来选择适当的依赖项并添加到您的POM文件中。另外,您还需要确保在您的POM文件中添加了适当的仓库配置,以便从Maven中央仓库下载Geotools库。

maven仓库配置

如果您在Maven项目中添加了Geotools的POM文件配置,并且遇到了类似"Could not find artifact org.geotools:gt-shapefile:pom:23.5 in central (https://repo.maven.apache.org/maven2)"的错误,可能是因为Maven无法从Maven中央仓库中下载Geotools库。

解决此问题的一种方法是将Geotools的仓库配置添加到Maven的settings.xml文件中。在您的Maven安装目录下的conf文件夹中,可以找到settings.xml文件。将以下内容添加到该文件中:

<settings>
  <profiles>
    <profile>
      <id>geotools</id>
      <repositories>
        <repository>
          <id>osgeo</id>
          <name>OSGeo Release Repository</name>
          <url>https://repo.osgeo.org/repository/release/</url>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>geotools</activeProfile>
  </activeProfiles>
</settings>

这个配置将Geotools的仓库添加为Maven的一个配置文件。然后,您可以重新运行Maven命令来下载Geotools库。

另外,您还可以尝试通过在命令行中运行以下命令来解决此问题:

mvn install:install-file -Dfile=[path/to/geotools.jar] -DgroupId=org.geotools -DartifactId=gt-shapefile -Dversion=23.5 -Dpackaging=jar

其中,[path/to/geotools.jar]应替换为Geotools库的实际路径。这个命令将手动将Geotools库添加到您的本地Maven仓库中,以便您的Maven项目可以使用它。

完整代码

import java.io.File;
import java.io.IOException;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.feature.FeatureIterator;
import org.geotools.geometry.jts.JTS;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.MapContext;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.geometry.Geometry;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

public class GISExample {

  public static void main(String[] args) throws IOException {
    // 读取Shapefile文件
    File file = new File("path/to/shapefile.shp");
    Map<String, Object> map = new HashMap<>();
    map.put("url", file.toURI().toURL());
    DataStore dataStore = DataStoreFinder.getDataStore(map);
    String typeName = dataStore.getTypeNames()[0];
    FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = dataStore.getFeatureSource(typeName);
    SimpleFeatureCollection collection = featureSource.getFeatures();

    // 遍历要素并显示几何形状
    try (SimpleFeatureIterator iterator = collection.features()) {
      while (iterator.hasNext()) {
        SimpleFeature feature = iterator.next();
        Geometry geometry = (Geometry) feature.getDefaultGeometry();
        System.out.println(geometry.toString());
      }
    }

    // 显示Shapefile图层
    CoordinateReferenceSystem crs = featureSource.getSchema().getCoordinateReferenceSystem();
    Style style = SLD.createSimpleStyle(featureSource.getSchema());
    MapContext mapContext = new DefaultMapContext();
    mapContext.addLayer(featureSource, style);
    JMapFrame mapFrame = new JMapFrame(mapContext);
    mapFrame.enableToolBar(true);
    mapFrame.enableStatusBar(true);
    mapFrame.setVisible(true);
  }
}

代码解释

上述Java代码演示了如何使用Geotools库来读取和显示Shapefile文件。以下是代码解释:

首先,我们导入所需的Geotools库和Java库:

import java.io.File;
import java.io.IOException;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.feature.FeatureIterator;
import org.geotools.geometry.jts.JTS;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.MapContext;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.geometry.Geometry;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

然后,我们定义一个名为GISExample的类,并在其中定义一个main方法:

public class GISExample {

  public static void main(String[] args) throws IOException {
    // code here
  }
}

接下来,我们读取Shapefile文件:

File file = new File("path/to/shapefile.shp");
Map<String, Object> map = new HashMap<>();
map.put("url", file.toURI().toURL());
DataStore dataStore = DataStoreFinder.getDataStore(map);
String typeName = dataStore.getTypeNames()[0];
FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = dataStore.getFeatureSource(typeName);
SimpleFeatureCollection collection = featureSource.getFeatures();

在这段代码中,我们首先定义一个File对象,代表Shapefile文件的路径。然后,我们创建一个Map对象,并将Shapefile文件的URL存储在其中。接下来,我们使用DataStoreFinder.getDataStore方法来获取数据存储对象,并使用getTypeNames()方法获取第一个要素源的类型名称。最后,我们使用getFeatureSource()方法获取要素源,然后使用getFeatures()方法获取要素集合。

接着,我们遍历要素并显示几何形状:

try (SimpleFeatureIterator iterator = collection.features()) {
  while (iterator.hasNext()) {
    SimpleFeature feature = iterator.next();
    Geometry geometry = (Geometry) feature.getDefaultGeometry();
    System.out.println(geometry.toString());
  }
}

在这段代码中,我们使用SimpleFeatureIterator迭代要素集合,并使用getDefaultGeometry()方法获取要素的默认几何形状。然后,我们使用toString()方法打印几何形状的字符串表示。

最后,我们显示Shapefile图层:

CoordinateReferenceSystem crs = featureSource.getSchema().getCoordinateReferenceSystem();
Style style = SLD.createSimpleStyle(featureSource.getSchema());
MapContext mapContext = new DefaultMapContext();
mapContext.addLayer(featureSource, style);
JMapFrame mapFrame = new JMapFrame(mapContext);
mapFrame.enableToolBar(true);
mapFrame.enableStatusBar(true);
mapFrame.setVisible(true);

在这段代码中,我们使用getCoordinateReferenceSystem()方法获取坐标参考系统,并使用SLD.createSimpleStyle()方法创建一个简单的样式对象。然后,我们创建一个MapContext对象,并使用addLayer()方法将要素源和样式添加到地图上。接下来,我们创建一个JMapFrame对象,并使用enableToolBar()enableStatusBar()setVisible()方法来启用工具栏、状态栏并显示地图。文章来源地址https://www.toymoban.com/news/detail-766323.html

到了这里,关于java geotools库代码示例:使用Geotools库来读取和显示Shapefile文件(GIS java常用库示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.805695 深圳同泰万怡酒店 22.716473 113.826391 深圳宝安中天美景华美达酒店 各种计算方式 计算方式 距离 Elasticsearch:7.12.1 4715.088099751495 自定义公式计算 4720.367727793572 org.gavaghan/geodesy 4715.085736444097 org.geotools/gt-referencing 4701.260

    2024年02月02日
    浏览(52)
  • Geotools处理shape文件

    shape文件结构 filename.shp: shapes filename.shx: 索引文件 filename.dbf: 结构化数据文件 filename.qix: 空间索引文件 filename.fix: fid索引文件 filename.sld: 样式文件 依赖 创建连接 连接参数 Parameter required Description url true .shp文件的url namespace false FeatureType的URI create spatial index false 是否创建空间索

    2024年02月08日
    浏览(29)
  • Geotools对geojson的解析

    在 GeoTools 中,对 GeoJSON 的支持是通过一个插件来完成的,用户同样可以在 Maven 的 pom.xml 配置文件中添加下述的依赖。 有关插件导进来以后,就可以根据相关的接口对Geojson进行解析

    2024年02月09日
    浏览(23)
  • Geotools基本增删改查Feature

    通过Geotools实现对Feature的增删改查 postgis依赖 JDBCDataStore连接参数 Parameter Description dbtype Must be the string postgis host Machine name or IP address to connect to port Port number to connect to, default 5432 schema The database schema to access database The database to connect to user User name passwd Password loose bbox Flag control

    2023年04月23日
    浏览(22)
  • Geotools-PG空间库(Crud,属性查询,空间查询)

    建立连接 经过测试,这套连接逻辑除了支持纯PG以外,也支持人大金仓,凡是套壳PG的都可以尝试一下。我这里的测试环境是Geosence创建的pg SDE,数据库选用的是人大金仓。 查询 查询所有的表格 属性查询空间查询通用 属性筛选查询 用数据库查: 用代码查: 空间筛选 如果不

    2024年01月21日
    浏览(30)
  • shp数据插入sde连接的PostgreSQL库(一)----基于 IntelliJ IDE的GeoTools快速搭建环境

      早就听闻大名鼎鼎的GeoTools,因为自己不搞Java,所以之前没用过,   最近有个需求,一个白模系统,具体是数据是用SDE导入到postgresql中,然后用arcgis server发布了矢量,最后用 arcgis api  for js 4.x拉伸,得到有高度的白模。以前的数据都是通过sde导入的,现在的需求是要通过

    2024年02月03日
    浏览(28)
  • java 逐行读取文件(读取文件每一行、按行读取文件)附带示例代码

    最快的读取每一行 相比较Scanner慢一点 行数达到一定规模,使用此方法读取会非常慢 一次把所有数据都读到内存中,当文件非常大时,会消耗掉内存资源导致程序崩掉,文件规模小推荐使用 统计每一行日志ip出现的次数

    2024年02月11日
    浏览(36)
  • java 使用 CSVWriter 库来导出 CSV 文件

    在 Java 中,可以使用 CSVWriter 库来导出 CSV 文件。以下是使用 CSVWriter 库导出 CSV 文件的基本步骤: 添加CSVWriter库依赖: 在 pom.xml 文件中添加以下依赖: 写入CSV数据: 在代码中,首先需要构造要写入CSV的数据结构,然后通过CSVWriter写入CSV。 以下代码示例演示如何将包含学生信

    2024年02月11日
    浏览(27)
  • Java21来了,赶紧用起来(附代码使用示例)

    https://www.oracle.com/java/technologies/javase/jdk21-archive-downloads.html 官方简介: https://www.oracle.com/cn/java/ 官方更新内容简介:https://openjdk.org/projects/jdk/21/ 官方博客介绍:https://blogs.oracle.com/java/post/the-arrival-of-java-21 Java21 自发布日起,将会长期支持 8 年。(长期维护更新,修复bug) 相当

    2024年02月02日
    浏览(39)
  • 使用Java Swing绘制字符串描边的示例代码

    我最近在工作的实际开发中,遇到了一个需求,给字符串描边,无从那个下手,最终请教了代码生成的AI工具,把这个需求实现了,在次记录供大家参考, 我解决问题之后,觉得还是把这些坑都写清楚,方便 大家少踩坑呢。 此代码有该AI 助手为您带来的,v信小程序:

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包