Ich möchte den nächsten Punkt von einem Startpunkt (Referenz) berechnen, wenn ich Geometrie point
habe.Finde den nächsten Punkt (Geometriepunkt)
Ich verwende die ports.shp-Datei aus diesem Grund.
Der Code funktioniert die meiste Zeit. Aber manchmal gibt es Null minDistPoint is null
zurück. Ich bin mir nicht sicher, mit welchem Wert minDist
initialisiert werden soll.
public Point findNearestPoint(Point p, SimpleFeatureCollection features) throws FactoryException, TransformException {
Point destination = null;
double minDist = 10.0e+6;
double distance = 0;
Point minDistPoint = null;
try(SimpleFeatureIterator itr = features.features()) {
while(itr.hasNext()) {
SimpleFeature feature = itr.next();
final String EPSG4326 =
"GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\","+
"SPHEROID[\"WGS 84\",6378137,298.257223563,"+
"AUTHORITY[\"EPSG\",\"7030\"]],"+
"AUTHORITY[\"EPSG\",\"6326\"]]," +
"PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],"+
"UNIT[\"degree\", " +"0.01745329251994328,"+
"AUTHORITY[\"EPSG\",\"9122\"]],"+
"AUTHORITY[\"EPSG\",\"4326\"]]";
CoordinateReferenceSystem crs = CRS.parseWKT(EPSG4326);
destination = (Point) feature.getDefaultGeometry();
GeodeticCalculator gc = new GeodeticCalculator(crs);
gc.setStartingPosition(
JTS.toDirectPosition(p.getCoordinate(), crs));
gc.setDestinationPosition(
JTS.toDirectPosition(dest.getCoordinate(), crs));
distance = gc.getOrthodromicDistance();
if(distance < minDist) {
minDist = distance;
minDistPoint = destination;
lastMatched = feature;
}
}
}
int totalmeters = (int) minDist;
int km = totalmeters/1000;
int meters = totalmeters - (km * 1000);
float remaining_cm = (float) (minDist - totalmeters) * 10000;
remaining_cm = Math.round(remaining_cm);
float cm = remaining_cm/100;
System.out.println(
"Distance = " + km + "km " + meters + "m " + cm + "cm");
if(minDistPoint == null) {
return null;
}
return minDistPoint;
}
können Sie versuchen, mit 'Double.POSITIVE_INFINITY', mit dem Sie sicherstellen können, dass mindestens das erste Mal die' if' Bedingung erfüllt wird. – bracco23
@ bracco23: Es scheint gut zu funktionieren, danke! Machen Sie bitte eine Antwort. – George