/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaWebservice.java
ViewVC logotype

Annotation of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaWebservice.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3006 - (hide annotations) (download)
Tue Apr 19 15:49:14 2016 UTC (8 years, 1 month ago) by torben
File size: 5494 byte(s)
1) Load DAWA to local csv file
2) use commons CSV to parse downloaded file
3) read all kommunekoder(muncipality codes) in region from dawa and use this to handle each muncipality individualy (smaller batches)
1 torben 3003 package dk.daoas.adressevedligehold.dawa;
2    
3 torben 3006 import java.io.File;
4     import java.io.FileReader;
5 torben 3003 import java.io.IOException;
6     import java.util.ArrayList;
7 torben 3006 import java.util.Iterator;
8 torben 3003 import java.util.List;
9 torben 3006 import java.util.Map;
10     import java.util.TreeMap;
11 torben 3003
12 torben 3006 import org.apache.commons.csv.CSVFormat;
13     import org.apache.commons.csv.CSVParser;
14     import org.apache.commons.csv.CSVRecord;
15 torben 3003 import org.json.JSONArray;
16     import org.json.JSONObject;
17    
18     import dk.daoas.adressevedligehold.beans.Address;
19     import dk.daoas.adressevedligehold.tasks.TaskLogger;
20     import dk.daoas.adressevedligehold.util.DeduplicateHelper;
21     import dk.daoas.adressevedligehold.util.HttpUtil;
22     import dk.daoas.adressevedligehold.util.TimingHelper;
23     /**
24     *
25     * Vi bruger org.json her istedet for fuld de-serialization via f.eks. Gson da vi kun skal bruge nogle ganske få felter fra resultatet
26     *
27     */
28     /**
29     *
30     * Vi bruger org.json her istedet for fuld de-serialization via f.eks. Gson da vi kun skal bruge nogle ganske få felter fra resultatet
31     *
32     */
33     public class DawaWebservice {
34    
35     private TaskLogger logger = TaskLogger.getInstance();
36    
37     int page = 0;
38    
39     DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
40    
41 torben 3006 public Map<String, Integer> kommunerIRegion(int regionskode) throws IOException {
42     TimingHelper timer = new TimingHelper();
43    
44     final String url = "http://dawa.aws.dk/kommuner";
45    
46     Map<String,Integer> result = new TreeMap<>();
47    
48     String jsonStr = HttpUtil.getContentString(url, 5000);
49     JSONArray root = new JSONArray( jsonStr) ;
50    
51     for (int i=0; i<root.length(); i++) {
52     JSONObject current = root.getJSONObject(i);
53    
54     int region = current.getInt("regionskode");
55    
56     if (region != regionskode) {
57     continue;
58     }
59    
60     int kode = current.getInt("kode");
61     String navn = current.getString("navn");
62    
63     result.put(navn, kode);
64     }
65    
66    
67     return result;
68     }
69 torben 3003
70 torben 3006 public List<Address> adresserIKommune(int kommunekode) throws IOException {
71 torben 3003
72 torben 3006 //Splitter splitter = Splitter.on(',').trimResults( CharMatcher.is('"') );
73 torben 3003
74 torben 3006 List<Address> result = new ArrayList<>();
75 torben 3003
76 torben 3006 final String url = "http://dawa.aws.dk/adgangsadresser?kommunekode=" + kommunekode+ "&format=csv";
77    
78     File file = File.createTempFile("dawa_" + kommunekode + "_", "csv");
79     logger.info("Gemmer til " + file.getName() );
80     HttpUtil.getContentToFile(url, file, 1000);
81    
82     TimingHelper timer = new TimingHelper();
83    
84     logger.info("Loaded data elapsed:" + timer.getElapsed());
85     timer = new TimingHelper();
86    
87    
88     try (FileReader fin = new FileReader(file);
89     CSVParser parser = new CSVParser(fin, CSVFormat.EXCEL);
90    
91     ) {
92    
93    
94     Iterator<CSVRecord> it = parser.iterator();
95    
96     it.next(); //Skip header line
97    
98    
99     while (it.hasNext()) {
100     CSVRecord rec = it.next();
101    
102     Address a = new Address();
103     a.vejkode = Short.parseShort( rec.get(4) );
104     a.vejnavn = dedup.getInstance( rec.get(5) );
105     String husnrStr = rec.get(7);
106    
107     a.husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );
108    
109     if (a.husnr > 900) {
110     continue;
111     }
112    
113     a.husnrbogstav = dedup.getInstance( husnrStr.replaceAll("\\d", "") );
114    
115     a.postnr = Short.parseShort( rec.get(9) );
116     a.kommunekode = Short.parseShort( rec.get(13) );
117    
118    
119     a.latitude = safeParseFloat( rec.get(22) );
120     a.longitude = safeParseFloat( rec.get(22) );
121    
122     result.add(a);
123    
124     }
125     }
126     file.delete();
127    
128     logger.info("AdressCount:" + result.size() + " - " + timer.getElapsed() + "ms");
129    
130     page++;
131    
132     return result;
133     }
134    
135     private float safeParseFloat(String str) {
136     if (str.equals(""))
137     return (float) 0.0;
138    
139     return Float.parseFloat(str);
140    
141     }
142    
143     public List<Address> adresserIKommune_old(int kommunekode) throws IOException {
144    
145    
146    
147 torben 3003 List<Address> result = new ArrayList<>();
148    
149     final String url = "http://dawa.aws.dk/adgangsadresser?kommunekode=" + kommunekode;
150    
151     TimingHelper timer = new TimingHelper();
152    
153     String jsonStr = HttpUtil.getContentString(url, 1000);
154    
155     logger.info("Loaded data elapsed:" + timer.getElapsed());
156     timer = new TimingHelper();
157    
158     JSONArray root = new JSONArray( jsonStr) ;
159    
160     for (int i=0; i<root.length(); i++) {
161     Address a = new Address();
162    
163     JSONObject current = root.getJSONObject(i);
164    
165    
166     JSONObject vejStykke = current.getJSONObject("vejstykke");
167     String vejNavn = vejStykke.getString("navn");
168     a.vejnavn = dedup.getInstance(vejNavn);
169     a.vejkode = (short) vejStykke.getInt("kode");
170    
171    
172     JSONObject kommune = current.getJSONObject("kommune");
173     a.kommunekode = (short) kommune.getInt("kode");
174    
175    
176     JSONObject postnummer = current.getJSONObject("postnummer");
177     a.postnr = (short) postnummer.getInt("nr");
178    
179    
180     String husnrStr = current.getString("husnr");
181    
182     a.husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );
183     a.husnrbogstav = dedup.getInstance( husnrStr.replaceAll("\\d", "") );
184    
185    
186     JSONObject adgangspunkt = current.getJSONObject("adgangspunkt");
187     JSONArray koordinater = adgangspunkt.getJSONArray("koordinater");
188     a.latitude = (float) koordinater.getDouble(1); // Dawa sender i longitude,latitude
189     a.longitude = (float) koordinater.getDouble(0);
190    
191     result.add(a);
192     }
193    
194     logger.info("AdressCount:" + result.size() + " - " + timer.getElapsed() + "ms");
195    
196     page++;
197    
198     return result;
199     }
200     }

  ViewVC Help
Powered by ViewVC 1.1.20