برنامه نویسی

یک API تجزیه و تحلیل جغرافیایی در زمان واقعی با Tinybird بسازید

داده های جغرافیایی برای برنامه هایی که حرکات کاربر را ردیابی می کنند ، تجزیه و تحلیل الگوهای مکانی یا ارائه خدمات مبتنی بر موقعیت مکانی محوری است. این که آیا این برای ردیابی وسایل نقلیه تحویل در زمان واقعی ، تجزیه و تحلیل ترافیک پا در یک فروشگاه خرده فروشی یا تهیه محتوای شخصی بر اساس مکان کاربر است ، امکان پردازش و تجزیه و تحلیل داده های جغرافیایی به طور مؤثر بسیار مهم است. در این آموزش ، یاد می گیرید که چگونه یک API در زمان واقعی برای پردازش و تجزیه و تحلیل داده های جغرافیایی با استفاده از Tinybird بسازید. Tinybird یک پشتیبان تجزیه و تحلیل داده برای توسعه دهندگان نرم افزار است. شما از Tinybird برای ساختن API های تحلیلی در زمان واقعی استفاده می کنید بدون اینکه نیاز به راه اندازی یا مدیریت زیرساخت های اساسی داشته باشید. Tinybird یک گردش کار محلی برای توسعه محلی ، استقرار مبتنی بر GIT ، تعاریف منابع به عنوان کد و ویژگی هایی را برای توسعه دهندگان بومی ارائه می دهد. با استفاده از منابع و لوله های داده Tinybird ، می توانید به راحتی داده های جغرافیایی را از طریق API های با کارایی بالا مصرف ، تبدیل و سرو کنید. این آموزش شما را از طریق ایجاد منابع داده برای ذخیره رویدادهای جغرافیایی ، تبدیل این داده ها برای استخراج بینش های معنی دار و در آخر ، استفاده از API های مقیاس پذیر برای ردیابی مکان های کاربر ، بازیابی تاریخچه مکان کاربر ، تجزیه و تحلیل داده های مکان در طول زمان و یافتن کاربران اطراف بر اساس مختصات راهنمایی می کند. بیایید با Tinybird به دنیای تجزیه و تحلیل جغرافیایی در زمان واقعی شیرجه بزنیم.

درک داده ها

تصور کنید که داده های شما به این شکل است:

{"user_id": "user_396", "latitude": 2023638.396, "longitude": 2023548.396, "accuracy": 11, "event_type": "departed", "device_id": "device_396", "timestamp": "2025-04-13 09:32:45"}
{"user_id": "user_169", "latitude": 1828226.169, "longitude": 1828136.169, "accuracy": 64, "event_type": "exited_region", "device_id": "device_169", "timestamp": "2025-04-13 19:46:15"}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این داده ها نشانگر رویدادهای مکانی است که از کاربران ضبط شده است ، از جمله شناسه های آنها ، مختصات (عرض جغرافیایی و طول جغرافیایی) ، صحت داده های مکان ، نوع رویداد (به عنوان مثال ، چک ، عزیمت) ، شناسه دستگاه و زمان بندی این رویداد. برای ذخیره این داده ها در Tinybird ، شما یک منبع داده با طرح زیر ایجاد می کنید:

DESCRIPTION >
    Stores location events with user IDs, coordinates, and timestamps

SCHEMA >
    `user_id` String `json:$.user_id`,
    `latitude` Float64 `json:$.latitude`,
    `longitude` Float64 `json:$.longitude`,
    `accuracy` Float32 `json:$.accuracy`,
    `event_type` String `json:$.event_type`,
    `device_id` String `json:$.device_id`,
    `timestamp` DateTime `json:$.timestamp`

ENGINE "MergeTree"
ENGINE_PARTITION_KEY "toYYYYMM(timestamp)"
ENGINE_SORTING_KEY "timestamp, user_id, event_type"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این طرح برای بهینه سازی عملکرد پرس و جو با مرتب سازی داده ها طراحی شده است timestampبا user_idوت event_typeبشر در MergeTree موتور ، همراه با کلیدهای پارتیشن بندی و مرتب سازی مناسب ، ذخیره و بازیابی داده های کارآمد را تضمین می کند. برای وارد کردن داده ها به این منبع داده ، API رویدادهای Tinybird به شما امکان می دهد رویدادهای JSON/NDJSON را از جلوی برنامه خود یا پس زمینه با یک درخواست HTTP ساده پخش کنید. ماهیت واقعی API رویدادها و تأخیر کم آن ، آن را برای داده های جغرافیایی ایده آل می کند:

