def determine_geo()

in granule_ingester/granule_ingester/writers/SolrStore.py [0:0]


    def determine_geo(cls, bbox: TileSummary.BBox) -> str:
        # Solr cannot index a POLYGON where all corners are the same point or when there are only
        # 2 distinct points (line). Solr is configured for a specific precision so we need to round
        # to that precision before checking equality.
        lat_min_str = cls._format_latlon_string(bbox.lat_min)
        lat_max_str = cls._format_latlon_string(bbox.lat_max)
        lon_min_str = cls._format_latlon_string(bbox.lon_min)
        lon_max_str = cls._format_latlon_string(bbox.lon_max)

        # If lat min = lat max and lon min = lon max, index the 'geo' bounding box as a POINT instead of a POLYGON
        if bbox.lat_min == bbox.lat_max and bbox.lon_min == bbox.lon_max:
            geo = 'POINT({} {})'.format(lon_min_str, lat_min_str)
        # If lat min = lat max but lon min != lon max, or lon min = lon max but lat min != lat max,
        # then we essentially have a line.
        elif bbox.lat_min == bbox.lat_max or bbox.lon_min == bbox.lon_max:
            # If the rounding makes the non-equal coordinates equal, ensure they're expanded so we have a line and not
            # a point
            if bbox.lat_min == bbox.lat_max and lon_min_str == lon_max_str:
                lon_min_str = cls._format_latlon_string(bbox.lon_min, rounding=-1)
                lon_max_str = cls._format_latlon_string(bbox.lon_max, rounding=1)
            elif bbox.lon_min == bbox.lon_max and lat_min_str == lat_max_str:
                lat_min_str = cls._format_latlon_string(bbox.lat_min, rounding=-1)
                lat_max_str = cls._format_latlon_string(bbox.lat_max, rounding=1)

            geo = 'LINESTRING({} {}, {} {})'.format(lon_min_str, lat_min_str, lon_max_str, lat_max_str)
        # All other cases should use POLYGON
        else:
            # If the rounding makes any min/max coord pairs equal, expand them so the polygon doesn't collapse into a
            # line
            if lon_min_str == lon_max_str:
                lon_min_str = cls._format_latlon_string(bbox.lon_min, rounding=-1)
                lon_max_str = cls._format_latlon_string(bbox.lon_max, rounding=1)

            if lat_min_str == lat_max_str:
                lat_min_str = cls._format_latlon_string(bbox.lat_min, rounding=-1)
                lat_max_str = cls._format_latlon_string(bbox.lat_max, rounding=1)

            geo = 'POLYGON(({} {}, {} {}, {} {}, {} {}, {} {}))'.format(lon_min_str, lat_min_str,
                                                                        lon_max_str, lat_min_str,
                                                                        lon_max_str, lat_max_str,
                                                                        lon_min_str, lat_max_str,
                                                                        lon_min_str, lat_min_str)

        return geo