代码之家  ›  专栏  ›  技术社区  ›  DanM

确定地理点是否在州边界的X米范围内(使用shapefile获取边界数据)

  •  4
  • DanM  · 技术社区  · 17 年前

    正在指定特定的边界线,只需要查看该点是否接近

    解决方案根本不必非常精确;例如,我不需要处理垂直于边界的测量或其他任何事情。仅仅检查向北、向南、向东或向西行驶X米是否会导致越过边境就足够了。解决方案必须具有计算效率,因为我将进行大量的计算。

    谢谢! -丹

    3 回复  |  直到 16 年前
        1
  •  7
  •   Clint    17 年前

    假设 JTS

    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 这将定义执行计算的单位。

    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;
    
        2
  •  2
  •   Jherico    17 年前

    如果你只想知道点A是否在州边界的X米范围内,并且X是常数,而你不在乎它是哪个边界,你可以将负空间预先计算为一系列框。然后,你所要做的就是对照这一点对每个框进行包含检查。如果它们都不匹配,那么你就不在负空间。

        3
  •  1
  •   Michael Todd    17 年前

    如果我使用的是ESRI的ArcGIS Engine,我会使用ISpatialFilter和几何体中定义的点(可能有缓冲区),并根据States shapefile进行查询。返回的任何结果都表明该点接近某个状态。我不熟悉GeoTools,在浏览他们的文档时,我没有遇到任何看起来像这种功能的东西,但他们一定有。你可能想看看如何使用GeoTools对shapefiles执行空间查询的例子。