curl -X POST "https://api.europe-west2.gcp.tinybird.co/v0/events?name=location_events&utm_source=DEV&utm_campaign=tb+create+--prompt+DEV" \
     -H "Authorization: Bearer $TB_ADMIN_TOKEN" \
     -d '{
       "user_id": "user_123",
       "latitude": 40.7128,
       "longitude": -74.0060,
       "accuracy": 15.5,
       "event_type": "check_in",
       "device_id": "device_abc",
       "timestamp": "2023-10-15 14:30:00"
     }'
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای داده های رویداد/جریان ، کانکتور Kafka گزینه ای قوی برای ادغام با جریان های موجود Kafka ارائه می دهد. برای داده های دسته ای یا مبتنی بر پرونده ، Connector منابع داده API و S3 روشهای مصرف انعطاف پذیر را ارائه می دهند.

تغییر داده ها و انتشار API

Tinybird داده ها را از طریق لوله ها تبدیل می کند و امکان تحولات دسته ای ، تحولات در زمان واقعی (نماهای مادی) و ایجاد نقاط پایانی API را فراهم می کند.

سابقه مکان کاربر

در user_location_history نقطه پایان تاریخچه مکان کاربر را در یک محدوده زمانی مشخص بازیابی می کند:

DESCRIPTION >
    Retrieve location history for a specific user within a time range

NODE user_location_history_node
SQL >
    SELECT 
        user_id,
        latitude,
        longitude,
        accuracy,
        event_type,
        device_id,
        timestamp
    FROM location_events
    WHERE 
        user_id = {{String(user_id, '')}}
        AND timestamp >= {{DateTime(start_time, '2023-01-01 00:00:00')}}
        AND timestamp <= {{DateTime(end_time, '2023-12-31 23:59:59')}}
    ORDER BY timestamp DESC
    LIMIT {{Int32(limit, 1000)}}

TYPE endpoint
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این لوله رویدادهای موقعیت مکانی را توسط user_id و یک محدوده تاریخ/زمان ، نتایج را توسط timestamp، و خروجی را محدود می کند. استفاده از پارامترهای پرس و جو (user_idبا start_timeبا end_timeبا limit) API را انعطاف پذیر می کند و امکان نمایش داده های متناسب را فراهم می کند.

تجزیه و تحلیل مکان

در location_analytics مصالح انتهایی داده های رویداد مکان را در دوره های زمانی مختلف:

DESCRIPTION >
    Get analytics on location events by aggregating data over different time periods

NODE location_analytics_node
SQL >
    SELECT 
        {{String(time_bucket, 'hour')}} AS time_bucket,
        CASE 
            WHEN {{String(time_bucket, 'hour')}} = 'hour' THEN toStartOfHour(timestamp)
            WHEN {{String(time_bucket, 'hour')}} = 'day' THEN toStartOfDay(timestamp)
            WHEN {{String(time_bucket, 'hour')}} = 'week' THEN toStartOfWeek(timestamp)
            WHEN {{String(time_bucket, 'hour')}} = 'month' THEN toStartOfMonth(timestamp)
            ELSE toStartOfHour(timestamp)
        END AS bucket_start,
        event_type,
        count() AS event_count,
        count(DISTINCT user_id) AS unique_users,
        avg(accuracy) AS avg_accuracy
    FROM location_events
    WHERE 
        timestamp >= {{DateTime(start_time, '2023-01-01 00:00:00')}}
        AND timestamp <= {{DateTime(end_time, '2023-12-31 23:59:59')}}
        AND event_type = {{String(event_type, '')}}
    GROUP BY 
        time_bucket,
        bucket_start,
        event_type
    ORDER BY bucket_start DESC

