コード例 #1
0
 def get_osm_housenumbers(self, street_name: str) -> List[util.HouseNumber]:
     """Gets the OSM house number list of a street."""
     if not self.__osm_housenumbers:
         # This function gets called for each & every street, make sure we read the file only
         # once.
         house_numbers: Dict[str, List[util.HouseNumber]] = {}
         with self.get_files().get_osm_housenumbers_csv_stream() as sock:
             first = True
             columns: Dict[str, int] = {}
             for row in sock.get_rows():
                 if first:
                     first = False
                     for index, label in enumerate(row):
                         columns[label] = index
                     continue
                 if not row:
                     continue
                 street = row[columns["addr:street"]]
                 if not street and "addr:place" in columns:
                     street = row[columns["addr:place"]]
                 for house_number in row[columns["addr:housenumber"]].split(
                         ';'):
                     if street not in house_numbers:
                         house_numbers[street] = []
                     house_numbers[street] += normalize(
                         self, house_number, street,
                         self.get_street_ranges())
         for key, value in house_numbers.items():
             self.__osm_housenumbers[key] = util.sort_numerically(
                 set(value))
     if street_name not in self.__osm_housenumbers:
         self.__osm_housenumbers[street_name] = []
     return self.__osm_housenumbers[street_name]
コード例 #2
0
 def __get_ref_housenumbers(self) -> Dict[str, List[util.HouseNumber]]:
     """Gets house numbers from reference, produced by write_ref_housenumbers()."""
     ret = {}  # type: Dict[str, List[util.HouseNumber]]
     lines = []  # type: List[str]
     with self.get_files().get_ref_housenumbers_stream("r") as sock:
         for line in sock.readlines():
             line = line.strip()
             lines.append(line)
     street_ranges = self.get_street_ranges()
     streets_invalid = self.get_street_invalid()
     for osm_street_name in self.get_osm_streets():
         house_numbers = []  # type: List[util.HouseNumber]
         ref_street_name = self.get_ref_street_from_osm_street(
             osm_street_name)
         prefix = ref_street_name + " "
         street_invalid = []  # type: List[str]
         if osm_street_name in streets_invalid.keys():
             street_invalid = streets_invalid[osm_street_name]
         for line in lines:
             if line.startswith(prefix):
                 house_number = line.replace(prefix, '')
                 if util.HouseNumber.is_invalid(house_number,
                                                street_invalid):
                     continue
                 house_numbers += normalize(self, house_number,
                                            osm_street_name, street_ranges)
         ret[osm_street_name] = util.sort_numerically(set(house_numbers))
     return ret
コード例 #3
0
    def __get_ref_housenumbers(self) -> Dict[str, List[util.HouseNumber]]:
        """Gets house numbers from reference, produced by write_ref_housenumbers()."""
        ret: Dict[str, List[util.HouseNumber]] = {}
        lines: List[str] = []
        with self.get_files().get_ref_housenumbers_stream("r") as sock:
            for line in sock.readlines():
                line = line.strip()
                lines.append(line)
        street_ranges = self.get_street_ranges()
        streets_invalid = self.get_street_invalid()
        for osm_street in self.get_osm_streets():
            osm_street_name = osm_street.get_osm_name()
            house_numbers: List[util.HouseNumber] = []
            ref_street_name = get_ref_street_from_osm_street(
                self.get_config(), osm_street_name)
            prefix = ref_street_name + "\t"
            street_invalid: List[str] = []
            if osm_street_name in streets_invalid.keys():
                street_invalid = streets_invalid[osm_street_name]

                # Simplify invalid items by default, so the 42a markup can be used, no matter what
                # is the value of housenumber-letters.
                street_invalid = self.__normalize_invalids(
                    osm_street_name, street_invalid)

            for line in lines:
                if line.startswith(prefix):
                    house_number = line.replace(prefix, '')
                    normalized = normalize(self, house_number, osm_street_name,
                                           street_ranges)
                    normalized = \
                        [i for i in normalized if not util.HouseNumber.is_invalid(i.get_number(), street_invalid)]
                    house_numbers += normalized
            ret[osm_street_name] = util.sort_numerically(set(house_numbers))
        return ret
