Mercator: Article example implementation of mercator projections.
This commit is contained in:
		
							parent
							
								
									362bd203e9
								
							
						
					
					
						commit
						0187c74f79
					
				| @ -0,0 +1,29 @@ | |||||||
|  | package com.baeldung.mercator; | ||||||
|  | 
 | ||||||
|  | class EllipticalMercator extends Mercator { | ||||||
|  |     @Override | ||||||
|  |     double yAxisProjection(double input) { | ||||||
|  |         if (input > 89.5) { | ||||||
|  |             input = 89.5; | ||||||
|  |         } | ||||||
|  |         if (input < -89.5) { | ||||||
|  |             input = -89.5; | ||||||
|  |         } | ||||||
|  |         double temp = RADIUS_MINOR / RADIUS_MAJOR; | ||||||
|  |         double es = 1.0 - (temp * temp); | ||||||
|  |         double eccent = Math.sqrt(es); | ||||||
|  |         double phi = Math.toRadians(input); | ||||||
|  |         double sinphi = Math.sin(phi); | ||||||
|  |         double con = eccent * sinphi; | ||||||
|  |         double com = 0.5 * eccent; | ||||||
|  |         con = Math.pow(((1.0 - con)/(1.0+con)), com); | ||||||
|  |         double ts = Math.tan(0.5 * ((Math.PI*0.5) - phi))/con; | ||||||
|  |         double y = 0 - RADIUS_MAJOR * Math.log(ts); | ||||||
|  |         return y; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     double xAxisProjection(double input) { | ||||||
|  |         return RADIUS_MAJOR * Math.toRadians(input); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								core-java/src/main/java/com/baeldung/mercator/Mercator.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								core-java/src/main/java/com/baeldung/mercator/Mercator.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | package com.baeldung.mercator; | ||||||
|  | 
 | ||||||
|  | abstract class Mercator { | ||||||
|  |     final static double RADIUS_MAJOR = 6378137.0; | ||||||
|  |     final static double RADIUS_MINOR = 6356752.3142; | ||||||
|  | 
 | ||||||
|  |     abstract double yAxisProjection(double input); | ||||||
|  | 
 | ||||||
|  |     abstract double xAxisProjection(double input); | ||||||
|  | } | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | package com.baeldung.mercator; | ||||||
|  | 
 | ||||||
|  | public class SphericalMercator extends  Mercator { | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     double yAxisProjection(double input) { | ||||||
|  |         return Math.toRadians(input) * RADIUS_MAJOR; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     double xAxisProjection(double input) { | ||||||
|  |         return Math.log(Math.tan(Math.PI / 4 + Math.toRadians(input) / 2)) * RADIUS_MAJOR; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.mercator; | ||||||
|  | 
 | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.mockito.junit.MockitoJUnitRunner; | ||||||
|  | 
 | ||||||
|  | import static junit.framework.TestCase.assertEquals; | ||||||
|  | 
 | ||||||
|  | @RunWith(MockitoJUnitRunner.class) | ||||||
|  | public class EllipticalMercatorUnitTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void giventThatTheInputIs22_whenXAxisProjectionIsCalled_thenTheResultIsTheCorrectOne() { | ||||||
|  |         Mercator mercator = new EllipticalMercator(); | ||||||
|  |         double result = mercator.xAxisProjection(22); | ||||||
|  |         assertEquals(result, 2449028.7974520186); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void giventThatTheInputIs44_whenYAxisProjectionIsCalled_thenTheResultIsTheCorrectOne() { | ||||||
|  |         Mercator mercator = new EllipticalMercator(); | ||||||
|  |         double result = mercator.yAxisProjection(44); | ||||||
|  |         assertEquals(result, 5435749.887511954); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | package com.baeldung.mercator; | ||||||
|  | 
 | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.mockito.junit.MockitoJUnitRunner; | ||||||
|  | 
 | ||||||
|  | import static junit.framework.TestCase.assertEquals; | ||||||
|  | 
 | ||||||
|  | @RunWith(MockitoJUnitRunner.class) | ||||||
|  | public class SphericalMercatorUnitTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void giventThatTheInputIs22_whenXAxisProjectionIsCalled_thenTheResultIsTheCorrectOne() { | ||||||
|  |         Mercator mercator = new SphericalMercator(); | ||||||
|  |         double result = mercator.xAxisProjection(22); | ||||||
|  |         assertEquals(result, 2511525.234845713); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void giventThatTheInputIs44_whenYAxisProjectionIsCalled_thenTheResultIsTheCorrectOne() { | ||||||
|  |         Mercator mercator = new SphericalMercator(); | ||||||
|  |         double result = mercator.yAxisProjection(44); | ||||||
|  |         assertEquals(result, 4898057.594904037); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user