X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=knowledge%2Forg.argeo.support.geonames%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fgeonames%2FImportGeonamesAdmin.java;fp=knowledge%2Forg.argeo.support.geonames%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fgeonames%2FImportGeonamesAdmin.java;h=1801fefef3e4ea47b3e875666dbbc170c98db4b9;hp=0000000000000000000000000000000000000000;hb=56e0ce8ed36343091ebd9f31150ef5d02ef454c3;hpb=3f1e729ef4c76d9c946906a0983e62013945c1ef diff --git a/knowledge/org.argeo.support.geonames/src/org/argeo/support/geonames/ImportGeonamesAdmin.java b/knowledge/org.argeo.support.geonames/src/org/argeo/support/geonames/ImportGeonamesAdmin.java new file mode 100644 index 0000000..1801fef --- /dev/null +++ b/knowledge/org.argeo.support.geonames/src/org/argeo/support/geonames/ImportGeonamesAdmin.java @@ -0,0 +1,94 @@ +package org.argeo.support.geonames; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.argeo.util.CsvParser; +import org.argeo.util.CsvWriter; + +/** Import GeoNames administrative division from the main table. */ +public class ImportGeonamesAdmin { + // private Log log = LogFactory.getLog(ImportGeonamesAdmin.class); + private Map geonamesAdms = new HashMap<>(); + + /** Loads the data. */ + public void parse(InputStream in) { + CsvParser csvParser = new CsvParser() { + + @Override + protected void processLine(Integer lineNumber, List header, List tokens) { + if (!"A".equals(tokens.get(6))) + return; + GeonamesAdm geonamesAdm = new GeonamesAdm(tokens); + geonamesAdms.put(geonamesAdm.getGeonameId(), geonamesAdm); +// String featureName = tokens.get(7); +// String geonameId = tokens.get(0); +// String name = tokens.get(1); +// Double lat = Double.parseDouble(tokens.get(4)); +// Double lng = Double.parseDouble(tokens.get(5)); +// switch (featureName) { +// case "ADM1": +// case "ADM4": +// String adminCode1 = tokens.get(10); +// System.out.println( +// geonameId + " " + featureName + " " + lat + "," + lng + " " + adminCode1 + " " + name); +// break; +// default: +// break; +// } + + } + }; + csvParser.setSeparator('\t'); + csvParser.setNoHeader(true); + csvParser.parse(in, StandardCharsets.UTF_8); + } + + public Map getGeonamesAdms() { + return geonamesAdms; + } + + /** + * Copies only the Geonames of feature class 'A' (administrative subdivisions). + */ + public static void filterGeonamesAdm(InputStream in, OutputStream out) { + CsvWriter csvWriter = new CsvWriter(out, StandardCharsets.UTF_8); + csvWriter.setSeparator('\t'); + CsvParser csvParser = new CsvParser() { + + @Override + protected void processLine(Integer lineNumber, List header, List tokens) { + if (tokens.size() < 7 || !"A".equals(tokens.get(6))) + return; + csvWriter.writeLine(tokens); + } + }; + csvParser.setSeparator('\t'); + csvParser.setNoHeader(true); + csvParser.parse(in, StandardCharsets.UTF_8); + } + + public static void main(String[] args) throws IOException { + String country = "allCountries"; + // String country = "CI"; + try (InputStream in = Files + .newInputStream(Paths.get(System.getProperty("user.home") + "/gis/data/geonames/" + country + ".txt")); + OutputStream out = Files.newOutputStream( + Paths.get(System.getProperty("user.home") + "/gis/data/geonames/" + country + "-adm.txt"))) { + ImportGeonamesAdmin.filterGeonamesAdm(in, out); + } +// try (InputStream in = Files.newInputStream( +// Paths.get(System.getProperty("user.home") + "/gis/data/geonames/" + country + "-adm.txt"))) { +// ImportGeonamesAdmin importGeonamesAdmin = new ImportGeonamesAdmin(); +// importGeonamesAdmin.parse(in); +// } + } + +}