comparison gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java @ 507:45be952a3215

Solved some issues. Removed encoding problems while formatting coordinates (issue137) and use this format as subtitle in charts (issue136). gnv-artifacts/trunk@590 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 21 Jan 2010 14:42:51 +0000
parents 64e65daa65e9
children 4e347624ee7c
comparison
equal deleted inserted replaced
506:d41c155db337 507:45be952a3215
10 10
11 import de.intevation.gnv.geobackend.base.Result; 11 import de.intevation.gnv.geobackend.base.Result;
12 import de.intevation.gnv.geobackend.base.query.QueryExecutor; 12 import de.intevation.gnv.geobackend.base.query.QueryExecutor;
13 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; 13 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory;
14 import de.intevation.gnv.geobackend.base.query.exception.QueryException; 14 import de.intevation.gnv.geobackend.base.query.exception.QueryException;
15 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
15 16
16 import de.intevation.gnv.math.LinearFunction; 17 import de.intevation.gnv.math.LinearFunction;
17 18
19 import java.text.MessageFormat;
20 import java.text.NumberFormat;
18 import java.util.ArrayList; 21 import java.util.ArrayList;
19 import java.util.Collection; 22 import java.util.Collection;
20 import java.util.List; 23 import java.util.List;
24 import java.util.Locale;
21 25
22 import org.apache.commons.math.optimization.OptimizationException; 26 import org.apache.commons.math.optimization.OptimizationException;
23 import org.apache.commons.math.optimization.fitting.CurveFitter; 27 import org.apache.commons.math.optimization.fitting.CurveFitter;
24 import org.apache.commons.math.optimization.general.GaussNewtonOptimizer; 28 import org.apache.commons.math.optimization.general.GaussNewtonOptimizer;
25 import org.apache.commons.math.FunctionEvaluationException; 29 import org.apache.commons.math.FunctionEvaluationException;
35 39
36 public static final String I_NAME = "MEDIAN.MESHPOINT.IPOSITION"; 40 public static final String I_NAME = "MEDIAN.MESHPOINT.IPOSITION";
37 public static final String J_NAME = "MEDIAN.MESHPOINT.JPOSITION"; 41 public static final String J_NAME = "MEDIAN.MESHPOINT.JPOSITION";
38 42
39 public static final String TRUE_EXPRESSION = "FEATUREID=FEATUREID"; 43 public static final String TRUE_EXPRESSION = "FEATUREID=FEATUREID";
44
45 public static final String[] COORDINATE_OUT_FORMAT = {
46 "coordinate.template.northeast",
47 "coordinate.template.southeast",
48 "coordinate.template.northwest",
49 "coordinate.template.southwest"
50 };
51
52 public static final String DEFAULT_COORDINATE_TEMPLATE =
53 "{0}\u00b0N {1}'' {2}\u00b0E {3}''";
40 54
41 public static boolean different(Result a, Result b, int [] indices) { 55 public static boolean different(Result a, Result b, int [] indices) {
42 for (int i = 0; i < indices.length; ++i) { 56 for (int i = 0; i < indices.length; ++i) {
43 String oa = a.getString(indices[i]); 57 String oa = a.getString(indices[i]);
44 String ob = b.getString(indices[i]); 58 String ob = b.getString(indices[i]);
336 catch (ClassCastException cce) { 350 catch (ClassCastException cce) {
337 log.error("cannot read WKT line string", cce); 351 log.error("cannot read WKT line string", cce);
338 } 352 }
339 return null; 353 return null;
340 } 354 }
355
356 public static String toText(String wkt) {
357 return toText(Locale.getDefault(), wkt);
358 }
359
360 public static String toText(Locale locale, String wkt) {
361 String formattedCoordinate = null;
362 try {
363 Point p = (Point)new WKTReader().read(wkt);
364 double lat = p.getY();
365 double lon =p.getX();
366
367 int choice = 0;
368
369 if (lat <0 ) {
370 choice += 1;
371 lat=-lat;
372 }
373
374 if (lon <0 ) {
375 choice += 2;
376 lon=-lon;
377 }
378
379 RessourceFactory factory = RessourceFactory.getInstance();
380 String template = factory.getRessource(
381 locale,
382 COORDINATE_OUT_FORMAT[choice],
383 DEFAULT_COORDINATE_TEMPLATE
384 );
385
386 NumberFormat minFormatter = NumberFormat.getInstance(locale);
387 minFormatter.setMaximumFractionDigits(3);
388 minFormatter.setMinimumFractionDigits(3);
389
390 String minLat = minFormatter.format(60.*(lat-((int)lat)));
391 String minLon = minFormatter.format(60.*(lon-((int)lon)));
392
393 NumberFormat degFormatter = NumberFormat.getInstance(locale);
394 degFormatter.setMinimumIntegerDigits(2);
395
396 String formLat = degFormatter.format((int)lat);
397 String formLon = degFormatter.format((int)lon);
398
399 MessageFormat formatter = new MessageFormat(template);
400
401 Object[] args = {
402 formLat, minLat,
403 formLon, minLon
404 };
405
406 return formatter.format(args);
407
408 }
409 catch (ParseException e) {
410 log.warn(e,e);
411 }
412
413 return null;
414 }
341 } 415 }

http://dive4elements.wald.intevation.org