BigQuery এবং Datasets API দিয়ে আপনার ডেটা কল্পনা করুন

এই ডকুমেন্টটি গুগল ক্লাউড বিগকোয়েরি এবং গুগল ম্যাপস প্ল্যাটফর্ম ডেটাসেটস এপিআই-এর লোকেশন ডেটা ব্যবহার করে ম্যাপ ডেটা ভিজ্যুয়ালাইজেশন তৈরির জন্য একটি রেফারেন্স আর্কিটেকচার এবং উদাহরণ প্রদান করে, যেমন—উন্মুক্ত পৌরসভা ডেটা বিশ্লেষণ, টেলিযোগাযোগ কভারেজ ম্যাপ তৈরি, অথবা চলমান যানবাহন বহরের চলাচলের গতিপথের চিত্রায়ন।

মানচিত্র ডেটা ভিজ্যুয়ালাইজেশন ব্যবহারকারীদের সম্পৃক্ত করতে এবং অবস্থান ডেটার মধ্যে স্থানিক অন্তর্দৃষ্টি উন্মোচন করার একটি শক্তিশালী মাধ্যম। অবস্থান ডেটা হলো এমন ডেটা যাতে বিন্দু, রেখা বা বহুভুজ বৈশিষ্ট্য থাকে। উদাহরণস্বরূপ, আবহাওয়ার মানচিত্র গ্রাহকদের ভ্রমণ বুঝতে ও পরিকল্পনা করতে এবং ঝড়ের জন্য প্রস্তুত হতে সাহায্য করে; ব্যবসায়িক বুদ্ধিমত্তার মানচিত্র ব্যবহারকারীদের তাদের ডেটা বিশ্লেষণ থেকে অন্তর্দৃষ্টি উন্মোচন করতে সাহায্য করে, এবং টেলিযোগাযোগের মানচিত্র ব্যবহারকারীদের একটি নির্দিষ্ট পরিষেবা এলাকায় তাদের পরিষেবা প্রদানকারীদের কভারেজ ও গুণমান বুঝতে সাহায্য করে।

তবে, অ্যাপ ডেভেলপারদের জন্য এমন বড় আকারের ম্যাপ ডেটা ভিজ্যুয়ালাইজেশন তৈরি করা কঠিন, যা ভালো পারফর্ম করে এবং ব্যবহারকারীকে চমৎকার অভিজ্ঞতা দেয়। বিশাল ডেটা ক্লায়েন্ট সাইডে মেমরিতে লোড করতে হয়, যার ফলে প্রথমবার ম্যাপ লোড হতে বেশি সময় লাগে। ভিজ্যুয়ালটিকে অবশ্যই সব ডিভাইসে পারফর্ম করতে সক্ষম হতে হবে, যার মধ্যে নিম্নমানের মোবাইল ফোনও রয়েছে, যেগুলোতে মেমরি এবং জিপিইউ-এর সীমাবদ্ধতা থাকে। পরিশেষে, ডেভেলপারদের এমন একটি লার্জ ডেটা রেন্ডারিং লাইব্রেরি বেছে নিতে হবে যা পোর্টেবল, নির্ভরযোগ্য এবং বিশাল ডেটার ক্ষেত্রে ভালো পারফর্ম করে।

রেফারেন্স আর্কিটেকচার

বৃহৎ ডেটা ভিজ্যুয়ালাইজেশন সহ অ্যাপ তৈরি করতে দুটি প্রধান উপাদানের প্রয়োজন হয়।

  1. গ্রাহক ব্যাকএন্ড – অ্যাপের সমস্ত ব্যাকএন্ড ডেটা এবং প্রসেসিং ও স্টোরেজের মতো পরিষেবা।
  2. গ্রাহক ক্লায়েন্ট - মানচিত্র প্রদর্শনের উপাদানসহ আপনার অ্যাপের ইউজার ইন্টারফেস।

একটি বৃহৎ ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ তৈরি করার জন্য এই দুটি উপাদান কীভাবে অ্যাপ ব্যবহারকারী, গুগল ক্লাউড এবং গুগল ম্যাপস প্ল্যাটফর্মের সাথে সমন্বয় করে, তার একটি সিস্টেম ডায়াগ্রাম নিচে দেওয়া হলো।