TYPE endpoint
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این لوله امکان تجمع پویا را بر اساس مشخص شده فراهم می کند time_bucket (به عنوان مثال ، ساعت ، روز ، هفته ، ماه) و رویدادها بر اساس نوع و محدوده زمانی. این تعداد وقایع ، کاربران منحصر به فرد و دقت متوسط ​​داده های مکان را محاسبه می کند.

کاربران اطراف

در nearby_users نقطه پایانی کاربران را در شعاع مشخصی از مختصات داده شده پیدا می کند:

DESCRIPTION >
    Find users within a specified radius of a given coordinate

NODE nearby_users_node
SQL >
    SELECT 
        user_id,
        latitude,
        longitude,
        event_type,
        timestamp,
        111.111 * 
        SQRT(
            POW(latitude - {{Float64(target_lat, 0.0)}}, 2) + 
            POW(longitude * COS(PI() * latitude / 180.0) - {{Float64(target_lon, 0.0)}} * COS(PI() * {{Float64(target_lat, 0.0)}} / 180.0), 2)
        ) AS distance_km
    FROM location_events
    WHERE 
        timestamp >= {{DateTime(start_time, '2023-01-01 00:00:00')}} AND 
        timestamp <= {{DateTime(end_time, '2023-12-31 23:59:59')}}
        AND 111.111 * 
        SQRT(
            POW(latitude - {{Float64(target_lat, 0.0)}}, 2) + 
            POW(longitude * COS(PI() * latitude / 180.0) - {{Float64(target_lon, 0.0)}} * COS(PI() * {{Float64(target_lat, 0.0)}} / 180.0), 2)
        ) <= {{Float64(radius_km, 1.0)}}
    ORDER BY distance_km ASC
    LIMIT {{Int32(limit, 100)}}

TYPE endpoint
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این لوله فاصله بین یک مکان هدف و مختصات هر رویداد را محاسبه می کند ، نتایج فیلتر را با فاصله ، زمان و محدود کردن تعداد نتایج محاسبه می کند. این یک روش کارآمد برای یافتن کاربران مجاور در شعاع معین است.

اعزام به تولید

استقرار پروژه خود به Tinybird Cloud ساده با tb --cloud deploy فرمان این دستور نقاط پایانی API آماده تولید و مقیاس پذیر را ایجاد می کند. Tinybird منابع را به عنوان کد مدیریت می کند ، که با اجازه استقرار خودکار و کنترل نسخه خطوط لوله تجزیه و تحلیل داده های شما ، گردش کار CI/CD را تکمیل می کند. تأمین امنیت API های شما ضروری است ، و Tinybird احراز هویت مبتنی بر توکن را برای اطمینان از اینکه فقط درخواست های مجاز می توانند به نقاط پایانی شما دسترسی پیدا کنند. در اینجا نحوه تماس با یکی از نقاط پایانی مستقر آمده است:

curl -X GET "https://api.europe-west2.gcp.tinybird.co/v0/pipes/user_location_history.json?token=%24TB_ADMIN_TOKEN&user_id=user_123&start_time=2023-01-01+00%3A00%3A00&end_time=2023-12-31+23%3A59%3A59&limit=500&utm_source=DEV&utm_campaign=tb+create+--prompt+DEV"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پایان

در این آموزش ، شما یک API تجزیه و تحلیل جغرافیایی در زمان واقعی با Tinybird ایجاد کرده اید. شما آموخته اید که چگونه داده های جغرافیایی را وارد کنید ، آن را برای استخراج بینش های معنی دار تبدیل کنید و API های مقیاس پذیر را برای موارد مختلف استفاده از ژئولیاک مستقر کنید. Tinybird روند ساخت و مدیریت خطوط لوله داده در زمان واقعی را ساده می کند و به شما امکان می دهد تا روی ایجاد ارزش از داده های خود تمرکز کنید. برای ساخت و استقرار اولین API های داده در زمان واقعی خود در چند دقیقه در Tinybird ثبت نام کنید. Tinybird برای شروع کار رایگان است ، بدون محدودیت زمانی و کارت اعتباری مورد نیاز ، شما را قادر می سازد تا پروژه های داده خود را به طور کارآمد آزمایش و مقیاس بندی کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا