所以,我正在写一个Java应用程序,和我有一个ESRI Shape文件包含所有美国各州的边界。我需要的是能够确定是否经/纬度点的任何给定的是任何国家边界线的特定距离内 - 即,我会的的是指定一个特定的边界线,只需要看到点是否靠近任何它们。

所述溶液不必须是非常精确的在所有;例如我并不需要被处理测量垂直边界,或什么的。只是检查,看看是否打算X米北,南,东或西会导致穿越边境将绰绰有余。该解决方案确实具有在计算上高效的,因为我将执行这些计算的一个庞大的数字。

我打算用Shape文件插件使用GeoTools库(不过,如果有一个简单的选择,我所有的话)。我真的不明白是:一旦我有加载到内存中shape文件,我怎么检查,看看我是否接近边界

谢谢! -Dan

有帮助吗?

解决方案

假设 JTS 以几何这就是被包括在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;
}

在双数将必须来自 CRS 这将限定其中的计算将要执行的单元。

这些是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;

其他提示

如果你只是想知道,如果A点是一个国家边界的X米范围内,X是常数,你不在乎接壤它,你可以预先计算为一系列的箱子负空间。然后,所有你需要做的是一个包含检查每个兑点那些箱子。如果没有他们的配合,你不是在负空间。

如果你能以某种方式从shape文件中提取形状每个状态,创建一个信封中,在a侧X米(在正中央你的观点),看看这两个形状相交时,你就可以回答这个问题。

如果我用ESRI的ArcGIS发动机,我会使用一个ISpatialFilter与所述几何形状所限定(可能带有缓冲液)的点和查询,针对各国shape文件。任何结果(S)返回,就表示这个点是接近的状态。我不熟悉GeoTools和,同时通过他们的文档浏览,我没遇到过任何看似那类型的功能,但他们必须有它。你可能想寻找如何使用GeoTools用来进行空间查询上shape文件的例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top