Javaで地図を書きたくてネット上のサンプルを写経したらGeoToolsライブラリがダウンロードできない問題に遭遇しました。
末尾に挙げた「Gradleを介してGeoToolsdependencisを解決するための正しいURLは何ですか」に記されているとおり依存ライブラリのダウンロード先を変更したら解決しました。
遭遇した問題
$ ./gradlew build
> Task :compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
> Could not find org.geotools:gt-shapefile:22.2.
Searched in the following locations:
- https://repo.maven.apache.org/maven2/org/geotools/gt-shapefile/22.2/gt-shapefile-22.2.pom
(以下省略)
解決方法
GeoToolsを使うために、https://repo.osgeo.org/repository/release
をリポジトリに追加しました。
後からわかったことですが、GeoTools公式HPをよく見たら、Mavenの例ですが先のリポジトリが必要であると書いてありました。
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
// このリポジトリを追加したら解決しました。
maven {url "https://repo.osgeo.org/repository/release"}
mavenCentral()
}
dependencies {
compile 'org.geotools:gt-shapefile:22.2'
compile 'org.geotools:gt-swing:24.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
test {
useJUnitPlatform()
}
写経したJavaプログラム
package hellogeotools;
import java.io.File;
import java.io.IOException;
//import org.geotools.data.CachingFeatureSource;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;
public class HelloGeoTools {
public static void main(String[] args) throws IOException {
System.out.print("Javaバージョン(java.version):");
System.out.println(System.getProperty("java.version"));
System.out.print("オペレーティングシステム名(os.name):");
System.out.println(System.getProperty("os.name"));
File file = JFileDataStoreChooser.showOpenFile("shp", null);
if (file == null) {
System.err.println("No such file.");
return;
}
FileDataStore store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();
MapContent map = new MapContent();
map.setTitle("Quickstart");
Style style = SLD.createSimpleStyle(featureSource.getSchema());
Layer layer = new FeatureLayer(featureSource, style);
map.addLayer(layer);
JMapFrame.showMap(map);
}
}
参考
環境
- Ubuntu 18.04
- Java 11.0.10