Java GeoTools ищет объекты в диапазоне с вводом WGS84 и формой EPSG: 3857

У меня есть файл формы, перепроецированный в "EPSG:3857", и я пытаюсь найти объекты в пределах определенного диапазона, выраженного в метрах, от точки, которую я получаю в широте/долготе (WGS84).

Используя dwithin, мне нужно пройти диапазон, превышающий реальное расстояние, поэтому, получив, что это происходит из-за проблемы с «EPSG: 3857» и dwithin, я переключился на буферизованную геометрию, ищу объекты на определенном расстоянии от моей точки. Это мой код:

CoordinateReferenceSystem WGS84 =  CRS.decode("EPSG:4326",true);   //org.geotools.referencing.crs.DefaultGeographicCRS.WGS84 Google Earth;
CoordinateReferenceSystem EPSG3857 = CRS.decode("EPSG:3857",true); //WGS84 Pseudo-Mercator: shape reprojected CRS------------- String code = "AUTO:42001," + x + "," + y;
MathTransform transformToEPSG3857 = CRS.findMathTransform(WGS84, EPSG3857, false);

GeometryFactory geometryFactory2 = new GeometryFactory();
Geometry pointSource = geometryFactory.createPoint(coordinateSource); // coordinateSource is lat=41.942667 lon=12.462218
Geometry targetGeometry = JTS.transform(pointSource, transformToEPSG3857);

Geometry buffer = targetGeometry.buffer(distance);
buffer.setSRID(3857);
Filter pointInPolygon = filterFactory.contains(filterFactory.property("the_geom"), filterFactory.literal(buffer));
SimpleFeatureCollection features = shapeFileNamedCache.getFeatureSource().getFeatures(pointInPolygon);
System.out.println("Features: " + features.size() + " at distance in meters: " + distance);

Я не понимаю, почему этот код не отфильтровывает какие-либо функции, хотя я знаю, что они есть.

Любой совет мне поможет.

Стефано.

Буфер содержит это:

POLYGON ((1387457.7619147683 5152395.103885399, 1387454.4954124368 5152361.9385306565, 1387444.8214352953 5152330.047701897, 1387429.1117488598 5152300.6569457855, 1387407.97006757 5152274.895732597, 1387382.2088543817 5152253.754051308, 1387352.8180982703 5152238.044364872, 1387320.927269511 5152228.37038773, 1387287.7619147683 5152225.103885399, 1387254.5965600256 5152228.37038773, 1387222.7057312662 5152238.044364872, 1387193.3149751548 5152253.754051308, 1387167.5537619665 5152274.895732597, 1387146.4120806768 5152300.6569457855, 1387130.7023942412 5152330.047701897, 1387121.0284170997 5152361.9385306565, 1387117.7619147683 5152395.103885399, 1387121.0284170997 5152428.269240142, 1387130.7023942412 5152460.160068901, 1387146.4120806768 5152489.550825013, 1387167.5537619665 5152515.312038201, 1387193.3149751548 5152536.45371949, 1387222.7057312662 5152552.163405926, 1387254.5965600256 5152561.837383068, 1387287.7619147683 5152565.103885399, 1387320.927269511 5152561.837383068, 1387352.8180982703 5152552.163405926, 1387382.2088543817 5152536.45371949, 1387407.97006757 5152515.312038201, 1387429.1117488598 5152489.550825013, 1387444.8214352953 5152460.160068901, 1387454.4954124368 5152428.269240142, 1387457.7619147683 5152395.103885399))

в метрах прохожу 170 но свойства ближе. Шейп-файл репроецируется через QGIS в WGS84 Pseudo-mercator. Странно то, что если я использую исходный файл с CRS, равным ED_1950_UTM_Zone_33N, расстояние правильное, а объекты ближе, как и ожидалось (найдено на 123 метра вместо 167).


person Stefano Falconetti    schedule 25.09.2017    source источник
comment
чему равен буфер, пожалуйста, добавьте WKT к вопросу. Как вы перепроецируете шейп-файл?   -  person Ian Turton    schedule 26.09.2017
comment
Пожалуйста, отредактируйте вопрос   -  person Ian Turton    schedule 26.09.2017
comment
Вопрос отредактирован. Спасибо всем :)   -  person Stefano Falconetti    schedule 26.09.2017


Ответы (1)


После перехода к тому же шейп-файлу, НО НЕ перепроецированному, как следствие,

sourceCRS = CRS.decode("EPSG:23033", true);

Из-за различных CRS все изменилось.

До: идеальное позиционирование точки на карте, разница в расчетах расстояний 50 метров.

Теперь: позиционирование точек и расстояние все с погрешностью около 3 метров.

Понятия не имею, почему это происходит (все еще ищу), но, по крайней мере, ошибка уменьшилась.

Примечание: для проведения тестов я использую Google Earth с файлом KLM, полученным из экспорта, сделанного через ГИС.

person Stefano Falconetti    schedule 28.09.2017