88from typing import Tuple , Type
99
1010from django .core .management import BaseCommand
11- from django .db .models import QuerySet , Model
11+ from django .db .models import Model
1212
1313from api .constants import DEFAULT_ZOOM_LEVELS , GeoLevel , DataType
1414from api .utils .mvt_generator import MVTGenerator
@@ -20,10 +20,16 @@ class Command(BaseCommand):
2020
2121 def add_arguments (self , parser ):
2222 parser .add_argument (
23- "--number_of_thread " ,
23+ "--number_of_workers " ,
2424 type = int ,
2525 default = 1 ,
26- help = "Number of threads to use for generating tiles" ,
26+ help = "Number of workers to use for generating tiles" ,
27+ )
28+ parser .add_argument (
29+ "--number_of_threads_by_worker" ,
30+ type = int ,
31+ default = 1 ,
32+ help = "Number of threads by worker to use for generating tiles" ,
2733 )
2834 parser .add_argument (
2935 "--geolevel" ,
@@ -54,41 +60,40 @@ def add_arguments(self, parser):
5460 def generate_tiles_for_model (
5561 self ,
5662 model : Type [Model ],
57- queryset : QuerySet ,
5863 zoom_levels : Tuple [int , int ] = DEFAULT_ZOOM_LEVELS ,
59- number_of_thread : int = 1 ,
64+ number_of_threads_by_worker : int = 1 ,
65+ number_of_workers : int = 1 ,
6066 ) -> None :
6167 """
6268 Generate MVT tiles for a geographic model.
6369
6470 This method generates MVT (Mapbox Vector Tiles) for a specified geographic model
65- based on the provided queryset and zoom levels. It utilizes multiple threads
71+ based on the provided model and zoom levels. It utilizes multiple threads
6672 to enhance performance.
6773
6874 Args:
6975 model (Type[Model]): The model class to generate MVT tiles for.
70- queryset (QuerySet): The queryset of the model instances to process.
7176 zoom_levels (Tuple[int, int]): A tuple specifying the range of zoom levels
7277 to generate tiles for (inclusive).
73- number_of_thread (int): The number of threads to use for generating tiles.
78+ number_of_workers (int): The number of workers to use for generating tiles.
7479
7580 Returns:
7681 None
7782 """
7883 mvt_generator = MVTGenerator (
79- queryset = queryset ,
84+ mdl = model ,
8085 zoom_levels = zoom_levels ,
81- datatype = model .datatype ,
82- geolevel = model .geolevel ,
83- number_of_thread = number_of_thread ,
86+ number_of_workers = number_of_workers ,
87+ number_of_threads_by_worker = number_of_threads_by_worker ,
8488 )
8589
8690 mvt_generator .generate_tiles ()
8791 self .stdout .write (self .style .SUCCESS ("MVT tiles generated successfully!" ))
8892
8993 def handle (self , * args , ** options ):
9094 """Handle the command."""
91- number_of_thread = options ["number_of_thread" ]
95+ number_of_workers = options ["number_of_workers" ]
96+ number_of_threads_by_worker = options ["number_of_threads_by_worker" ]
9297 geolevel = options ["geolevel" ]
9398 datatype = options ["datatype" ]
9499 zoom_levels = options ["zoom_levels" ]
@@ -118,13 +123,16 @@ def handle(self, *args, **options):
118123 print (f"Deleting existing MVTTile for model : { mdl ._meta .model_name } ." )
119124 print (
120125 MVTTile .objects .filter (
121- geolevel = geolevel , datatype = mdl .datatype
126+ geolevel = mdl .geolevel ,
127+ datatype = mdl .datatype ,
128+ zoom_level__gte = zoom_levels [0 ],
129+ zoom_level__lte = zoom_levels [1 ],
122130 ).delete ()
123131 )
124132 # Generate new tiles
125133 self .generate_tiles_for_model (
126134 model = mdl ,
127- queryset = mdl .objects .all (),
128135 zoom_levels = zoom_levels ,
129- number_of_thread = number_of_thread ,
136+ number_of_workers = number_of_workers ,
137+ number_of_threads_by_worker = number_of_threads_by_worker ,
130138 )
0 commit comments