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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3003 by torben, Tue Apr 19 12:36:31 2016 UTC revision 3020 by torben, Mon Apr 25 09:23:26 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold.dawa;  package dk.daoas.adressevedligehold.dawa;
2    
3    import java.io.File;
4    import java.io.FileInputStream;
5    import java.io.FileReader;
6  import java.io.IOException;  import java.io.IOException;
7    import java.io.InputStreamReader;
8    import java.nio.charset.Charset;
9  import java.util.ArrayList;  import java.util.ArrayList;
10    import java.util.Iterator;
11  import java.util.List;  import java.util.List;
12    import java.util.Map;
13    import java.util.TreeMap;
14    
15    import org.apache.commons.csv.CSVFormat;
16    import org.apache.commons.csv.CSVParser;
17    import org.apache.commons.csv.CSVRecord;
18  import org.json.JSONArray;  import org.json.JSONArray;
19  import org.json.JSONObject;  import org.json.JSONObject;
20    
# Line 12  import dk.daoas.adressevedligehold.tasks Line 23  import dk.daoas.adressevedligehold.tasks
23  import dk.daoas.adressevedligehold.util.DeduplicateHelper;  import dk.daoas.adressevedligehold.util.DeduplicateHelper;
24  import dk.daoas.adressevedligehold.util.HttpUtil;  import dk.daoas.adressevedligehold.util.HttpUtil;
25  import dk.daoas.adressevedligehold.util.TimingHelper;  import dk.daoas.adressevedligehold.util.TimingHelper;
26  /**  
27   *  
  * 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  
  *  
  */  
 /**  
  *  
  * 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  
  *  
  */  
28  public class DawaWebservice {  public class DawaWebservice {
29                    
30          private TaskLogger logger = TaskLogger.getInstance();          private TaskLogger logger = TaskLogger.getInstance();
31                    
         int page = 0;  
           
32          DeduplicateHelper<String> dedup = new DeduplicateHelper<>();          DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
33    
34                    public Map<String, Integer> kommunerIRegion(int regionskode) throws IOException {
         public List<Address> lookup(int kommunekode) throws IOException {  
35                                    
36                    final String url = "http://dawa.aws.dk/kommuner";
37                                    
38                    Map<String,Integer> result = new TreeMap<>();
39                                    
40                    String jsonStr = HttpUtil.getContentString(url, 5000);
41                    JSONArray root = new JSONArray( jsonStr) ;
42                    
43                    for (int i=0; i<root.length(); i++) {
44                            JSONObject current = root.getJSONObject(i);
45                            
46                            int region = current.getInt("regionskode");
47                            
48                            if (region != regionskode) {
49                                    continue;
50                            }
51                            
52                            int kode = current.getInt("kode");
53                            String navn = current.getString("navn");
54                            
55                            result.put(navn, kode);
56                    }
57                                    
                 List<Address> result = new ArrayList<>();  
58                                    
59                  final String url = "http://dawa.aws.dk/adgangsadresser?kommunekode=" + kommunekode;                  return result;
60            }
61            
62            public List<Address> adresserIKommune(int kommunekode) throws IOException {
63                                    
64                  TimingHelper timer = new TimingHelper();                  TimingHelper timer = new TimingHelper();
65                    List<Address> result = new ArrayList<>();
66                                    
67                  String jsonStr = HttpUtil.getContentString(url, 1000);                  final String url = "http://dawa.aws.dk/adgangsadresser?kommunekode=" + kommunekode+ "&format=csv";
68                                    
69                  logger.info("Loaded data elapsed:" + timer.getElapsed());                  File file = File.createTempFile("dawa_" + kommunekode + "_", "csv");
70                    logger.info("Gemmer til " + file.getName() );
71                    HttpUtil.getContentToFile(url, file, 5000);
72                    
73                    
74                    
75                    logger.info("Downloaded dawa file, elapsed:" + timer.getElapsed());
76                  timer = new TimingHelper();                  timer = new TimingHelper();
   
                 JSONArray root = new JSONArray( jsonStr) ;  
77                                    
78                  for (int i=0; i<root.length(); i++) {                  
79                          Address a = new Address();                  
80                                            
81                          JSONObject current = root.getJSONObject(i);                  try (FileInputStream fin = new FileInputStream(file);
82                                    InputStreamReader reader = new InputStreamReader(fin, Charset.forName("UTF-8"));
83                                    CSVParser parser = new CSVParser(reader, CSVFormat.EXCEL);
84                            
85                                    ) {
86                                                    
87                                                    
88                          JSONObject vejStykke = current.getJSONObject("vejstykke");                          Iterator<CSVRecord> it = parser.iterator();
                         String vejNavn = vejStykke.getString("navn");  
                         a.vejnavn = dedup.getInstance(vejNavn);  
                         a.vejkode = (short) vejStykke.getInt("kode");  
89                                                    
90                            it.next(); //Skip header line
91                                                    
                         JSONObject kommune = current.getJSONObject("kommune");  
                         a.kommunekode = (short) kommune.getInt("kode");  
92                                                    
93                            while (it.hasNext()) {
94                                    CSVRecord rec = it.next();
95                                                    
96                          JSONObject postnummer = current.getJSONObject("postnummer");                                  Address a = new Address();
97                          a.postnr = (short) postnummer.getInt("nr");                                  a.vejkode = Short.parseShort( rec.get(4) );
98                                    a.vejnavn = dedup.getInstance( rec.get(5) );
99                                    String husnrStr = rec.get(7);
100    
101                                                            a.husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );
102                          String husnrStr = current.getString("husnr");                                  
103                                                            if (a.husnr > 900) {
104                          a.husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );                                          continue;
105                          a.husnrbogstav = dedup.getInstance( husnrStr.replaceAll("\\d", "") );                                  }
106                                                            
107                                                            a.husnrbogstav = dedup.getInstance( husnrStr.replaceAll("\\d", "") );
108                          JSONObject adgangspunkt = current.getJSONObject("adgangspunkt");                                  
109                          JSONArray koordinater = adgangspunkt.getJSONArray("koordinater");                                  a.postnr = Short.parseShort( rec.get(9) );
110                          a.latitude = (float) koordinater.getDouble(1);  // Dawa sender i longitude,latitude                                  a.kommunekode = Short.parseShort( rec.get(13) );
111                          a.longitude = (float) koordinater.getDouble(0);                                  
112                            
113                          result.add(a);                                  a.latitude = safeParseFloat( rec.get(21) );
114                                    a.longitude = safeParseFloat( rec.get(22) );
115    
116                                    result.add(a);
117    
118                            }
119                    }
120                    boolean deleted = file.delete();
121                    if (deleted == false) {
122                            logger.info("Could not delete tmp file");      
123                  }                  }
124                                    
125                  logger.info("AdressCount:" + result.size() + " - " + timer.getElapsed() + "ms");                  logger.info("AdressCount:" + result.size() + " - " + timer.getElapsed() + "ms");
126                                                                    
127                  page++;                  
128                                    
129                  return result;                  return result;
130          }          }
131            
132            private float safeParseFloat(String str) {
133                    if (str.equals(""))
134                            return (float) 0.0;
135                    
136                    return Float.parseFloat(str);
137                    
138            }
139            
140  }  }

Legend:
Removed from v.3003  
changed lines
  Added in v.3020

  ViewVC Help
Powered by ViewVC 1.1.20