2016-10-14 3 views

Répondre

0

Pour analyser les données KML, voici une bibliothèque (m'a pris deux secondes de googler): https://github.com/micromata/javaapiforkml

Pour vérifier si une coordonnée tombe dans une forme, soit la bibliothèque offre une méthode pour cela (ne vérifiez que) - ou, vous pouvez simplement créer un Java AWT Polygon à partir des coordonnées d'une forme (il suffit de les traiter comme des points sur une surface 2D). Polygon offre une méthode contains(Point2D).

https://docs.oracle.com/javase/7/docs/api/java/awt/Polygon.html

+1

Si le polygone enveloppe la ligne de données ou les pôles internationaux, AWT Polygon ne fonctionnera pas toujours. Dans ces cas, vous avez besoin d'une bibliothèque géospatiale telle que [JTS Topology Suite] (http://tsusiatsoftware.net/jts/main.html). Voir [contient] (http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/geom/Geometry.html#contains (com.vividsolutions.jts.geom.Geometry)). – JasonM1

+0

@JasonM vous avez absolument raison. –

+0

Les formes AWT supposent une surface plane. Ce n'est pas une bonne idée pour les calculs géodésiques. – VGR

0

Le JTS Topology Suite est un bon choix pour calculer correctement les relations géométriques dans le contexte géospatial. Le fichier KML peut facilement être analysé à l'aide d'une bibliothèque Java telle que JAK ou GIScore dans laquelle vous pouvez accéder aux coordonnées des entités.

Voici un extrait de code Java utilisant JTS pour tester si un point géospatial est à l'intérieur d'un polygone.

import com.vividsolutions.jts.geom.*; 

// parse KML using JAK or another library 
// ... 
GeometryFactory gf = new GeometryFactory(); 
// create polygon 
int numPoints = ... 
Coordinate[] points = new Coordinate[numPoints]; 
// set points 
points[0] = new Coordinate(...); 
//... 
LinearRing jtsRing = gf.createLinearRing(points); 
Polygon poly = gf.createPolygon(jtsRing, null); 

// now create point to test if contained inside polygon 
Coordinate coord = new Coordinate(lon, lat); 
Point pt = gf.createPoint(coord); 
if (poly.contains(pt)) { 
    // point is contained within bounds of polygon 
    // do something here 
} 

Le contient() prédicat de géométrie est définie dans la JTS javadoc.