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

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

  ViewVC Help
Powered by ViewVC 1.1.20