=== modified file 'dhis-2/dhis-services/dhis-service-mapgeneration/pom.xml' --- dhis-2/dhis-services/dhis-service-mapgeneration/pom.xml 2013-10-17 06:57:37 +0000 +++ dhis-2/dhis-services/dhis-service-mapgeneration/pom.xml 2013-10-28 13:17:58 +0000 @@ -47,6 +47,10 @@ org.geotools gt-epsg-wkt + + org.geotools + gt-referencing + === modified file 'dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java' --- dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java 2013-10-28 13:17:58 +0000 @@ -32,6 +32,7 @@ import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; +import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import org.geotools.feature.DefaultFeatureCollection; @@ -40,6 +41,7 @@ import org.geotools.map.FeatureLayer; import org.geotools.map.Layer; import org.geotools.map.MapContent; +import org.geotools.referencing.GeodeticCalculator; import org.geotools.renderer.GTRenderer; import org.geotools.renderer.lite.StreamingRenderer; import org.geotools.styling.Style; @@ -289,4 +291,50 @@ return image; } + + /** + * Returns boundaries of a box shape which centre is the point defined by the + * given longitude and latitude. The distance between the center point and the + * edges of the box is defined in meters by the given distance. Based on standard + * EPSG:4326 long/lat projection. The result is an array of length 4 where + * the values at each index are: + * + * + * + * @param longitude the longitude. + * @param latitude the latitude. + * @param distance the distance in meters to each box edge. + * @return an array of length 4. + */ + public static double[] getBoxShape( double longitude, double latitude, double distance ) + { + double[] box = new double[4]; + + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint( longitude, latitude ); + + calc.setDirection( 0, distance ); + Point2D north = calc.getDestinationGeographicPoint(); + + calc.setDirection( 90, distance ); + Point2D east = calc.getDestinationGeographicPoint(); + + calc.setDirection( 180, distance ); + Point2D south = calc.getDestinationGeographicPoint(); + + calc.setDirection( -90, distance ); + Point2D west = calc.getDestinationGeographicPoint(); + + box[0] = north.getY(); + box[1] = east.getX(); + box[2] = south.getY(); + box[3] = west.getX(); + + return box; + } } === modified file 'dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java' --- dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java 2013-10-28 13:17:58 +0000 @@ -28,13 +28,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.mapgeneration.MapUtils.getBoxShape; +import static org.hisp.dhis.mapgeneration.MapUtils.getWidthHeight; +import static org.junit.Assert.assertEquals; + import org.junit.Test; -import static org.junit.Assert.*; -import static org.hisp.dhis.mapgeneration.MapUtils.*; - +/** + * Lars Helge Overland + */ public class MapUtilsTest { + private static final double DELTA = 0.01; + @Test public void testGetWidthHeight() { @@ -61,4 +67,26 @@ { getWidthHeight( null, null, 0, 0, 0.5 ); } + + @Test + public void testGetBoxShape() + { + // Equator + + double[] box = getBoxShape( 0, 0, 110574.27 ); + + assertEquals( 1d, box[0], DELTA ); + assertEquals( 1d, box[1], DELTA ); + assertEquals( -1d, box[2], DELTA ); + assertEquals( -1d, box[3], DELTA ); + + // Punta Arenas + + box = getBoxShape( -71, -53, 67137.20 ); + + assertEquals( -52.4, box[0], DELTA ); + assertEquals( -70d, box[1], DELTA ); + assertEquals( -53.6, box[2], DELTA ); + assertEquals( -72d, box[3], DELTA ); + } } === modified file 'dhis-2/pom.xml' --- dhis-2/pom.xml 2013-10-17 06:57:37 +0000 +++ dhis-2/pom.xml 2013-10-28 13:17:58 +0000 @@ -885,6 +885,11 @@ + + org.geotools + gt-referencing + ${geotools.version} +