지리적 지점이 상태 국경의 X 미터 내에 있는지 여부를 결정합니다 (국경 데이터에 ShapeFile 사용)

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

문제

그래서 저는 Java 앱을 작성하고 있으며 미국 주 국경이 포함 된 ESRI ShapeFile을 가지고 있습니다. 내가 필요로하는 것은 주어진 LAT/LON 포인트가 어떤 주 경계선에서 지정된 거리 내에 있는지 여부를 결정할 수 있어야합니다. ~ 아니다 특정 테두리 라인을 지정하고 지점이 가까운 지 확인해야합니다. 어느 그들의.

솔루션은 전혀 정확하지 않아도됩니다. 예를 들어, 나는 국경에 수직으로 측정하는 것을 다룰 필요가 없습니다. 북쪽, 남쪽, 동쪽 또는 서쪽으로 X 미터가되는지 확인하면 국경을 건너면 충분한 것보다 더 많을 것입니다. 이 계산을 엄청나게 수행하므로 솔루션은 계산 효율적이어야합니다.

ShapeFile 플러그인과 함께 Geotools 라이브러리를 사용할 계획입니다 (더 간단한 옵션이 있으면 전부). 내가 정말로 이해하지 못하는 것은 다음과 같습니다. 일단 ShapeFile이 메모리에로드되면 어떻게 국경 근처에 있는지 확인하려면 어떻게해야합니까?

감사! -단

도움이 되었습니까?

해결책

가정합니다 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가 일정하고 어떤 경계인지 신경 쓰지 않는 경우, 음의 공간을 일련의 상자로 전제 할 수 있습니다. 그런 다음 지점에 대한 각 상자에 대한 검사를 포함하는 것입니다. 그들 중 어느 것도 일치하지 않으면, 당신은 부정적인 공간에 있지 않습니다.

ShapeFile에서 각 상태의 모양을 어떻게 든 추출 할 수 있다면, 측면에 X 미터 인 봉투를 만들고 (정확한 중심에있는 지점과 함께) 두 가지 모양이 교차하는지 확인하면 질문에 답할 수 있습니다. .

ESRI의 ArcGIS 엔진을 사용하고 있다면 지오메트리 (버퍼가있는)에 정의 된 지점이있는 iSpatialFilter를 사용하고 상태 모양 파일에 대한 쿼리를 사용합니다. 반환 된 모든 결과는 지점이 상태 근처에 있음을 나타냅니다. 저는 Geotools에 익숙하지 않으며 문서를 탐색하는 동안 그런 유형의 기능처럼 보이는 것을 발견하지 못했지만 가져야합니다. Geotools를 사용하여 ShapeFiles에서 공간 쿼리를 수행하는 방법의 예를 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top