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