architecture diagram

নকশা বিবেচনা

গুগল ক্লাউড এবং গুগল ম্যাপস প্ল্যাটফর্ম ব্যবহার করে উন্নত কর্মক্ষম ডেটা ভিজ্যুয়ালাইজেশন তৈরি করতে বেশ কিছু ডিজাইন সংক্রান্ত বিষয় অনুসরণ করতে হয়।

  1. উৎস ডেটার আকার এবং আপডেটের পুনরাবৃত্তি
    1. যদি geojson ফরম্যাটের সোর্স ডেটার সাইজ ৫ মেগাবাইটের কম হয় অথবা এটি খুব ঘন ঘন আপডেট হয়, যেমন—লাইভ ওয়েদার রাডার পূর্বাভাস, তাহলে আপনার অ্যাপে ক্লায়েন্ট সাইডে ডেটা geojson অবজেক্ট হিসেবে পরিবেশন করার কথা বিবেচনা করুন এবং একটি deck.gl লেয়ার দিয়ে তা রেন্ডার করুন।
    2. যদি আপনার ডেটার আকার ৫ মেগাবাইটের বেশি হয় এবং তা প্রতি ঘণ্টায় একবারের বেশি আপডেট না হয়, তাহলে এই নথিতে বর্ণিত ডেটাসেট এপিআই (Datasets API) আর্কিটেকচারটি বিবেচনা করুন।
      1. ডেটা সেটগুলো ৩৫০ মেগাবাইট পর্যন্ত আকারের ফাইল সমর্থন করে।
      2. আপনার ডেটা ৩৫০ মেগাবাইটের বেশি হলে, ডেটাসেট-এ পাঠানোর আগে সোর্স ফাইল থেকে জ্যামিতিক ডেটা ছাঁটাই বা সরলীকরণ করার কথা বিবেচনা করুন (নিচে ডেটা ছাঁটাই দেখুন)।
  2. স্কিমা এবং বিন্যাস
    1. নিশ্চিত করুন যে আপনার ডেটার প্রতিটি ফিচারের জন্য একটি বিশ্বব্যাপী অনন্য আইডি প্রপার্টি রয়েছে। একটি অনন্য আইডি আপনাকে একটি নির্দিষ্ট ফিচার নির্বাচন ও স্টাইল করতে অথবা ভিজ্যুয়ালাইজ করার জন্য কোনো ফিচারের সাথে ডেটা যুক্ত করতে সাহায্য করে, যেমন—ব্যবহারকারীর “ক্লিক” ইভেন্টে একটি নির্বাচিত ফিচারকে স্টাইল করা।
    2. ডেটাসেট এপিআই স্পেক অনুযায়ী বৈধ কলামের নাম, ডেটা টাইপ এবং GeoJSON অবজেক্টের টাইপ ব্যবহার করে আপনার ডেটা CSV বা GeoJSON ফরম্যাটে সাজান।
    3. BigQuery থেকে সহজে ডেটাসেট তৈরি করার জন্য, আপনার SQL CSV এক্সপোর্টে wkt নামের একটি কলাম তৈরি করুন। ডেটাসেট, wkt নামের একটি কলাম থেকে ওয়েল-নোন টেক্সট (WKT) ফরম্যাটে থাকা CSV থেকে জিওমেট্রি ইম্পোর্ট করা সমর্থন করে।
    4. আপনার ডেটার জ্যামিতি এবং ডেটা টাইপ বৈধ কিনা তা যাচাই করুন। উদাহরণস্বরূপ, GeoJSON অবশ্যই WGS84 স্থানাঙ্ক ব্যবস্থা, জ্যামিতিক ওয়াইন্ডিং অর্ডার ইত্যাদিতে থাকতে হবে।
    5. উৎস ফাইলের সমস্ত জ্যামিতি বৈধ কিনা তা নিশ্চিত করতে geojson-validate- এর মতো টুল ব্যবহার করুন, অথবা বিভিন্ন ফরম্যাট বা স্থানাঙ্ক ব্যবস্থার মধ্যে উৎস ফাইলটি রূপান্তর করতে ogr2ogr ব্যবহার করুন।
  3. ডেটা ছাঁটাই
    1. ফিচারের প্রোপার্টি সংখ্যা হ্রাস করুন। আপনি রানটাইমে একটি অনন্য শনাক্তকারী কী-এর মাধ্যমে কোনো ফিচারের সাথে অতিরিক্ত প্রোপার্টি যুক্ত করতে পারেন ( উদাহরণস্বরূপ )।
    2. টাইল স্টোরেজ স্পেস কমাতে এবং ক্লায়েন্ট অ্যাপে HTTPS-এর মাধ্যমে টাইল লোড করার সময় পারফরম্যান্স ঠিক রাখতে, যেখানে সম্ভব প্রপার্টি অবজেক্টের জন্য ইন্টিজার ডেটা টাইপ ব্যবহার করুন।
    3. অত্যন্ত জটিল ফিচার জ্যামিতিগুলোকে সরল করুন এবং/অথবা একত্রিত করুন; সোর্স ফাইলের আকার কমাতে ও ম্যাপের পারফরম্যান্স উন্নত করতে জটিল পলিগন জ্যামিতির ক্ষেত্রে ST_Simplify-এর মতো BigQuery ফাংশন ব্যবহার করার কথা বিবেচনা করুন।
  4. টাইলস
    1. গুগল ম্যাপস ডেটাসেটস এপিআই আপনার সোর্স ডেটা ফাইল থেকে ওয়েব বা মোবাইল ম্যাপস এসডিকে-এর সাথে ব্যবহারের জন্য ম্যাপ টাইলস তৈরি করে।
    2. ম্যাপ টাইলস হলো একটি জুম-ভিত্তিক সূচীকরণ ব্যবস্থা, যা কোনো ভিজ্যুয়াল অ্যাপে ডেটা লোড করার আরও কার্যকর উপায় প্রদান করে।
    3. কম জুম লেভেলে ম্যাপ টাইলগুলো থেকে ঘন বা জটিল বৈশিষ্ট্যগুলো বাদ পড়তে পারে। যখন একজন ব্যবহারকারী কোনো রাজ্য বা দেশে জুম আউট করেন (যেমন z5-z12), তখন তা কোনো শহর বা পাড়ায় জুম ইন করার (যেমন z13-z18) চেয়ে ভিন্ন দেখাতে পারে।

