redo view
This commit is contained in:
@ -24,7 +24,7 @@ urlpatterns = router.urls
|
|||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
path('inperf/', LocationsInPerf, name="location_perf"),
|
path('inperf/', LocationsInPerf, name="location_perf"),
|
||||||
path('insubperf', LocationsInSubPerf, name='location_subperf'),
|
path('insubperf', LocationsInSubPerf, name='location_subperf'),
|
||||||
path('inbound', LocationInBound.as_view(), name='location_bound'),
|
path('inbound', LocationInBound, name='location_bound'),
|
||||||
path('customarea/', CustomAreaLocations, name='custom_area_location'),
|
path('customarea/', CustomAreaLocations, name='custom_area_location'),
|
||||||
path('subperfinmain/', SubPerfInMainPerf, name="sub_perf"),
|
path('subperfinmain/', SubPerfInMainPerf, name="sub_perf"),
|
||||||
path('allgifuareas/', GetAllGifuAreas, name="gifu_area"),
|
path('allgifuareas/', GetAllGifuAreas, name="gifu_area"),
|
||||||
|
|||||||
194
rog/views.py
194
rog/views.py
@ -53,9 +53,7 @@ class Jpn_Main_PerfViewSet(viewsets.ModelViewSet):
|
|||||||
serializer_class=JPN_main_perfSerializer
|
serializer_class=JPN_main_perfSerializer
|
||||||
filter_fields = ["adm1_ja"]
|
filter_fields = ["adm1_ja"]
|
||||||
|
|
||||||
# class Jpn_PerfViewSet(viewsets.ModelViewSet):
|
|
||||||
# queryset=JpnAdminPerf.objects.all()
|
|
||||||
# serializer_class=JPN_perfSerializer
|
|
||||||
|
|
||||||
class UserTracksViewSet(viewsets.ModelViewSet):
|
class UserTracksViewSet(viewsets.ModelViewSet):
|
||||||
queryset = UserTracks.objects.all()
|
queryset = UserTracks.objects.all()
|
||||||
@ -126,56 +124,51 @@ def LocationsInSubPerf(request):
|
|||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
|
||||||
|
|
||||||
from rest_framework.pagination import PageNumberPagination
|
def LocationInBound(request):
|
||||||
from rest_framework.response import Response
|
lat1 = float(request.GET.get('la1'))
|
||||||
from rest_framework.views import APIView
|
lon1 = float(request.GET.get('ln1'))
|
||||||
|
lat2 = float(request.GET.get('la2'))
|
||||||
|
lon2 = float(request.GET.get('ln2'))
|
||||||
|
lat3 = float(request.GET.get('la3'))
|
||||||
|
lon3 = float(request.GET.get('ln3'))
|
||||||
|
lat4 = float(request.GET.get('la4'))
|
||||||
|
lon4 = float(request.GET.get('ln4'))
|
||||||
|
cat = request.GET.get('cat')
|
||||||
|
grp = request.GET.get('grp')
|
||||||
|
|
||||||
class StandardResultsSetPagination(PageNumberPagination):
|
is_rog = request.GET.get('rog')
|
||||||
page_size = 100
|
|
||||||
page_size_query_param = 'page_size'
|
|
||||||
max_page_size = 1000
|
|
||||||
|
|
||||||
class LocationInBound(APIView):
|
|
||||||
pagination_class = StandardResultsSetPagination
|
|
||||||
|
|
||||||
def get(self, request, format=None):
|
|
||||||
lats = [request.GET.get(f'la{i}') for i in range(1, 5)]
|
|
||||||
lons = [request.GET.get(f'ln{i}') for i in range(1, 5)]
|
|
||||||
cat = request.GET.get('cat')
|
|
||||||
grp = request.GET.get('grp')
|
|
||||||
is_rog = request.GET.get('rog')
|
|
||||||
|
|
||||||
if all(lats) and all(lons):
|
|
||||||
pl = geos.Polygon(((lons[i], lats[i]) for i in range(4)), srid=4326)
|
|
||||||
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True)
|
|
||||||
|
|
||||||
if cat:
|
|
||||||
locs = locs.filter(category=cat)
|
|
||||||
|
|
||||||
|
if(lat1 != None and lon1 != None and lat2 != None and lon2 != None and lat3 != None and lon3 != None and lat4 != None and lon4 != None):
|
||||||
|
pl = geos.Polygon(((lon1, lat1), (lon2, lat2), (lon3, lat3), (lon4, lat4), (lon1, lat1)), srid=4326)
|
||||||
|
if(cat):
|
||||||
if is_rog:
|
if is_rog:
|
||||||
locs = locs.exclude(cp=0)
|
if grp:
|
||||||
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True, group__contains=grp)
|
||||||
if grp:
|
else:
|
||||||
locs = locs.filter(group__contains=grp)
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, category=cat, event_name__isnull=True)
|
||||||
|
|
||||||
if not is_rog:
|
|
||||||
locs = locs.filter(location_name__contains='観光')
|
|
||||||
|
|
||||||
page = self.paginate_queryset(locs)
|
|
||||||
if page is not None:
|
|
||||||
serializer = LocationSerializer(page, many=True)
|
|
||||||
return self.get_paginated_response(serializer.data)
|
|
||||||
else:
|
else:
|
||||||
serializer = LocationSerializer(locs, many=True)
|
if grp:
|
||||||
return Response(serializer.data)
|
locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True, group__contains=grp, location_name__contains='観光')
|
||||||
|
else:
|
||||||
|
locs = Location.objects.filter(geom__within=pl, category=cat, event_name__isnull=True, location_name__contains='観光')
|
||||||
else:
|
else:
|
||||||
return Response({}, safe=False)
|
if is_rog:
|
||||||
|
if grp:
|
||||||
def paginate_queryset(self, queryset):
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True, group__contains=grp)
|
||||||
if self.paginator is None:
|
else:
|
||||||
return None
|
locs = Location.objects.filter(~Q(cp=0), geom__within=pl, event_name__isnull=True)
|
||||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
else:
|
||||||
|
if grp:
|
||||||
|
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True, group__contains=grp, location_name__contains='観光')
|
||||||
|
else:
|
||||||
|
locs = Location.objects.filter(geom__within=pl, event_name__isnull=True, location_name__contains='観光')
|
||||||
|
if len(locs) > 120:
|
||||||
|
return JsonResponse({"too_many_points": True}, safe=False, status=500)
|
||||||
|
else:
|
||||||
|
serializer = LocationSerializer(locs, many=True)
|
||||||
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
else:
|
||||||
|
return JsonResponse({}, safe=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -218,8 +211,8 @@ def ExtentForMainPerf(request):
|
|||||||
def ExtentForLocations(request):
|
def ExtentForLocations(request):
|
||||||
user = request.user
|
user = request.user
|
||||||
ec = user.event_code
|
ec = user.event_code
|
||||||
# Use case-insensitive matching and select related fields for better performance
|
#print(user.event_code)
|
||||||
locs = Location.objects.filter(group__icontains=ec).aggregate(Extent('geom'), Union('geom'))
|
locs = Location.objects.filter(group__contains=ec).aggregate(Extent('geom'), Union('geom'))
|
||||||
return JsonResponse(locs['geom__extent'], safe=False)
|
return JsonResponse(locs['geom__extent'], safe=False)
|
||||||
|
|
||||||
|
|
||||||
@ -232,40 +225,39 @@ def ExtentForSubPerf(request):
|
|||||||
|
|
||||||
|
|
||||||
def CatView(request):
|
def CatView(request):
|
||||||
try:
|
lat1 = float(request.GET.get('la1'))
|
||||||
lat1 = float(request.GET.get('la1'))
|
lon1 = float(request.GET.get('ln1'))
|
||||||
lon1 = float(request.GET.get('ln1'))
|
lat2 = float(request.GET.get('la2'))
|
||||||
lat2 = float(request.GET.get('la2'))
|
lon2 = float(request.GET.get('ln2'))
|
||||||
lon2 = float(request.GET.get('ln2'))
|
lat3 = float(request.GET.get('la3'))
|
||||||
lat3 = float(request.GET.get('la3'))
|
lon3 = float(request.GET.get('ln3'))
|
||||||
lon3 = float(request.GET.get('ln3'))
|
lat4 = float(request.GET.get('la4'))
|
||||||
lat4 = float(request.GET.get('la4'))
|
lon4 = float(request.GET.get('ln4'))
|
||||||
lon4 = float(request.GET.get('ln4'))
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
# If any of the latitudes or longitudes are not provided or cannot be converted to float,
|
|
||||||
# return a bad request response
|
|
||||||
return JsonResponse({"error": "Invalid latitude or longitude"}, status=400)
|
|
||||||
|
|
||||||
pl = geos.Polygon(((lon1, lat1), (lon2, lat2), (lon3, lat3), (lon4, lat4), (lon1, lat1)), srid=4326)
|
if(lat1 != None and lon1 != None and lat2 != None and lon2 != None and lat3 != None and lon3 != None and lat4 != None and lon4 != None):
|
||||||
c = Location.objects.filter(geom__within=pl).values('category').distinct()
|
pl = geos.Polygon(((lon1, lat1), (lon2, lat2), (lon3, lat3), (lon4, lat4), (lon1, lat1)), srid=4326)
|
||||||
|
#locs = Location.objects.filter(geom__within=pl)
|
||||||
|
c = Location.objects.filter(geom__within=pl).values('category').distinct()
|
||||||
|
serializer = LocationCatSerializer(c, many=True)
|
||||||
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
else:
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
c = Location.objects.filter().values('category').distinct()
|
||||||
serializer = LocationCatSerializer(c, many=True)
|
serializer = LocationCatSerializer(c, many=True)
|
||||||
return JsonResponse(serializer.data, safe=False)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def CatByCity(request):
|
def CatByCity(request):
|
||||||
city = request.GET.get('city')
|
city = request.GET.get('city')
|
||||||
if not city:
|
if(city != None):
|
||||||
return JsonResponse({"error": "No city parameter provided"}, status=400)
|
cilt_polygon = JpnSubPerf.objects.filter(adm1_ja=city)
|
||||||
|
cats = Location.objects.filter(geom__within=cilt_polygon[0].geom).values('category').distinct()
|
||||||
try:
|
serializer = LocationCatSerializer(cats, many=True)
|
||||||
cilt_polygon = JpnSubPerf.objects.get(adm1_ja=city)
|
return JsonResponse(serializer.data, safe=False)
|
||||||
except JpnSubPerf.DoesNotExist:
|
else:
|
||||||
return JsonResponse({"error": f"No city found with name: {city}"}, status=404)
|
return None
|
||||||
|
|
||||||
cats = Location.objects.filter(geom__within=cilt_polygon.geom).values('category').distinct()
|
|
||||||
serializer = LocationCatSerializer(cats, many=True)
|
|
||||||
return JsonResponse(serializer.data, safe=False)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -464,26 +456,38 @@ def DeleteDestination(request):
|
|||||||
return JsonResponse({"success":0}, safe=False)
|
return JsonResponse({"success":0}, safe=False)
|
||||||
|
|
||||||
|
|
||||||
class CustomAreaLocations(APIView):
|
def CustomAreaLocations(request):
|
||||||
def get(self, request, format=None):
|
|
||||||
cat = request.GET.get('cat')
|
cat = request.GET.get('cat')
|
||||||
name = request.GET.get('name')
|
name = request.GET.get('name')
|
||||||
is_rog = request.GET.get('rog')
|
is_rog = request.GET.get('rog')
|
||||||
grp = request.GET.get('grp')
|
grp = request.GET.get('grp')
|
||||||
|
|
||||||
locs = Location.objects.filter(event_name=name, event_name__isnull=False)
|
if(cat != None):
|
||||||
|
|
||||||
if cat:
|
|
||||||
locs = locs.filter(category=cat)
|
|
||||||
if is_rog:
|
if is_rog:
|
||||||
locs = locs.exclude(cp=0)
|
if grp:
|
||||||
if grp:
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name, group__contains=grp)
|
||||||
locs = locs.filter(group__contains=grp)
|
else:
|
||||||
if not is_rog:
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, category=cat, event_name=name)
|
||||||
locs = locs.filter(location_name__contains='観光')
|
else:
|
||||||
|
if grp:
|
||||||
serializer = LocationSerializer(locs, many=True)
|
locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name, group__contains=grp, location_name__contains='観光')
|
||||||
return Response(serializer.data)
|
else:
|
||||||
|
locs = Location.objects.filter(event_name__isnull=False, category=cat, event_name=name, location_name__contains='観光')
|
||||||
|
else:
|
||||||
|
if is_rog:
|
||||||
|
if grp:
|
||||||
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name, group__contains=grp)
|
||||||
|
else:
|
||||||
|
locs = Location.objects.filter(~Q(cp=0), event_name__isnull=False, event_name=name)
|
||||||
|
else:
|
||||||
|
if grp:
|
||||||
|
locs = Location.objects.filter(event_name__isnull=False, event_name=name, group__contains=grp, location_name__contains='観光')
|
||||||
|
else:
|
||||||
|
locs = Location.objects.filter(event_name__isnull=False, event_name=name, location_name__contains='観光')
|
||||||
|
|
||||||
|
serializer = LocationSerializer(locs, many=True)
|
||||||
|
return JsonResponse(serializer.data, safe=False)
|
||||||
|
|
||||||
|
|
||||||
def CustomAreaNames(request):
|
def CustomAreaNames(request):
|
||||||
|
|||||||
Reference in New Issue
Block a user