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
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to