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

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

  ViewVC Help
Powered by ViewVC 1.1.20