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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3006 - (show annotations) (download)
Tue Apr 19 15:49:14 2016 UTC (8 years 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 package dk.daoas.adressevedligehold.dawa;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.util.ArrayList;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.TreeMap;
11
12 import org.apache.commons.csv.CSVFormat;
13 import org.apache.commons.csv.CSVParser;
14 import org.apache.commons.csv.CSVRecord;
15 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 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
70 public List<Address> adresserIKommune(int kommunekode) throws IOException {
71
72 //Splitter splitter = Splitter.on(',').trimResults( CharMatcher.is('"') );
73
74 List<Address> result = new ArrayList<>();
75
76 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 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