উদাহরণ - লন্ডনের রেলপথ

এই উদাহরণে, আমরা রেফারেন্স আর্কিটেকচার প্রয়োগ করে গুগল ক্লাউড এবং গুগল ম্যাপস ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করব, যা ওপেন স্ট্রিট ম্যাপ (OSM) ডেটা থেকে লন্ডনের সমস্ত রেলপথকে দৃশ্যমান করবে।

পূর্বশর্ত

  1. BigQuery স্যান্ডবক্স এবং ক্লাউড কনসোলে অ্যাক্সেস
  2. আপনার একটি গুগল ক্লাউড প্রজেক্ট এবং বিলিং অ্যাকাউন্ট সেটআপ করা আছে কিনা তা নিশ্চিত করুন।

ধাপ ১ - BigQuery-তে ডেটা কোয়েরি করুন

BigQuery পাবলিক ডেটাসেট -এ যান। 'bigquery-public-data' ডেটাসেট এবং geo_openstreetmap.planet_features টেবিলে সমস্ত সম্ভাব্য ফিচার সহ সমগ্র বিশ্বের ওপেন স্ট্রিট ম্যাপ (OSM) ডেটা রয়েছে। OSM উইকিতে কোয়েরি করার জন্য উপলব্ধ সমস্ত ফিচার, যেমন amenity , road , এবং landuse সম্পর্কে জানুন।

SQL ব্যবহার করে টেবিলটি কোয়েরি করতে ক্লাউড শেল অথবা বিগকোয়েরি ক্লাউড কনসোল ব্যবহার করুন। নিচের কোড স্নিপেটটিতে একটি বাউন্ডিং বক্স এবং ST_Intersects() ফাংশন ব্যবহার করে শুধুমাত্র লন্ডনকে ফিল্টার করা সমস্ত রেলওয়ে কোয়েরি করার জন্য bq query কমান্ডটি ব্যবহার করা হয়েছে।

ক্লাউড শেল থেকে এই কোয়েরিটি সম্পাদন করতে, আপনার এনভায়রনমেন্ট অনুযায়ী প্রজেক্ট আইডি, ডেটাসেট এবং টেবিলের নাম আপডেট করে নিম্নলিখিত কোড স্নিপেটটি চালান।

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)]
    ))
   )'

কোয়েরিটি ফেরত দেয়:

  1. প্রতিটি বৈশিষ্ট্যের জন্য একটি অনন্য শনাক্তকারী osm_id
  2. feature_type , যেমন বিন্দু, রেখা, ইত্যাদি।
  3. বৈশিষ্ট্যটির name , যেমন Paddington Station
  4. railway ধরণ, যেমন—প্রধান, পর্যটন, সামরিক, ইত্যাদি।
  5. ফিচারটির wkt হলো বিন্দু, রেখা বা বহুভুজ জ্যামিতি, যা WKT ফরম্যাটে থাকে। WKT হলো একটি স্ট্যান্ডার্ড ডেটা ফরম্যাট, যা BigQuery Geography কলামগুলো একটি কোয়েরিতে রিটার্ন করে।

দ্রষ্টব্য - ডেটাসেট তৈরি করার আগে আপনার কোয়েরির ফলাফল চাক্ষুষভাবে যাচাই করতে, আপনি লুকার স্টুডিও (Looker Studio) ব্যবহার করে বিগকোয়েরি (BigQuery)-র ড্যাশবোর্ডে দ্রুত আপনার ডেটা ভিজ্যুয়ালাইজ করতে পারেন।

টেবিলটিকে গুগল ক্লাউড স্টোরেজ বাকেটে একটি CSV ফাইলে এক্সপোর্ট করতে, ক্লাউড শেলে bq extract কমান্ডটি ব্যবহার করুন:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

দ্রষ্টব্য: আপনার ডেটা নিয়মিত আপডেট করার জন্য আপনি ক্লাউড শিডিউলার ব্যবহার করে প্রতিটি ধাপ স্বয়ংক্রিয় করতে পারেন।

ধাপ ২ - আপনার CSV ফাইল থেকে একটি ডেটাসেট তৈরি করুন

এরপরে, কোয়েরি আউটপুট থেকে গুগল ক্লাউড স্টোরেজ (GCS)-এ একটি গুগল ম্যাপস প্ল্যাটফর্ম ডেটাসেট তৈরি করুন। ডেটাসেটস এপিআই (Datasets API) ব্যবহার করে, আপনি একটি ডেটাসেট তৈরি করতে পারেন এবং তারপর GCS-এ হোস্ট করা একটি ফাইল থেকে আপনার ডেটাসেটে ডেটা আপলোড করতে পারেন

শুরু করার জন্য, আপনার গুগল ক্লাউড প্রজেক্টে ম্যাপস ডেটাসেটস এপিআই (Maps Datasets API) সক্রিয় করুন এবং এপিআই ডকুমেন্টেশন পর্যালোচনা করুন। আপনার অ্যাপের ব্যাকএন্ডের লজিক থেকে ডেটাসেটস এপিআই কল করার জন্য পাইথন এবং নোড.জেএস ক্লায়েন্ট লাইব্রেরি রয়েছে। এছাড়াও, ক্লাউড কনসোলে ম্যানুয়ালি ডেটাসেট তৈরি করার জন্য একটি ডেটাসেটস জিইউআই (GUI) রয়েছে।

আপনার ডেটাসেট আপলোড সম্পন্ন হলে, আপনি ডেটাসেটস জিইউআই (GUI)-তে আপনার ডেটাসেটটি প্রিভিউ করতে পারবেন।

Dataset preview

ধাপ ৪ - আপনার ডেটাসেটকে একটি ম্যাপ আইডির সাথে যুক্ত করুন।

