BigQuery-এর মাধ্যমে ডেটা ভিজ্যুয়ালাইজেশন

এই ডকুমেন্ট Google Cloud BigQuery এবং Google Maps Platform Datasets API-এ লোকেশন ডেটা সহ ম্যাপ ডেটা ভিজ্যুয়ালাইজেশন তৈরি করার জন্য একটি রেফারেন্স আর্কিটেকচার এবং উদাহরণ প্রদান করে, যেমন ওপেন মিউনিসিপ্যাল ডেটা বিশ্লেষণ করা, একটি টেলিকমিউনিকেশন কভারেজ ম্যাপ তৈরি করা, বা মোবাইল ভেহিকল ফ্লিট মুভমেন্টের ট্রেস ভিজ্যুয়ালাইজ করা।

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

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

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

অনেক ডেটা ভিজ্যুয়ালাইজেশন সহ অ্যাপ ডেভেলপ করার জন্য দুটি প্রধান কম্পোনেন্ট প্রয়োজন।

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

নিচে একটি সিস্টেম ডায়াগ্রাম দেওয়া হল যা দেখায় যে কীভাবে এই দুটি কম্পোনেন্ট অ্যাপ ব্যবহারকারী, Google Cloud এবং Google Maps Platform-এর সাথে ইন্টার‍্যাক্ট করে একটি বড় ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ তৈরি করে।

আর্কিটেকচার ডায়াগ্রাম

ডিজাইন সংক্রান্ত বিবেচনা

Google Cloud এবং Google Maps Platform ব্যবহার করে পারফর্ম্যান্ট ডেটা ভিজ্যুয়ালাইজেশন তৈরি করতে ডিজাইন সংক্রান্ত বেশ কিছু বিষয় বিবেচনা করতে হয়।

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

উদাহরণ - লন্ডনে রেলওয়ে

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

পূর্বশর্ত

  1. BigQuery Sandbox ও Cloud Console-এ অ্যাক্সেস
  2. আপনার Google Cloud প্রোজেক্ট ও বিলিং অ্যাকাউন্ট সেট-আপ করা আছে কিনা তা ভাল করে দেখে নিন।

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

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

SQL ব্যবহার করে টেবিল কোয়েরি করতে Cloud Shell বা BigQuery Cloud Console ব্যবহার করুন। নিচের কোড স্নিপেট bq কোয়েরি কমান্ড ব্যবহার করে বাউন্ডিং বক্স ও 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)]
    ))
   )'

কোয়েরি থেকে এই ফলাফল পাওয়া যায়:

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

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

Google Cloud Storage বাকেটে CSV ফাইলে টেবিল এক্সপোর্ট করতে, Cloud Shell-এ bq extract কমান্ড ব্যবহার করুন:

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

মনে রাখবেন: আপনার ডেটা নিয়মিত আপডেট করতে Cloud Scheduler ব্যবহার করে আপনি প্রতিটি ধাপ অটোমেট করতে পারবেন।

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

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

শুরু করতে, আপনার Google Cloud প্রোজেক্টে Maps Datasets API চালু করুন এবং API ডকুমেন্ট পর্যালোচনা করুন। আপনার অ্যাপ ব্যাকএন্ডের লজিক থেকে Datasets API কল করার জন্য Python এবং Node.js ক্লায়েন্ট লাইব্রেরি আছে। এছাড়াও, Cloud Console-এ ম্যানুয়ালি ডেটাসেট তৈরি করার জন্য ডেটাসেট GUI আছে।

আপনার ডেটাসেট আপলোড করা হয়ে গেলে, আপনি ডেটাসেট GUI-তে আপনার ডেটাসেটের প্রিভিউ দেখতে পারবেন।

ডেটাসেট প্রিভিউ

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

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

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

সবশেষে, 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,
           }
     }
}

সিঙ্গেল পেজ ওয়েব অ্যাপে উপরের কোডটি ইনিশিয়ালাইজ করা হলে, ম্যাপ ডেটার নিম্নলিখিত ভিজ্যুয়াল পাওয়া যায়:

লন্ডন রেলওয়ে ম্যাপ

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

উপসংহার

এই ডকুমেন্টে, আমরা Google Cloud এবং Google Maps Platform ব্যবহার করে একটি বড় ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ্লিকেশনের একটি রেফারেন্স আর্কিটেকচার এবং উদাহরণ বাস্তবায়ন নিয়ে আলোচনা করেছি। এই রেফারেন্স আর্কিটেকচার ব্যবহার করে, আপনি Google Cloud BigQuery-এর যেকোনও ডেটা থেকে লোকেশন ডেটা ভিজ্যুয়ালাইজেশন অ্যাপ তৈরি করতে পারেন যা Google Maps Datasets API ব্যবহার করে যেকোনও ডিভাইসে পারফর্ম করে।

পরবর্তী অ্যাকশন

আরও পড়ুন:

অবদানকারী

প্রধান লেখক:

  • Ryan Baumann, Google Maps Platform Solutions Engineering Manager