یک 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 برای شروع کار رایگان است ، بدون محدودیت زمانی و کارت اعتباری مورد نیاز ، شما را قادر می سازد تا پروژه های داده خود را به طور کارآمد آزمایش و مقیاس بندی کنید.