Dan*_*anM 4 java maps geography geospatial geotools
所以我正在编写一个Java应用程序,我有一个ESRI Shapefile,其中包含所有美国州的边界.我需要的是能够确定任何给定的纬度/经度点是否在距离任何状态边界线的指定距离内 - 即,我不会指定特定的边界线,只需要查看该点是否接近任何一个他们
解决方案根本不必非常精确; 例如,我不需要处理垂直于边界的测量,或者其他什么.只是检查是否向北,向南,向东或向西X米将导致越过边界将是绰绰有余.解决方案必须具有计算效率,因为我将执行大量的这些计算.
我打算使用Shapefile插件来使用GeoTools库(尽管有一个更简单的选项,我都是为了它).我真正理解的是:一旦我将shapefile加载到内存中,我该如何检查我是否接近边界?
谢谢!-担
假设JTS for Geometry是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;
}
Run Code Online (Sandbox Code Playgroud)
双号必须来自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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |