2017-09-25 4 views
0

J'ai un fichier de forme re-projeté dans "EPSG: 3857" et j'essaie de trouver des fonctionnalités dans une certaine gamme exprimée en mètres de un point que je reçois en lat/lon (WGS84). En utilisant dwithin j'ai besoin de passer une gamme plus haute que la distance réelle, donc en raison d'un problème avec "EPSG: 3857" et dwithin, je suis passé à une géométrie tamponnée, rechercher des fonctionnalités à une certaine distance de mon point. C'est mon code:Java GeoTools recherche des fonctionnalités dans la gamme avec l'entrée WGS84 et "EPSG: 3857" forme

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); 

Je ne comprends pas pourquoi ce code ne filtre aucune fonctionnalité, alors que je sais qu'il y en a.

Un conseil m'aidera.

Stefano.

tampon contient ceci:

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)) 

en mètres, mais je passe 170 propriétés sont plus proches. Le fichier Shape est reprojeté via QGIS dans Pseudo-mercator WGS84. L'étrange est que si j'utilise le fichier original avec CRS étant ED_1950_UTM_Zone_33N, la distance est correcte et les caractéristiques sont plus proches comme prévu (trouvé à 123 mètres au lieu de 167).

+0

ce qui est égal à tampon, s'il vous plaît ajouter le WKT à la question. Comment reproches-tu le shapefile? –

+0

Veuillez modifier la question –

+0

Question éditée. Merci a tous :) – caramelleas

Répondre

0

Après avoir déménagé dans le même fichier de forme, mais non reprojetées, en utilisant comme conséquence

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

En raison des différents CRS, les choses chaged.

Avant: un positionnement parfait du point sur la carte, la différence de 50 mètres de calcul des distances

maintenant: les points de positionnement et la distance sont tous avec une erreur d'environ 3 mètres.

Aucune idée du tout pourquoi cela se produit (toujours regarder), mais au moins l'erreur a diminué.

Note: pour faire des tests, j'utilise Google Earth avec un fichier KLM provenant d'une exportation effectuée via un SIG.