Hallo,
ich programmiere zur Zeit ein umfangreiches Programm, komme jedoch an einer Stelle nicht weiter...
Um nicht mein ganzes Programm erklären zu müssen , erkläre ich nur diesen Ausschnitt...
Ich habe eine Shapefile (Kontinente der Welt werden als Polygone dargestellte) und sagen wir mal 2 beliebige Koordinaten.
Ich versuche diese 2 Punkte miteinander zu verbinden um dann festzustellen, ob die erstellte Linie ein Feature aus dieser Shapefile berührt/schneidet... Falls diese sich berühren soll als Wert "true", falls nicht der Wert "false" ausgegeben werden..
Hier mein Programmausschnitt mit 2 bel. Punkten und einzulesender Shapefile...
.......
........
Mein Ergebnis bleibt ein DefaultFeatureResult egal ob die Linie die Shape schneidet oder nicht. Wäre toll wenn mir jemand weiterhelfen könnte bzw. mir erklären könnte wo mein Fehler ist..
Mit besten Grüßen
Der Problematiker
ich programmiere zur Zeit ein umfangreiches Programm, komme jedoch an einer Stelle nicht weiter...
Um nicht mein ganzes Programm erklären zu müssen , erkläre ich nur diesen Ausschnitt...
Ich habe eine Shapefile (Kontinente der Welt werden als Polygone dargestellte) und sagen wir mal 2 beliebige Koordinaten.
Ich versuche diese 2 Punkte miteinander zu verbinden um dann festzustellen, ob die erstellte Linie ein Feature aus dieser Shapefile berührt/schneidet... Falls diese sich berühren soll als Wert "true", falls nicht der Wert "false" ausgegeben werden..
Hier mein Programmausschnitt mit 2 bel. Punkten und einzulesender Shapefile...
.......
Java:
File landmask = new File("C:\\....Shapefile.....");
if (landmask == null) {
return;
}
FileDataStore landmaskstore = FileDataStoreFinder.getDataStore(landmask);
FeatureSource featureSource = landmaskstore.getFeatureSource();
Coordinate[] coordinates = new Coordinate[2];
coordinates[0]= new Coordinate(random_x1 , random_y1);
coordinates[1]= new Coordinate(random_x2,random_y2);
boolean landIntersection = getIntersectionLineLand(coordinates, featureSource);
if (landIntersection == true){
........
}
else{
........
}
........
Java:
public static boolean getIntersectionLineLand(Coordinate[] coordinates, FeatureSource featureSource) {
FeatureCollection<SimpleFeatureType, SimpleFeature> features = null;
try {
FeatureSource<SimpleFeatureType, SimpleFeature> featureSource2 = featureSource;
String geomAttrName = featureSource2.getSchema().getGeometryDescriptor().getLocalName();
CoordinateReferenceSystem crs = CRS.decode("EPSG:4326");
Hints hints = GeoTools.getDefaultHints();
hints.put(Hints.JTS_SRID, 4326);
hints.put(Hints.CRS, crs);
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(hints);
GeometryFactory gf = JTSFactoryFinder.getGeometryFactory(hints);
coordinates[0] = new Coordinate(coordinates[0].x,coordinates[0].y);
coordinates[1] = new Coordinate(coordinates[1].x,coordinates[1].y);
LineString line = gf.createLineString(coordinates);
Intersects filter = ff.intersects(ff.property(geomAttrName), ff.literal(line));
features = featureSource2.getFeatures(filter);
System.out.println(features);
} catch (Exception ex) {
System.out.println(ex);
}
if(features instanceof DefaultFeatureResults ){
return false;
}
else{
return true;
}
}
Mein Ergebnis bleibt ein DefaultFeatureResult egal ob die Linie die Shape schneidet oder nicht. Wäre toll wenn mir jemand weiterhelfen könnte bzw. mir erklären könnte wo mein Fehler ist..
Mit besten Grüßen
Der Problematiker
Zuletzt bearbeitet: