Déterminer si le point géographique est à quelques mètres X d'une frontière d'Etat (à l'aide des données shapefile à la frontière)

StackOverflow https://stackoverflow.com/questions/917484

Question

Je vous écris une application Java, et j'ai un Esri Shapefile qui contient les frontières de tous les Etats américains. Ce que je besoin est d'être en mesure de déterminer si une donnée lat / point de LON est à une certaine distance de QUELQUE état d'une ligne de frontière - à savoir, je vais pas spécifieront une ligne de frontière particulière, juste besoin de voir si le point est proche de any d'entre eux.

La solution ne doit pas être très précis du tout; par exemple. Je ne dois pas avoir affaire à la mesure perpendiculaire à la frontière, ou autre. Il suffit de vérifier pour voir si vous allez X mètres au nord, au sud, est ou ouest conduiraient à franchir une frontière serait plus que suffisant. La solution ne devra être informatiquement efficace, comme j'effectuerons un grand nombre de ces calculs.

Je prévois d'utiliser la bibliothèque GeoTools (mais s'il y a une option plus simple, je suis tout à fait) avec le plugin Shapefile. Ce que je ne comprends pas vraiment est: Une fois que j'ai le shapefile chargé en mémoire, comment puis-je vérifier si je suis près d'une frontière

Merci! -Dan

Était-ce utile?

La solution

JTS pour la géométrie qui est ce qui est inclus dans GeoTools:

public boolean pointIsClose( File file, Point targetPoint,double distance) {


  boolean ret = false;
  Map connect = new HashMap();
  connect.put("url", file.toURL());
  DataStore dataStore = DataStoreFinder.getDataStore(connect);


  FeatureSource featureSource = dataStore.getFeatureSource(typeName);
  FeatureCollection collection = featureSource.getFeatures();
  FeatureIterator iterator = collection.features();



  try {
    while (iterator.hasNext()) {
      Feature feature = iterator.next();
      Geometry sourceGeometry = feature.getDefaultGeometry();
      ret= sourceGeometry.isWithinDistance(targetPoint, distance );
    }
  } finally {
    iterator.close();
  }
  return ret;
}

Le double numéro devra venir de la CRS qui définira les unités dans lesquelles sera effectuée le calcul.

Ce sont les importations de GeoTools:

import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.feature.Feature;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

Autres conseils

Si vous voulez juste savoir si le point A est à quelques mètres X d'une frontière d'Etat et X est constante et vous ne se soucient pas qui la bordent est, vous pouvez précalculer l'espace négatif comme une série de boîtes. Ensuite, tout ce que vous avez à faire est un chèque contient pour chacune de ces cases contre le point. Si aucun d'entre eux correspondent, vous n'êtes pas dans l'espace négatif.

Si vous pouvez extraire en quelque sorte la forme pour chaque état de la shapefile, créer une enveloppe qui est x mètres sur un côté (avec votre point dans le centre exact) et voir si ces deux formes se croisent, vous serez en mesure de répondre à la question.

Si j'utilisais ArcGIS Engine de ESRI, j'utiliser un ISpatialFilter avec le point défini dans la géométrie (éventuellement avec un tampon) et requête contre les États shapefile. Tout résultat (s) est revenu indiquerait que le point était à proximité d'un état. Je ne suis pas familier avec GeoTools et, tout en naviguant à travers leur documentation, je ne suis pas venu à travers tout ce qui ressemblait à ce type de fonctionnalité, mais ils doivent l'avoir. Vous pouvez chercher des exemples de la façon d'utiliser GeoTools pour effectuer des requêtes spatiales sur shapefiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top