docs: def import_locations(self, marker_file):
          """Import trigpoint database files.
  
          ``import_locations()`` returns a dictionary with keys containing the
          trigpoint identifier, and values that are :class:`Trigpoint` objects.
  
          It expects trigpoint marker files in the format provided at
          alltrigs-wgs84.txt_, which is the following format::
  
              H  SOFTWARE NAME & VERSION
              I  GPSU 4.04,
              S SymbolSet=0
              ...
              W,500936,N52.066035,W000.281449,    37.0,Broom Farm
              W,501097,N52.010585,W000.173443,    97.0,Bygrave
              W,505392,N51.910886,W000.186462,   136.0,Sish Lane
  
          Any line not consisting of 6 comma separated fields will be ignored.
          The reader uses the :mod:`csv` module, so alternative whitespace
          formatting should have no effect.  The above file processed by
          ``import_locations()`` will return the following ``dict`` object::
  
              {500936: point.Point(52.066035, -0.281449, 37.0, "Broom Farm"),
               501097: point.Point(52.010585, -0.173443, 97.0, "Bygrave"),
               505392: point.Point(51.910886, -0.186462, 136.0, "Sish Lane")}
  
          Args:
              marker_file (iter): Trigpoint marker data to read
  
          Returns:
              dict: Named locations with :class:`Trigpoint` objects
  
          Raises:
              ValueError: Invalid value for ``marker_file``
  
          .. _alltrigs-wgs84.txt: http://www.haroldstreet.org.uk/trigpoints/
          """
          self._marker_file = marker_file
          field_names = ('tag', 'identity', 'latitude', 'longitude', 'altitude',
                         'name')
          pos_parse = lambda x, s: float(s[1:]) if s[0] == x else 0 - float(s[1:])
          latitude_parse = partial(pos_parse, 'N')
          longitude_parse = partial(pos_parse, 'E')
          # A value of 8888.0 denotes unavailable data
          altitude_parse = lambda s: None if s.strip() == '8888.0' else float(s)
          field_parsers = (str, int, latitude_parse, longitude_parse,
                           altitude_parse, str)
  
          data = utils.prepare_csv_read(marker_file, field_names)
  
          for row in (x for x in data if x['tag'] == 'W'):
              for name, parser in zip(field_names, field_parsers):
                  row[name] = parser(row[name])
              del row['tag']
              try:
                  self[row['identity']] = Trigpoint(**row)
              except TypeError:
                  # Workaround formatting error in 506514 entry that contains
                  # spurious comma
                  del row[None]
                  self[row['identity']] = Trigpoint(**row)