コード例 #4
0
ファイル: areas.py プロジェクト: kadarivan/osm-gimmisn
 def __get_ref_housenumbers(self) -> Dict[str, List[util.HouseNumber]]:
     """Gets house numbers from reference, produced by write_ref_housenumbers()."""
     ret: Dict[str, List[util.HouseNumber]] = {}
     lines: List[str] = []
     with self.get_files().get_ref_housenumbers_stream("r") as sock:
         for line in sock.readlines():
             line = line.strip()
             lines.append(line)
     street_ranges = self.get_street_ranges()
     streets_invalid = self.get_street_invalid()
     for osm_street_name in self.get_osm_streets():
         house_numbers: List[util.HouseNumber] = []
         ref_street_name = self.get_ref_street_from_osm_street(
             osm_street_name)
         prefix = ref_street_name + "\t"
         street_invalid: List[str] = []
         if osm_street_name in streets_invalid.keys():
             street_invalid = streets_invalid[osm_street_name]
         for line in lines:
             if line.startswith(prefix):
                 house_number = line.replace(prefix, '')
                 normalized = normalize(self, house_number, osm_street_name,
                                        street_ranges)
                 normalized = \
                     [i for i in normalized if not util.HouseNumber.is_invalid(i.get_number(), street_invalid)]
                 house_numbers += normalized
         ret[osm_street_name] = util.sort_numerically(set(house_numbers))
     return ret
コード例 #5
0
 def get_osm_housenumbers(self, street_name: str) -> List[util.HouseNumber]:
     """Gets the OSM house number list of a street."""
     if not self.__osm_housenumbers:
         # This function gets called for each & every street, make sure we read the file only
         # once.
         house_numbers: Dict[str, List[util.HouseNumber]] = {}
         with self.get_files().get_osm_housenumbers_stream(
                 mode="r") as sock:
             first = True
             for line in sock.readlines():
                 if first:
                     first = False
                     continue
                 tokens = line.strip().split('\t')
                 if len(tokens) < 3:
                     continue
                 street = tokens[1]
                 for house_number in tokens[2].split(';'):
                     if street not in house_numbers:
                         house_numbers[street] = []
                     house_numbers[street] += normalize(
                         self, house_number, street,
                         self.get_street_ranges())
         for key, value in house_numbers.items():
             self.__osm_housenumbers[key] = util.sort_numerically(
                 set(value))
     if street_name not in self.__osm_housenumbers:
         self.__osm_housenumbers[street_name] = []
     return self.__osm_housenumbers[street_name]
コード例 #6
0
ファイル: test_util.py プロジェクト: ImreSamu/osm-gimmisn
 def test_alpha(self) -> None:
     """Tests just suffixes."""
     ascending = util.sort_numerically([
         util.HouseNumber('a', ''),
         util.HouseNumber('c', ''),
         util.HouseNumber('b', '')
     ])
     self.assertEqual([i.get_number() for i in ascending], ['a', 'b', 'c'])
コード例 #7
0
ファイル: test_util.py プロジェクト: ImreSamu/osm-gimmisn
 def test_numbers(self) -> None:
     """Tests numbers."""
     ascending = util.sort_numerically([
         util.HouseNumber('1', ''),
         util.HouseNumber('20', ''),
         util.HouseNumber('3', '')
     ])
     self.assertEqual([i.get_number() for i in ascending], ['1', '3', '20'])
コード例 #8
0
ファイル: test_util.py プロジェクト: ImreSamu/osm-gimmisn
 def test_alpha_suffix(self) -> None:
     """Tests numbers with suffixes."""
     ascending = util.sort_numerically([
         util.HouseNumber('1a', ''),
         util.HouseNumber('20a', ''),
         util.HouseNumber('3a', '')
     ])
     self.assertEqual([i.get_number() for i in ascending],
                      ['1a', '3a', '20a'])
コード例 #9
0
 def get_osm_housenumbers(self, street_name: str) -> List[util.HouseNumber]:
     """Gets the OSM house number list of a street."""
     house_numbers = []  # type: List[util.HouseNumber]
     with self.get_files().get_osm_housenumbers_stream(mode="r") as sock:
         first = True
         for line in sock.readlines():
             if first:
                 first = False
                 continue
             tokens = line.strip().split('\t')
             if len(tokens) < 3:
                 continue
             if tokens[1] != street_name:
                 continue
             house_numbers += normalize(self, tokens[2], street_name,
                                        self.get_street_ranges())
     return util.sort_numerically(set(house_numbers))