首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GeoTools Maven问题-导入混淆

GeoTools Maven问题-导入混淆
EN

Stack Overflow用户
提问于 2019-06-24 18:14:30
回答 1查看 1.1K关注 0票数 1

我遵循的是这里发布的解决方案,该解决方案使用Java将平方转换为平方米。我对maven的进口有问题。

具体来说,在GeoTools Maven Quickstart 这里之后,仍然会得到org.geotools.measure.Measure.valueOf()org.opengis.geometry.coordinate.Polygon.getCentroid()Cannot resolve method错误。奇怪的是,对于前者,我找到了一些源代码,它说它使用javax.measure.Measure,但我在那进口上也没有运气。

IDE视图:

这是我的档案:

pom.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myapp.me</groupId>
    <artifactId>my-app</artifactId>
    <packaging>war</packaging>
    <version>1.0.0</version>
    <name>my app code</name>

    <parent>
        <groupId>com.myapp.me</groupId>
        <artifactId>my-app-root</artifactId>
        <version>1.0.0</version>
    </parent>

    <prerequisites>
        <maven>3</maven>
    </prerequisites>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <geotools.version>21.0</geotools.version>
    </properties>

    <organization>
        <name>my-org</name>
        <url>myurl</url>
    </organization>

    <repositories>
        <repository>
            <id>maven2-repository.dev.java.net</id>
            <name>Java.net repository</name>
            <url>http://download.java.net/maven/2</url>
        </repository>
        <repository>
            <id>osgeo</id>
            <name>Open Source Geospatial Foundation Repository</name>
            <url>http://download.osgeo.org/webdav/geotools/</url>
        </repository>
        <repository>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>boundless</id>
            <name>Boundless Maven Repository</name>
            <url>http://repo.boundlessgeo.com/main</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</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>
</project>

Java

代码语言:javascript
运行
复制
import si.uom.SI;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.feature.Feature;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.geometry.Geometry;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.geometry.coordinate.Polygon;
import org.opengis.geometry.primitive.Point;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.geotools.measure.Measure; 

public class Mapper {

    private Measure<Double, Area> calcArea(SimpleFeature feature) {
        Polygon p = (Polygon) feature.getDefaultGeometry();
        Point centroid = p.getCentroid();
        try {
            String code = "AUTO:42001," + centroid.getX() + "," + centroid.getY();
            CoordinateReferenceSystem auto = CRS.decode(code);

            MathTransform transform = CRS.findMathTransform(DefaultGeographicCRS.WGS84, auto);

            Polygon projed = (Polygon) JTS.transform(p, transform);
            return Measure.valueOf(projed.getArea(), SI.SQUARE_METRE);
        } catch (MismatchedDimensionException | TransformException | FactoryException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return Measure.valueOf(0.0, SI.SQUARE_METRE);
    }
}

我做错了什么?

编辑:

响应RealSkeptic的建议,尝试最新的Javax导入。

注意右边的导入,但在左边没有使用它的选项。好像它找不到。然而,它可以找到import javax.measure.quantity.Area

EN

回答 1

Stack Overflow用户

发布于 2019-06-26 08:21:08

您正在查看用于较早版本的GeoTools的代码,您可以始终查看GeoTools升级说明,以了解使用新版本库所需的更改。

您需要这种依赖性:

代码语言:javascript
运行
复制
<dependency>
   <groupId>systems.uom</groupId>
   <artifactId>systems-common-java8</artifactId>
   <version>0.7.2</version>
</dependency>

包名已经更改,导致一些常见的搜索,并在升级时替换: 搜索javax.measure.unit.Unit替换javax.measure.Unit 搜索ConversionException替换IncommensurableException 这是一个检查过的异常,在GeoTools库中找到该异常的区域,我们现在返回一个IllegalArgument异常。 搜索转换器== UnitConverter.IDENTITY替换converter.isIdentity() 搜索javax.measure.unit.NonSI替换导入si.uom.NonSI 搜索javax.measure.unit.SI替换导入si.uom.SI 搜索SI.METER替换SI.METRE 搜索javax.measure.converter.UnitConverter替换javax.measure.UnitConverter 搜索javax.measure.unit.UnitFormat替换导入javax.measure.format.UnitFormat 搜索Unit.ONE替换AbstractUnit.ONE 搜索Dimensionless.UNIT替换AbstractUnit.ONE 搜索Unit.valueOf(unitString)替换Units.parseUnit(unitString)

并使用Quanaties:

使用单位 如果您以前使用了代码中的单元,以帮助进行单元转换或简单地保持单元的直线。您可能有如下代码: System.out.println(dist.doubleValue(SI.KILOMETER) +“Km”;System.out.println(dist.doubleValue(NonSI.MILE) +“Length>”); 您将发现它不再编译。应该将其转换为使用Quantity类。 进口javax.measure.Quantity;进口javax.measure.quantity.Length;进口si.uom.SI;进口systems.uom.common.USCustomary;进口tec.uom.se.quantity.Quantities;进口tec.uom.se.unit.MetricPrefix;数量dist =Quantities.getQuantity(距离,SI.METRE);Quantities.getQuantity+“公里”;System.out.println(dist.to(USCustomary.MILE) +“里程”);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56741911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档