This commit is contained in:
Никита Тырин 2024-09-17 16:16:54 +03:00
parent 0bbc34086f
commit 4ae88fd94b
2 changed files with 17 additions and 14 deletions

View File

@ -3,7 +3,7 @@ from .views import ConeSearchView
urlpatterns = [ urlpatterns = [
path( path(
'cone_search/<float:ra>/<float:dec>/<float:radius>', 'cone_search/<str:ra>/<str:dec>/<str:radius>',
ConeSearchView.as_view(), ConeSearchView.as_view(),
name = 'cone_search' name = 'cone_search'
), ),

View File

@ -13,6 +13,19 @@ from astropy import units as u
class ConeSearchView(APIView): class ConeSearchView(APIView):
@staticmethod
def get_healpix_indices(ra, dec, radius, nside):
# Convert the input coordinates to a SkyCoord object
center = SkyCoord(ra=ra*u.deg, dec=dec*u.deg, frame='icrs')
# Convert the center coordinates to HEALPix vector
vec = hp.ang2vec(center.ra.deg, center.dec.deg, lonlat=True)
# Find the pixels within the given radius
indices = hp.query_disc(nside, vec, np.radians(radius))
return indices
def get(self, request, ra, dec, radius): def get(self, request, ra, dec, radius):
radius = float(radius) radius = float(radius)
ra = float(ra) ra = float(ra)
@ -23,7 +36,7 @@ class ConeSearchView(APIView):
center = SkyCoord(ra=ra*u.deg, dec=dec*u.deg, frame='icrs') center = SkyCoord(ra=ra*u.deg, dec=dec*u.deg, frame='icrs')
#fetch healpix indices in the specified disc #fetch healpix indices in the specified disc
healpix_indices = get_healpix_indices(ra, dec, radius, nside) healpix_indices = self.get_healpix_indices(ra, dec, radius, nside)
#fetch all objects from those healpixes #fetch all objects from those healpixes
objects = GaiaSource.objects.filter(healpix_ring_index__in=healpix_indices) objects = GaiaSource.objects.filter(healpix_ring_index__in=healpix_indices)
@ -39,7 +52,7 @@ class ConeSearchView(APIView):
separation = center.separation(source_coordinates) separation = center.separation(source_coordinates)
if separation.degrees <= radius: if separation.degree <= radius:
results.append(obj) results.append(obj)
@ -47,16 +60,6 @@ class ConeSearchView(APIView):
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
def get_healpix_indices(ra, dec, radius, nside):
# Convert the input coordinates to a SkyCoord object
center = SkyCoord(ra=ra*u.deg, dec=dec*u.deg, frame='icrs')
# Convert the center coordinates to HEALPix vector
vec = hp.ang2vec(center.ra.deg, center.dec.deg, lonlat=True)
# Find the pixels within the given radius
indices = hp.query_disc(nside, vec, np.radians(radius))
return indices