@Override public Object createGeospatialQuery(String geolocationColumnName, Object shape, Object query) { List polygonList = new ArrayList(); Polygon polygon = (Polygon) shape; for (Coordinate c : polygon.getCoordinates()) { polygonList.add(new double[] { c.x, c.y }); } BasicDBObject q = (BasicDBObject) query; if (q == null) q = new BasicDBObject(); q.put(geolocationColumnName, new BasicDBObject("$geoWithin", new BasicDBObject("$polygon", polygonList))); return q; }
public void test() { Coordinate coordiates2d = new Coordinate(34.2d, 34.4d); Coordinate coordiates2d1 = new Coordinate(34.2d, 34.4d); Coordinate[] coordinates = new Coordinate[2]; coordinates[0] = coordiates2d; coordinates[1] = coordiates2d1; com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Float floatSequence = new com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Float( coordinates, 1); GeometryFactory geoFactory = new GeometryFactory(new PrecisionModel(2)); com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Double doubleSequence = new com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Double( coordinates, 1); LinearRing shell = new LinearRing(floatSequence, geoFactory); LinearRing[] holes = new LinearRing[1]; holes[0] = new LinearRing(doubleSequence, geoFactory); Polygon polygon = new Polygon(shell, holes, geoFactory); Assert.assertNotNull(polygon.getCoordinates()); }
@Override public Object createGeospatialQuery(String geolocationColumnName, Object shape, Object query) { List polygonList = new ArrayList(); Polygon polygon = (Polygon) shape; for (Coordinate c : polygon.getCoordinates()) { polygonList.add(new double[] { c.x, c.y }); } BasicDBObject q = (BasicDBObject) query; if (q == null) q = new BasicDBObject(); q.put(geolocationColumnName, new BasicDBObject("$geoWithin", new BasicDBObject("$polygon", polygonList))); return q; }