Beispiel #1
0
    def get_missing_housenumbers(
        self
    ) -> Tuple[List[Tuple[util.Street, List[util.HouseNumber]]], List[Tuple[
            util.Street, List[util.HouseNumber]]]]:
        """
        Compares ref and osm house numbers, prints the ones which are in ref, but not in osm.
        Return value is a pair of ongoing and done streets.
        Each of of these is a pair of a street name and a house number list.
        """
        ongoing_streets = []
        done_streets = []

        osm_street_names = self.get_osm_streets()
        all_ref_house_numbers = self.__get_ref_housenumbers()
        for osm_street in osm_street_names:
            osm_street_name = osm_street.get_osm_name()
            ref_house_numbers = all_ref_house_numbers[osm_street_name]
            osm_house_numbers = self.get_osm_housenumbers(osm_street_name)
            only_in_reference = util.get_only_in_first(ref_house_numbers,
                                                       osm_house_numbers)
            in_both = util.get_in_both(ref_house_numbers, osm_house_numbers)
            ref_street_name = get_ref_street_from_osm_street(
                self.get_config(), osm_street_name)
            street = util.Street(osm_street_name, ref_street_name,
                                 self.should_show_ref_street(osm_street_name))
            if only_in_reference:
                ongoing_streets.append((street, only_in_reference))
            if in_both:
                done_streets.append((street, in_both))
        # Sort by length.
        ongoing_streets.sort(key=lambda result: len(result[1]), reverse=True)

        return ongoing_streets, done_streets
Beispiel #2
0
    def get_additional_housenumbers(self) -> util.NumberedStreets:
        """
        Compares ref and osm house numbers, prints the ones which are in osm, but not in ref.
        Return value is a list of streets.
        Each of of these is a pair of a street name and a house number list.
        """
        additional = []

        osm_street_names = self.get_osm_streets()
        all_ref_house_numbers = self.get_ref_housenumbers()
        streets_valid = self.get_street_valid()
        for osm_street in osm_street_names:
            osm_street_name = osm_street.get_osm_name()
            ref_house_numbers = all_ref_house_numbers[osm_street_name]
            osm_house_numbers = self.get_osm_housenumbers(osm_street_name)

            if osm_street_name in streets_valid.keys():
                street_valid = streets_valid[osm_street_name]
                osm_house_numbers = \
                    [i for i in osm_house_numbers if not util.HouseNumber.is_invalid(i.get_number(), street_valid)]

            only_in_osm = util.get_only_in_first(osm_house_numbers,
                                                 ref_house_numbers)
            ref_street_name = get_ref_street_from_osm_street(
                self.get_config(), osm_street_name)
            street = util.Street(osm_street_name, ref_street_name,
                                 self.should_show_ref_street(osm_street_name))
            if only_in_osm:
                additional.append((street, only_in_osm))
        # Sort by length.
        additional.sort(key=lambda result: len(result[1]), reverse=True)

        return additional
Beispiel #3
0
    def get_missing_streets(self) -> Tuple[List[str], List[str]]:
        """Tries to find missing streets in a relation."""
        reference_streets = self.get_ref_streets()
        street_blacklist = self.get_config().get_street_filters()
        osm_streets = [self.get_ref_street_from_osm_street(street) for street in self.get_osm_streets()]

        only_in_reference = util.get_only_in_first(reference_streets, osm_streets)
        only_in_reference = [i for i in only_in_reference if i not in street_blacklist]
        in_both = util.get_in_both(reference_streets, osm_streets)

        return only_in_reference, in_both
Beispiel #4
0
    def get_additional_streets(self,
                               sorted_result: bool = True
                               ) -> List[util.Street]:
        """Tries to find additional streets in a relation."""
        ref_streets = [
            get_osm_street_from_ref_street(self.get_config(), street)
            for street in self.get_ref_streets()
        ]
        ref_street_objs = [util.Street(i) for i in ref_streets]
        osm_streets = self.get_osm_streets(sorted_result)
        osm_street_blacklist = self.get_config().get_osm_street_filters()

        only_in_osm = util.get_only_in_first(osm_streets, ref_street_objs)
        only_in_osm = [
            i for i in only_in_osm
            if i.get_osm_name() not in osm_street_blacklist
        ]

        return only_in_osm
Beispiel #5
0
 def test_happy(self) -> None:
     """Tests the happy path."""
     self.assertEqual(util.get_only_in_first(["1", "2", "3"], ["3", "4"]),
                      ["1", "2"])