Мне нужно импортировать и обработать шейп-файл, используя вышеупомянутую систему координат, в приложение Java, которое использует систему координат WGS84.
В частности, я читаю шейп-файл, извлекаю многоугольники и сохраняю каждый многоугольник как объект в своей базе данных. Позже мне придется сравнивать пространственные точки с этими многоугольниками (проверяя, находится ли точка внутри или вне его многоугольника). Тот факт, что точки и многоугольники находятся в разных CRS, кажется причиной, по которой я достигаю 0 совпадений.
Хотя я думаю, что это не имеет значения, вот как я читаю шейп-файл с помощью GeoTools:
InputStream stream = new FileInputStream("path/to/file");
File tempDir = File.createTempFile("shapefile_temp", "");
if (tempDir.exists())
tempDir.delete();
tempDir.mkdir();
URL shpName = null;
Files.unzip(stream, tempDir);
for (File file : tempDir.listFiles())
if (file.getName()
.endsWith(".shp"))
{
shpName = file.toURI()
.toURL();
break;
}
if (shpName == null)
throw new RuntimeException("No SHP found");
Map<String, Object> map = new HashMap<String, Object>();
map.put("url", shpName);
DataStore dataStore = DataStoreFinder.getDataStore(map);
try
{
String typeName = dataStore.getTypeNames()[0];
FeatureSource<SimpleFeatureType, SimpleFeature> source = dataStore.getFeatureSource(typeName);
FeatureIterator<SimpleFeature> iterator = source.getFeatures()
.features();
while (iterator.hasNext())
{
Feature feature = iterator.next();
System.out.println();
System.out.println((int) feature.getProperty("COD_PRO")
.getValue() + "\t" + feature.getProperty("NOME_PRO")
.getValue());
System.out.println(feature.getDefaultGeometryProperty()
.getValue()); //This thing will be stored in a CQEngine and compared against a given point
}
}
finally
{
tempDir.delete();
}
}
finally
{
System.gc();
}
Следующий код более актуален: как проверить, находится ли точка внутри фигуры
final GeometryFactory geoFactory = new GeometryFactory();
com.vividsolutions.jts.geom.Point point = geoFactory.createPoint(new Coordinate(loc.getLongitude().doubleValue(), loc.getLatitude().doubleValue()));
loc.setContained(shape.getGeometry().covers(pointBing) || shape.getGeometry().contains(point));
Как преобразовать полигоны из ED_1950 ... в WGS84? Или как сравнить точку WGS84 с полигоном ED_1950?