Revision: 5007
http://sourceforge.net/p/jump-pilot/code/5007
Author: michaudm
Date: 2016-09-04 10:57:18 +0000 (Sun, 04 Sep 2016)
Log Message:
-----------
Create a specific class to read and lookup into srid.txt file
Added Paths:
-----------
core/trunk/src/org/openjump/core/ccordsys/utils/SridLookupTable.java
Added: core/trunk/src/org/openjump/core/ccordsys/utils/SridLookupTable.java
===================================================================
--- core/trunk/src/org/openjump/core/ccordsys/utils/SridLookupTable.java
(rev 0)
+++ core/trunk/src/org/openjump/core/ccordsys/utils/SridLookupTable.java
2016-09-04 10:57:18 UTC (rev 5007)
@@ -0,0 +1,131 @@
+package org.openjump.core.ccordsys.utils;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.text.Normalizer;
+import java.util.Arrays;
+import java.util.Scanner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A class to lookup in srid.txt.
+ * Can find the srid, the name and/or the unit from the code or the name
+ * of a Coordinate Reference System
+ */
+public class SridLookupTable {
+
+ private static final Pattern pattern = Pattern
+
.compile("<([^<>]*)>\\s*;\\s*<([^<>]*)>\\s*;\\s*\\[([^\\[\\]]*)\\]");
+
+ /** Test the class*/
+ public static void main(String[] args) throws UnsupportedEncodingException
{
+ System.out.println("4326 -> " +
Arrays.toString(getSrsAndUnitFromCode("4326")));
+ System.out.println("WGS 84 -> " +
Arrays.toString(getSrsAndUnitFromName("WGS 84")));
+ System.out.println("LAMB93 -> " +
Arrays.toString(getSrsAndUnitFromCode("LAMB93")));
+ System.out.println("Lambert 93 -> " +
Arrays.toString(getSrsAndUnitFromName("Lambert 93")));
+ System.out.println("Geoportail - Reunion -> " +
Arrays.toString(getSrsAndUnitFromName("Geoportail - Reunion")));
+ System.out.println("4326 -> " + getSrsNameFromCode("4326"));
+ System.out.println("WGS 84 -> " + getSrsCodeFromName("WGS 84"));
+ System.out.println("4326 -> " + getUnitFromCode("4326"));
+ System.out.println("WGS 84 -> " + getUnitFromName("WGS 84"));
+ }
+
+ private static Scanner getScanner() throws UnsupportedEncodingException {
+ InputStream is = ProjUtils.class.getResourceAsStream("srid.txt");
+ InputStreamReader isr = new InputStreamReader(is, "UTF-8");
+ Scanner scanner = new Scanner(isr);
+ scanner.useDelimiter("\\n");
+ return scanner;
+ }
+
+ public static String[] getSrsAndUnitFromCode(String code) throws
UnsupportedEncodingException {
+ Scanner scanner = getScanner();
+ String[] srsAndUnit = null;
+ try {
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+ Matcher m = pattern.matcher(line);
+ if (m.matches()) {
+ if (m.group(1).equals(code)) {
+ srsAndUnit = new String[]{m.group(1), m.group(2),
m.group(3)};
+ }
+ }
+ }
+ } finally {
+ scanner.close();
+ return srsAndUnit;
+ }
+ }
+
+ public static String[] getSrsAndUnitFromName(String name) throws
UnsupportedEncodingException {
+ Scanner scanner = getScanner();
+ String[] srsAndUnit = null;
+ try {
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+ Matcher m = pattern.matcher(line);
+ if (m.matches()) {
+ if (normalize(m.group(2)).equals(normalize(name))) {
+ srsAndUnit = new String[]{m.group(1), m.group(2),
m.group(3)};
+ }
+ }
+ }
+ } finally {
+ scanner.close();
+ return srsAndUnit;
+ }
+ }
+
+ public static String[] getSrsAndUnitFromCodeOrName(String codeOrName)
throws UnsupportedEncodingException {
+ Scanner scanner = getScanner();
+ String[] srsAndUnit = null;
+ try {
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+ Matcher m = pattern.matcher(line);
+ if (m.matches()) {
+ if (m.group(1).equals(codeOrName) ||
+
normalize(m.group(2)).equals(normalize(codeOrName))) {
+ srsAndUnit = new String[]{m.group(1), m.group(2),
m.group(3)};
+ }
+ }
+ }
+ } finally {
+ scanner.close();
+ return srsAndUnit;
+ }
+ }
+
+
+ public static String getSrsCodeFromName(String name) throws
UnsupportedEncodingException {
+ String[] srsAndUnit = getSrsAndUnitFromName(name);
+ return srsAndUnit == null ? null : srsAndUnit[0];
+ }
+
+ public static String getSrsNameFromCode(String code) throws
UnsupportedEncodingException {
+ String[] srsAndUnit = getSrsAndUnitFromCode(code);
+ return srsAndUnit == null ? null : srsAndUnit[1];
+ }
+
+ public static String getUnitFromName(String name) throws
UnsupportedEncodingException {
+ String[] srsAndUnit = getSrsAndUnitFromName(name);
+ return srsAndUnit == null ? null : srsAndUnit[2];
+ }
+
+ public static String getUnitFromCode(String code) throws
UnsupportedEncodingException {
+ String[] srsAndUnit = getSrsAndUnitFromCode(code);
+ return srsAndUnit == null ? null : srsAndUnit[2];
+ }
+
+ /**
+ * Use this function to normalize srs name and get a chance to match it
+ * with the one in srid.txt
+ */
+ private static String normalize(String name) {
+ name = Normalizer.normalize(name, Normalizer.Form.NFD); // separe base
character from accent
+ name = name.replaceAll("\\p{M}", ""); // remove accents
+ return name.toLowerCase();
+ }
+}
------------------------------------------------------------------------------
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel