Determinare se punto geografico è entro X metri di un confine di stato (usando shapefile per dati di contorno)

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

Domanda

Quindi sto scrivendo un'applicazione Java, e ho ottenuto uno shapefile ESRI che contiene i confini di tutti gli stati degli Stati Uniti. Cosa ho bisogno è di essere in grado di determinare se una data latitudine / punto lon è entro una determinata distanza da qualsiasi linea di confine di Stato - vale a dire, io non essere specificando una particolare linea di confine, solo bisogno di vedere se il punto è vicino al qualsiasi di loro.

La soluzione non deve essere molto preciso in tutto; per esempio. Non ho bisogno di avere a che fare con la misurazione perpendicolare al bordo, o qualsiasi altra cosa. Proprio il controllo per vedere se andare X metri a nord, sud, est o ovest si tradurrebbe in attraversamento di un confine sarebbe più che sufficiente. La soluzione non deve essere computazionalmente efficienti, come sarò eseguendo un numero enorme di questi calcoli.

Sto progettando di utilizzare la libreria GeoTools (anche se c'è un opzione più semplice, io sono tutto per esso) con il plugin shapefile. Quello che non capisco è:? Una volta che ho avuto la shapefile caricato in memoria, come faccio a controllare per vedere se sono in prossimità di un confine

Grazie! -Dan

È stato utile?

Soluzione

JTS per la geometria che è ciò che è incluso in 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;
}

Il numero doppio dovrà venire dal CRS che definirà le unità in cui verrà eseguito il calcolo.

Queste sono le importazioni 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;

Altri suggerimenti

Se si vuole solo sapere se il punto A si trova entro X metri di un confine di Stato e X è costante e non ti importa che confinano con essa è, si può precompute lo spazio negativo come una serie di scatole. Poi tutto quello che dovete fare è un contiene controllo per ciascuna di quelle scatole contro il punto. Se nessuno di loro corrisponde, non siete nello spazio negativo.

Se si riesce in qualche modo estrarre la forma per ogni stato dal shapefile, creare una busta che è x metri su un lato (con il punto nel centro esatto) e vedere se queste due forme si intersecano, sarete in grado di rispondere alla domanda.

Se stavo usando ArcGIS Engine di ESRI, mi piacerebbe utilizzare un ISpatialFilter con il punto definito nella geometria (possibilmente con un buffer) e query che contro lo shapefile Uniti. Qualsiasi risultato (s) ha restituito indicherebbe che il punto era vicino a una condizione. Sono familiarità con GeoTools e, durante la navigazione attraverso la loro documentazione, non ho incontrato tutto ciò che sembrava quel tipo di funzionalità, ma devono averlo. Si consiglia di guardare per gli esempi di come utilizzare GeoTools di eseguire query spaziali su shapefile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top