def import_waterbodies(wb_import_settings):
    """
    Create geoobjects and waterbodies.
    """
    owmsources = wb_import_settings['owm_sources']

    # Reset geo object groups
    geogroups = {}
    category = Category.objects.get(slug='krw-waterlichamen')

    for s in wb_import_settings['owm_sources']:
        # Determine geoobject group name
        geo_object_group_name = ('measure::waterbody::%s' %
                                 os.path.basename(s['file']))

        # Remove geoobject group by name if it exists
        try:
            print 'Finding existing geoobject group named %s' % (
                geo_object_group_name,
            )
            geo_object_group = GeoObjectGroup.objects.get(
                name=geo_object_group_name)
            print 'Deleting existing geoobject group named %s' % (
                geo_object_group_name,
            )
            geo_object_group.delete()
        except GeoObjectGroup.DoesNotExist:
            pass

        # Create new geoobject group with that name
        geo_object_group = GeoObjectGroup(
            name=geo_object_group_name,
            slug=slugify(os.path.basename(s['file']).split('.')[-2]),
            created_by=s['user'],
        )
        geo_object_group.save()

        # Add this geoobject group to lizard_area category of waterbodies
        category.geo_object_groups.add(geo_object_group)

        # Keep a dict of geo_object_groups for later assignment
        geogroups[s['data_administrator'].name] = geo_object_group

    # Make a mapping of owmidents to sets of owaidents
    # There are multiple owaidents per owmident
    owa_idents = {}
    for rec in _records(wb_import_settings['link_file']):
        owm = rec['owmident']
        owa = rec['owaident']
        if owm not in owa_idents:
            owa_idents[owm] = []
        owa_idents[owm].append(owa)

    # Loop geofile, create geometry object for each geometry
    owa_geometry = {}
    spatialreference_wgs84 = SpatialReference(WGS84)
    spatialreference_rd = SpatialReference(RD)
    coordtransform = CoordTransform(
        spatialreference_rd,
        spatialreference_wgs84,
    )
    for f in wb_import_settings['geometry_files']:
        for rec in _records(f):
            geometry = GEOSGeometry(
                rec['wkb_geometry'],
                #srid=28992,
            )
            geometry.transform(coordtransform)
            owa_geometry[rec['owaident']] = geometry

    # Go through the owm files, to get or create the corresponding areas
    for s in owmsources:
        for rec in _records(s['file']):
            owm_ident = rec['owmident'].strip()
            # Get or create area
            try:
                area = Area.objects.get(ident=owm_ident)
            except Area.DoesNotExist:
                owa_geometries = [owa_geometry[owa_ident]
                                  for owa_ident in owa_idents[owm_ident]]
                area = Area(
                    # Fields from GeoObject
                    ident=owm_ident,
                    geometry=_combine(owa_geometries),
                    geo_object_group=geogroups[s['data_administrator'].name],
                    # Fields from Area
                    area_class=Area.AREA_CLASS_KRW_WATERLICHAAM,
                    data_administrator=s['data_administrator'],
                    parent=None,
                    # Fields from Communique
                    name=rec['owmnaam'].strip(),
                    code=None,
                    description='',
                )
            # Set data_set on area in any case, existing or imported here.
            area.data_set = s['data_set']
            area.save()

            # Create WaterBody
            krw_status = KRWStatus.objects.get(code=rec['owmstat'].strip())
            krw_watertype = KRWWatertype.objects.get(
                code=rec['owmtype'].strip()
            )
            waterbody, waterbody_created = _get_or_create(
                model=WaterBody,
                get_kwargs={'area_ident': area.ident},
                extra_kwargs={
                    'area': area,
                    'krw_status': krw_status,
                    'krw_watertype': krw_watertype,
                },
            )