আপনার ডেটাসেট তৈরি হয়ে গেলে, আপনি একটি সংশ্লিষ্ট ম্যাপ স্টাইল সহ একটি ম্যাপ আইডি তৈরি করতে পারেন। ম্যাপ স্টাইল এডিটরে, আপনি ডেটাসেটের সাথে একটি ম্যাপ আইডি এবং স্টাইল যুক্ত করতে পারেন। এখানেই আপনি আপনার ম্যাপের চেহারা ও অনুভূতি কাস্টমাইজ করার জন্য ক্লাউড ভিত্তিক ম্যাপ স্টাইলিং প্রয়োগ করতে পারেন।

ধাপ ৫ - আপনার ক্লায়েন্ট অ্যাপের মানচিত্র ভিজ্যুয়ালাইজেশন তৈরি করুন

অবশেষে, আপনি Maps JS API ব্যবহার করে ডেটাসেটটি একটি ক্লায়েন্ট-সাইড ডেটা ভিজ্যুয়ালাইজেশন অ্যাপে যুক্ত করতে পারেন। পূর্ববর্তী ধাপ থেকে আপনার ডেটাসেটের সাথে যুক্ত mapID ব্যবহার করে আপনার ম্যাপ অবজেক্টটি ইনিশিয়ালাইজ করুন। তারপর আপনার ডেটাসেট লেয়ারের স্টাইল এবং ইন্টারঅ্যাকটিভিটি সেট করুন। আরও বিস্তারিত জানতে ডেটাসেট ব্যবহার করে ডেটা-ড্রাইভেন স্টাইলিং-এর একটি সম্পূর্ণ গাইড দেখুন।

আপনি Maps JS API ব্যবহার করে স্টাইল কাস্টমাইজ করতে পারেন, ডাইনামিকভাবে স্টাইল পরিবর্তনের জন্য ইভেন্ট হ্যান্ডলার যোগ করতে পারেন এবং আরও অনেক কিছু করতে পারেন। ডক্স -এ উদাহরণ দেখুন। নিচে আমরা 'feature_type' অ্যাট্রিবিউটের উপর ভিত্তি করে এই উদাহরণের জন্য পয়েন্ট এবং লাইন ফিচার স্টাইল তৈরি করতে একটি setStyle ফাংশন সংজ্ঞায়িত করব।

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,
           }
     }
}

উপরের এই কোডটি একটি একক পৃষ্ঠার ওয়েব অ্যাপে ইনিশিয়ালাইজ করা হলে নিম্নলিখিত মানচিত্র ডেটা ভিজ্যুয়ালটি পাওয়া যায়:

london railway map

এখান থেকে, আপনি setStyle() ফাংশনে ফিচার ফিল্টার করার লজিক যোগ করে, ব্যবহারকারীর ইন্টারঅ্যাকশনের উপর ভিত্তি করে স্টাইলিং যোগ করে এবং আপনার অ্যাপ্লিকেশনের বাকি অংশের সাথে ইন্টারঅ্যাক্ট করার মাধ্যমে আপনার ম্যাপ ভিজ্যুয়ালাইজেশনকে আরও প্রসারিত করতে পারেন।

উপসংহার

এই ডকুমেন্টে, আমরা গুগল ক্লাউড এবং গুগল ম্যাপস প্ল্যাটফর্ম ব্যবহার করে একটি বৃহৎ ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ্লিকেশনের একটি রেফারেন্স আর্কিটেকচার এবং উদাহরণ বাস্তবায়ন নিয়ে আলোচনা করেছি। এই রেফারেন্স আর্কিটেকচারটি ব্যবহার করে, আপনি গুগল ক্লাউড বিগকোয়েরি-তে থাকা যেকোনো ডেটা থেকে লোকেশন ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ তৈরি করতে পারবেন, যা গুগল ম্যাপস ডেটাসেটস এপিআই ব্যবহার করে যেকোনো ডিভাইসে ভালোভাবে কাজ করে।

পরবর্তী পদক্ষেপ

আরও পড়ুন:

অবদানকারীরা

প্রধান লেখকগণ:

  • রায়ান বাউমান , গুগল ম্যাপস প্ল্যাটফর্ম সলিউশনস ইঞ্জিনিয়ারিং ম্যানেজার