Перейти к содержанию

Географические данные

В этом разделе описаны встроенные паттерны для генерации географических данных.

GeoPatterns

Географические данные (Широта, Долгота).

latitude = r"^-?([1-8]?\d(\.\d{1,6})?|90(\.0{1,6})?)$"
longitude = r"^-?((1[0-7]\d(\.\d{1,6})?)|(\d{1,2}(\.\d{1,6})?)|180(\.0{1,6})?)$"

Пример использования

from fucktar.generator import BasePattern
from fucktar.config import PatternConfig
from fucktar.default_patterns.geo import GeoPatterns

class GeoDataPatterns(BasePattern[GeoData]):
    latitude = GeoPatterns.latitude
    longitude = GeoPatterns.longitude

    pattern_config = PatternConfig(
        scope="geo",
        unique_fields=["latitude", "longitude"]
    )

Особенности паттернов

Широта (latitude)

Паттерн генерирует значения широты в диапазоне от -90 до 90 градусов с точностью до 6 знаков после запятой.

Формат: [-]DD.DDDDDD или [-]DD (целые градусы)

Примеры корректных значений: - 45.123456 - -75.987654 - 0 - 90.000000 - -90

Долгота (longitude)

Паттерн генерирует значения долготы в диапазоне от -180 до 180 градусов с точностью до 6 знаков после запятой.

Формат: [-]DDD.DDDDDD или [-]DDD (целые градусы)

Примеры корректных значений: - 120.123456 - -175.987654 - 0 - 180.000000 - -180

Использование в моделях данных

При использовании этих паттернов в моделях данных, сгенерированные строки могут быть преобразованы в числовые значения:

from dataclasses import dataclass
from decimal import Decimal

@dataclass
class Location:
    latitude_str: str
    longitude_str: str

    @property
    def latitude(self) -> Decimal:
        return Decimal(self.latitude_str)

    @property
    def longitude(self) -> Decimal:
        return Decimal(self.longitude_str)

Это позволяет работать с координатами как с точными десятичными значениями, сохраняя при этом возможность генерации через строковые паттерны.