プロジェクト

全般

プロフィール

« | » 

リビジョン b532e058

高徹 高橋 徹 さんが約9年前に追加

proj4Jライブラリを用いて複数の投影法を指定して地図データを読み込み表示する。

差分を表示:

src/com/torutk/tinymap/TinyMapModel.java
import org.nocrala.tools.gis.data.esri.shapefile.shape.PointData;
import org.nocrala.tools.gis.data.esri.shapefile.shape.ShapeType;
import org.nocrala.tools.gis.data.esri.shapefile.shape.shapes.PolylineShape;
import org.osgeo.proj4j.CRSFactory;
import org.osgeo.proj4j.CoordinateReferenceSystem;
import org.osgeo.proj4j.CoordinateTransform;
import org.osgeo.proj4j.CoordinateTransformFactory;
import org.osgeo.proj4j.ProjCoordinate;
/**
*
......
private File mapFile;
private List<TinyMapPolyline> polylines = new ArrayList<>();
private Function<PointData, Point2D> projection;
public TinyMapModel(File selected) {
mapFile = selected;
projection = p -> new Point2D(p.getX() * 100_000, p.getY() * 100_000); // 1度100kmとした直交座標変換
......
polylines.add(new TinyMapPolyline(xs, ys));
}
}
public static enum MapProjection {
MOLLWEIDE("ESRI:54009"),
MERCATOR("ESRI:54004"),
ECKERT6("ESRI:54010"),
CASSINI("ESRI:54028");
private CRSFactory crsFactory = new CRSFactory();
private CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
private CoordinateReferenceSystem crsWgs84;
private CoordinateReferenceSystem crsProjected;
private CoordinateTransform transform;
private MapProjection(String name) {
crsWgs84 = crsFactory.createFromName("EPSG:4326");
crsProjected = crsFactory.createFromName(name);
transform = ctFactory.createTransform(crsWgs84, crsProjected);
}
public Function<PointData, Point2D> projection() {
return point -> {
ProjCoordinate gcsPoint = new ProjCoordinate(point.getX(), point.getY());
ProjCoordinate pcsPoint = new ProjCoordinate();
pcsPoint = transform.transform(gcsPoint, pcsPoint);
return new Point2D(pcsPoint.x, pcsPoint.y);
};
}
}
}

他の形式にエクスポート: Unified diff