این سند یک معماری مرجع و مثالی برای ایجاد تجسم دادههای نقشه با دادههای مکان در Google Cloud Platform BigQuery و Google Maps Platform Datasets API ارائه میکند، مانند تجزیه و تحلیل دادههای شهری باز، ایجاد نقشه پوشش مخابراتی، یا تجسم آثار حرکت ناوگان وسایل نقلیه سیار.
تجسم داده های نقشه ابزار قدرتمندی برای تعامل با کاربران و کشف بینش های مکانی در داده های مکان است. داده های مکان داده هایی هستند که دارای ویژگی های نقطه، خط یا چند ضلعی هستند. به عنوان مثال، نقشه های آب و هوا به مصرف کنندگان کمک می کند تا سفرها را درک کنند و برنامه ریزی کنند و برای طوفان آماده شوند. نقشههای هوش تجاری به کاربران کمک میکنند تا بینشهای حاصل از تجزیه و تحلیل دادههای خود را کشف کنند، و نقشههای مخابراتی به کاربران کمک میکنند تا پوشش و کیفیت ارائهدهندگان خود را در یک منطقه خدماتی معین درک کنند.
با این حال، برای توسعه دهندگان برنامه دشوار است که داده های نقشه بزرگ را به تصویر بکشند که عملکردی داشته باشند و تجربه کاربری عالی را ارائه دهند. داده های بزرگ باید در سمت سرویس گیرنده حافظه بارگذاری شوند، که باعث کندی بارگذاری اولین نقشه می شود. تصویر باید در همه دستگاهها از جمله تلفنهای همراه پایینرده که دارای محدودیتهای حافظه و GPU هستند، کارایی داشته باشد. در نهایت، توسعهدهندگان باید یک کتابخانه ارائه دادههای بزرگ را انتخاب کنند که قابل حمل، قابل اعتماد و کارآمد با دادههای بزرگ باشد.
توسعه برنامه هایی با تجسم داده های بزرگ به دو جزء اصلی نیاز دارد.
- پشتیبان مشتری - همه داده ها و خدمات برنامه های پشتیبان مانند پردازش و ذخیره سازی.
- مشتری مشتری - رابط کاربری برنامه شما با یک جزء تجسم نقشه.
در زیر یک نمودار سیستمی از نحوه تعامل این دو مؤلفه با کاربر برنامه، Google Cloud و Google Maps Platform برای ایجاد یک برنامه تجسم داده بزرگ ارائه شده است.
تعدادی از ملاحظات طراحی وجود دارد که باید برای ایجاد یک تجسم داده عملکردی با استفاده از Google Cloud و Google Maps Platform دنبال کنید.
- اندازه داده منبع و فرکانس به روز رسانی .
- اگر دادههای منبع در قالب geojson کمتر از 5 مگابایت است یا اغلب بهروزرسانی میشود، مثلاً پیشبینی رادار آبوهوای زنده، دادهها را بهعنوان سمت مشتری شی geojson در برنامه خود ارائه دهید و با یک لایه deck.gl رندر کنید.
- اگر حجم داده های شما بیش از 5 مگابایت است و سریعتر از یک بار در ساعت به روز نمی شوند، معماری Datasets API را در این سند در نظر بگیرید.
- مجموعه داده ها از فایل های تا اندازه 350 مگابایت پشتیبانی می کنند.
- اگر دادههای شما بزرگتر از 350 مگابایت است، قبل از انتقال به Datasets، دادههای هندسی را در فایل منبع هرس یا ساده کنید (به Data Pruning زیر مراجعه کنید).
- طرح و فرمت
- اطمینان حاصل کنید که داده های شما دارای یک ویژگی شناسه جهانی منحصر به فرد برای هر ویژگی است. یک شناسه منحصربهفرد به شما امکان میدهد یک ویژگی خاص را انتخاب کرده و سبک دهید یا دادهها را به یک ویژگی بپیوندید تا تجسم کنید، به عنوان مثال یک ویژگی انتخاب شده را در رویداد کاربر «کلیک کنید» استایل دهید.
- داده های خود را با توجه به مشخصات API Datasets با نام ستون ها، انواع داده ها و انواع اشیاء GeoJSON به صورت CSV یا GeoJSON قالب بندی کنید.
- برای ایجاد آسان مجموعه داده ها از BigQuery، ستونی به نام
wkt
در صادرات SQL CSV خود ایجاد کنید. Datasets از وارد کردن هندسه از یک CSV در قالب متن شناخته شده (WKT) از ستونی به نامwkt
پشتیبانی می کند. - بررسی کنید که دادههای شما دارای هندسه و انواع دادههای معتبر هستند. به عنوان مثال، GeoJSON باید در سیستم مختصات WGS84، ترتیب سیم پیچی هندسی و غیره باشد.
- از ابزاری مانند geojson-validate برای اطمینان از معتبر بودن همه هندسههای موجود در فایل منبع استفاده کنید یا از ogr2ogr برای تبدیل فایل منبع بین قالبها یا سیستمهای مختصات استفاده کنید.
- هرس داده ها
- تعداد ویژگی های ویژگی ها را به حداقل برسانید. میتوانید ویژگیهای اضافی را در زمان اجرا روی یک کلید شناسه منحصر به فرد به یک ویژگی بپیوندید ( مثال ).
- در صورت امکان از انواع داده های عدد صحیح برای اشیاء دارایی استفاده کنید تا فضای ذخیره سازی کاشی را به حداقل برسانید، و کاشی ها را برای بارگذاری روی HTTPS در یک برنامه مشتری کارآمد نگه دارید.
- ساده کردن و/یا جمعآوری هندسه ویژگیهای بسیار پیچیده. برای کاهش اندازه فایل منبع و بهبود عملکرد نقشه، از توابع BigQuery مانند ST_Simplify در هندسه های پیچیده چند ضلعی استفاده کنید.
- کاشی کاری
- Google Maps Datasets API کاشیهای نقشه را از فایل داده منبع شما برای استفاده با وب یا نقشههای تلفن همراه SDK ایجاد میکند.
- کاشی های نقشه یک سیستم نمایه سازی مبتنی بر زوم هستند که راه های کارآمدتری برای بارگذاری داده ها در یک برنامه بصری ارائه می دهد.
- کاشیهای نقشه ممکن است ویژگیهای متراکم یا پیچیده را در سطوح زوم پایینتر کاهش دهند. هنگامی که کاربر به یک ایالت یا کشور بزرگنمایی می کند (مثلا z5-z12) ممکن است متفاوت از زمانی که در یک شهر یا محله بزرگنمایی می شود (مثلا z13-z18) به نظر برسد.
در این مثال، معماری مرجع را برای ایجاد یک برنامه وب با GCP و Google Maps اعمال میکنیم که تمام راهآهنهای لندن را از دادههای Open Street Map (OSM) تجسم میکند.
- دسترسی به BigQuery Sandbox و Cloud Console
- مطمئن شوید که یک پروژه GCP و راهاندازی حساب صورتحساب دارید.
به BigQuery Public Datasets بروید. مجموعه داده 'bigquery-public-data' و جدول geo_openstreetmap.planet_features
شامل داده های نقشه خیابان باز (OSM) کل جهان از جمله تمام ویژگی های ممکن است. تمام ویژگی های موجود برای پرس و جو در OSM Wiki از جمله amenity
، road
و landuse
را کشف کنید.
از Cloud Shell یا BigQuery Cloud Console ( https://console.cloud.google.com ) برای پرس و جوی جدول با استفاده از SQL استفاده کنید. قطعه کد زیر از دستور bq query استفاده میکند تا با استفاده از یک جعبه مرزی و تابع ST_Intersects، تمام خطوط راهآهن فیلتر شده به لندن را جستجو کند.
برای انجام این پرس و جو از Cloud Shell، قطعه کد زیر را اجرا کنید و شناسه پروژه، مجموعه داده و نام جدول را برای محیط خود به روز کنید.
bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id,
feature_type,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "name") AS name,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "railway") AS railway,
geometry as wkt
FROM bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags))
AND ST_Intersects(
geometry,
ST_MakePolygon(ST_MakeLine(
[ST_GeogPoint(-0.549370, 51.725346),
ST_GeogPoint(-0.549370, 51.2529407),
ST_GeogPoint(0.3110581, 51.25294),
ST_GeogPoint(0.3110581, 51.725346),
ST_GeogPoint(-0.549370, 51.725346)]
))
)'
پرس و جو برمی گرداند:
- یک شناسه منحصر به فرد برای هر ویژگی
osm_id
-
feature_type
به عنوان مثال نقاط، خطوط و غیره -
name
ویژگی به عنوان مثالPaddington Station
- نوع
railway
به عنوان مثال اصلی، گردشگری، نظامی و غیره -
wkt
ویژگی - نقطه، خط یا هندسه چند ضلعی در قالب WKT. WKT فرمت استاندارد دادهای است که ستونهای جغرافیایی BigQuery در یک پرس و جو برمیگردانند.
توجه - برای اعتبارسنجی بصری نتایج جستجوی خود قبل از ایجاد مجموعه داده، می توانید به سرعت داده های خود را در داشبورد BigQuery با استفاده از Looker Studio تجسم کنید.
برای صادر کردن جدول به یک فایل CSV در یک سطل Google Cloud Storage، از دستور استخراج bq در Cloud Shell استفاده کنید:
bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv
توجه: میتوانید هر مرحله را با استفاده از Cloud Scheduler خودکار کنید تا دادههای خود را بهطور منظم بهروزرسانی کنید.
سپس یک مجموعه داده پلتفرم Google Maps را از خروجی جستجو در Google Cloud Storage (GCS) ایجاد کنید. با استفاده از Datasets API ، میتوانید یک مجموعه داده ایجاد کنید و سپس دادهها را از یک فایل میزبانی شده در GCS در مجموعه داده خود آپلود کنید .
برای شروع، Maps Datasets API را در پروژه GCP خود فعال کنید و اسناد API را مرور کنید. کتابخانه های کلاینت Python و Node.js برای فراخوانی Datasets API از منطق در باطن برنامه شما وجود دارد. علاوه بر این، یک Datasets GUI برای ایجاد مجموعه داده ها به صورت دستی در Cloud Console وجود دارد.
پس از اینکه آپلود مجموعه داده شما کامل شد، میتوانید پیشنمایش مجموعه داده خود را در رابط کاربری گرافیکی Datasets مشاهده کنید.
هنگامی که مجموعه داده شما ایجاد شد، می توانید یک شناسه نقشه با سبک نقشه مرتبط ایجاد کنید . در ویرایشگر Map Style، میتوانید یک mapId و سبک را با Dataset مرتبط کنید. اینجا همچنین جایی است که میتوانید از Cloud Based Map Styling برای سفارشی کردن ظاهر و احساس نقشه خود استفاده کنید.
در نهایت، میتوانید مجموعه داده را با استفاده از Maps JS API به برنامه تجسم دادههای سمت سرویس گیرنده اضافه کنید. شی نقشه خود را با استفاده از mapID مرتبط با مجموعه داده شما در مرحله قبل راه اندازی کنید. سپس سبک و تعامل لایه Dataset خود را تنظیم کنید. برای جزئیات بیشتر، یک راهنمای کامل برای یک ظاهر طراحی مبتنی بر داده با Datasets را بررسی کنید.
با استفاده از Maps JS API میتوانید سبک را سفارشی کنید، کنترلکنندههای رویداد را برای تغییر پویا سبک و موارد دیگر اضافه کنید. نمونه ها را در اسناد مشاهده کنید. در زیر یک تابع setStyle برای ایجاد سبک ویژگی نقطه و خط برای این مثال بر اساس ویژگی "feature_type" تعریف می کنیم.
function setStyle(params) {
const map.getDatasetFeatureLayer("your-dataset-id");
const datasetFeature = params.feature;
const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
return {
fillColor: "blue",
strokeColor: "blue",
fillOpacity: 0.5,
strokeWeight: 1,
}
} else if (type == "points") {
return {
fillColor: "black",
strokeColor: "black",
strokeOpacity: 0.5,
pointRadius: 2,
fillOpacity: 0.5,
strokeWeight: 1,
}
}
}
توجه - مطمئن شوید که همیشه برای مجموعه داده خود به برنامه نقشه خود انتساب اضافه کنید. برای افزودن انتساب OSM، از نمونه کد انتساب در اسناد پیروی از دستورالعملهای OSM پیروی کنید.
این کد بالا هنگامی که در یک برنامه وب یک صفحه مقداردهی اولیه می شود، داده های تصویری نقشه زیر را به دست می دهد:
از اینجا، میتوانید تجسم نقشه خود را در تابع setStyle() با افزودن منطق به ویژگیهای فیلتر، اضافه کردن استایل بر اساس تعامل کاربر و تعامل با بقیه برنامههای خود گسترش دهید.
در این مقاله، ما در مورد معماری مرجع و اجرای مثالی از یک برنامه تجسم داده بزرگ با استفاده از Google Cloud و Google Maps Platform بحث کردیم. با استفاده از این معماری مرجع، میتوانید برنامههای تجسم دادههای مکان را از هر داده در GCP BigQuery ایجاد کنید که در هر دستگاهی با استفاده از Google Maps Datasets API کارایی دارد.
مطالعه بیشتر:
- اسناد API مجموعه داده های پلتفرم Google Maps
- با Data Drive Styles، دادههای خود را در زمان واقعی مشاهده کنید
- مقدمه ای بر تجزیه و تحلیل جغرافیایی در BigQuery
- استفاده از GeoJSON در BigQuery برای تجزیه و تحلیل جغرافیایی
نویسندگان اصلی:
- رایان باومن ، مدیر مهندسی راه حل های پلتفرم نقشه های گوگل