地理的な点は、状態の境界のXメートル以内であるか否かを決定する(境界データにシェープファイルを使用して)
-
06-09-2019 - |
質問
だから私は、Javaアプリケーションを書いている、と私はすべての米国の州の境界が含まれているESRIシェープファイルを持っています。私に必要なのは、任意の緯度/経度のポイントかどうかを判断できるようにすることですどのような状態の境界線から指定した距離内にある - つまり、私はのないの特定の境界線を指定します、ただ見る必要がありますポイントは、のそれらののいずれかに近いかどうか。
ソリューションは、すべての非常に正確である必要はありません。例えば私はボーダー、または任意に垂直測定に対処する必要はありません。すぐ南、北のXメートルを行くかどうかをチェック、東または西には十分以上になる境界線を横切ることになります。私はこれらの計算の膨大な数を実行することがありますように、溶液は、計算効率であることを持っています。
私は(単純なオプションがありますならば、私はそれのためにすべてをだが)シェープファイルプラグインでGeoToolsライブラリを使用することを計画しています。私が本当に理解していないことである:私はメモリにロードされたシェープファイルを持ったら、どのように私は国境に近いんだかどうかをチェックします。
?ありがとう! -Dan
解決
GeoToolsに含まれているものであるジオメトリのために 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;
}
二重の数がhref="http://docs.codehaus.org/display/GEOTDOC/01+CRS+Helper+Class" rel="noreferrer"> 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は一定であり、あなたはそれが接している気にしない、あなたが一連のボックスとして負の空間を事前に計算することができますかどうかを知りたい場合。そして、あなたがしなければならないすべては、ポイントに対するこれらのボックスのそれぞれのチェックが含まれています。それらのどれもが一致しない場合は、負の空間ではありません。
、あなたのことができるようになります質問に答えるます。
は、私がESRIのArcGISのエンジンを使用していた場合、私はアメリカのシェープファイルに対して、(おそらくバッファに)ジオメトリで定義されている点と、クエリでISpatialFilterを使用すると思います。任意の結果(複数可)ポイントが状態の近くにあったことを示すことになる返さ。私はGeoToolsに不慣れだと、そのドキュメントを閲覧しながら、私は機能性のそのタイプのように見えたものに遭遇しませんでしたが、彼らはそれを持っている必要があります。あなたはシェープファイルの空間的なクエリを実行するGeoToolsを使用する方法の例について見てみたいことがあります。