我遵循的是这里发布的解决方案,该解决方案使用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
<?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
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

发布于 2019-06-26 08:21:08
您正在查看用于较早版本的GeoTools的代码,您可以始终查看GeoTools升级说明,以了解使用新版本库所需的更改。
您需要这种依赖性:
<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) +“里程”);
https://stackoverflow.com/questions/56741911
复制相似问题