Devobin
عکس
برای نمایش کلیک کنید
برای نمایش کلیک کنید
#Devocook
سیستم تخفیف ناحیهای
1- فرانت به سرور موقعیت کاربر رو میفرسته
2 -بکاند (بررسی داخل محدوده بودن)
مدل:
class Offer(models.Model):
polygon_data = models.JSONField() # GeoJSON مثل {"coordinates": [[lat,lng],...]}
discount = models.IntegerField()
منطق بررسی:
def is_point_in_polygon(lat, lng, polygon_coords):
# الگوریتم Ray-Casting
inside = False
n = len(polygon_coords)
for i in range(n):
x1, y1 = polygon_coords[i]
x2, y2 = polygon_coords[(i+1)%n]
if (y1 > lng) != (y2 > lng):
x_intersect = x1 + (lng - y1)*(x2 - x1)/(y2 - y1)
if x_intersect > lat:
inside = not inside
return inside
فیلتر نهایی:
def get_user_offers(user_lat, user_lng):
offers = Offer.objects.all()
result = []
for offer in offers:
coords = offer.polygon_data['coordinates'][0]
if is_point_in_polygon(user_lat, user_lng, coords):
result.append(offer)
return result
8 · 1K ·