আকার

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস জাভাস্ক্রিপ্ট

একটি নিরেট লাল পলিলাইন সহ মানচিত্র

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

  • Polyline হলো একাধিক সংযুক্ত রেখাংশের একটি ধারা, যা দিয়ে আপনার ইচ্ছামতো যেকোনো আকৃতি তৈরি করা যায় এবং মানচিত্রে পথ ও রাস্তা চিহ্নিত করতে এটি ব্যবহার করা যেতে পারে।
  • Polygon হলো একটি আবদ্ধ আকৃতি যা মানচিত্রে এলাকা চিহ্নিত করতে ব্যবহার করা যায়।
  • Circle হলো মানচিত্রে অঙ্কিত পৃথিবীর পৃষ্ঠের উপর একটি বৃত্তের ভৌগোলিকভাবে নির্ভুল প্রক্ষেপণ।

এই সমস্ত আকারের ক্ষেত্রে, আপনি বিভিন্ন বৈশিষ্ট্য পরিবর্তন করে এদের চেহারা নিজের পছন্দমতো সাজিয়ে নিতে পারেন।

কোড নমুনা

এলাকা এবং পথ বোঝানোর জন্য বহুভুজ ও বহুরেখা যোগ করার টিউটোরিয়ালটিতে একটি সাধারণ অ্যান্ড্রয়েড অ্যাপের জন্য প্রয়োজনীয় সমস্ত কোড অন্তর্ভুক্ত রয়েছে।

এছাড়াও, গিটহাবে থাকা ApiDemos রিপোজিটরিতে এমন কিছু নমুনা রয়েছে যা বিভিন্ন আকার এবং সেগুলোর বৈশিষ্ট্যের ব্যবহার প্রদর্শন করে:

  • CircleDemoActivity ( Java / Kotlin ): Circle
  • PolygonDemoActivity ( Java / Kotlin ): বহুভুজ
  • PolylineDemoActivity ( Java / Kotlin ): পলিলাইন

পলিলাইন

The Polyline class defines a set of connected line segments on the map. A Polyline object consists of a set of LatLng locations, and creates a series of line segments that connect those locations in an ordered sequence.

এই ভিডিওটিতে দেখানো হয়েছে, কীভাবে ম্যাপের উপর পলিলাইন ব্যবহার করে পথ এঁকে আপনার ব্যবহারকারীদের তাদের গন্তব্যে পৌঁছাতে সাহায্য করা যায়।

একটি পলিলাইন তৈরি করতে, প্রথমে একটি PolylineOptions অবজেক্ট তৈরি করুন এবং এতে পয়েন্ট যোগ করুন। পয়েন্টগুলো পৃথিবীর পৃষ্ঠের একটি বিন্দুকে প্রতিনিধিত্ব করে এবং এগুলোকে একটি LatLng অবজেক্ট হিসেবে প্রকাশ করা হয়। PolylineOptions অবজেক্টে পয়েন্টগুলো যে ক্রমে যোগ করা হয়, সেই ক্রমেই তাদের মধ্যে রেখাংশগুলো অঙ্কিত হয়।

একটি PolylineOptions অবজেক্টে পয়েন্ট যোগ করতে, PolylineOptions.add() কল করুন। লক্ষ্য করুন যে এই মেথডটি পরিবর্তনশীল সংখ্যক প্যারামিটার গ্রহণ করে, ফলে আপনি একবারে একাধিক পয়েন্ট যোগ করতে পারেন (পয়েন্টগুলো যদি আগে থেকেই একটি লিস্টে থাকে, তবে আপনি PolylineOptions.addAll(Iterable<LatLng>) কল করতে পারেন)।

এরপর আপনি GoogleMap.addPolyline(PolylineOptions) কল করে পলিলাইনটি একটি ম্যাপে যোগ করতে পারেন। এই মেথডটি একটি Polyline অবজেক্ট রিটার্ন করে, যা দিয়ে আপনি পরবর্তীতে পলিলাইনটি পরিবর্তন করতে পারবেন।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে একটি ম্যাপে আয়তক্ষেত্র যোগ করতে হয়:

কোটলিন

// Instantiates a new Polyline object and adds points to define a rectangle
val polylineOptions = PolylineOptions()
    .add(LatLng(37.35, -122.0))
    .add(LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
    .add(LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
    .add(LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
    .add(LatLng(37.35, -122.0)) // Closes the polyline.

// Get back the mutable Polyline
val polyline = map.addPolyline(polylineOptions)

      

জাভা

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions polylineOptions = new PolylineOptions()
    .add(new LatLng(37.35, -122.0))
    .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
    .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
    .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
    .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = map.addPolyline(polylineOptions);

      

আয়তক্ষেত্রটি মানচিত্রে নিচে দেখানো চিত্রের মতো প্রদর্শিত হয়:

আয়তক্ষেত্রাকার পলিলাইন সহ মানচিত্র

পলিলাইন যোগ করার পরে এর আকৃতি পরিবর্তন করতে, আপনি Polyline.setPoints() কল করে পলিলাইনটির জন্য পয়েন্টের একটি নতুন তালিকা প্রদান করতে পারেন।

ম্যাপে পলিলাইন যোগ করার আগে এবং যোগ করার পরেও আপনি এর চেহারা পরিবর্তন করতে পারেন। আরও বিস্তারিত জানতে নিচের চেহারা পরিবর্তন সংক্রান্ত অংশটি দেখুন।

পলিলাইন কাস্টমাইজেশন

পলিলাইনের চেহারা কাস্টমাইজ করার বিভিন্ন উপায় রয়েছে:

  • বহুরঙা পলিলাইনগুলি পলিলাইন সেগমেন্টগুলিকে বিভিন্ন রঙে সেট করে।
  • গ্রেডিয়েন্ট পলিলাইন দুটি রঙের গ্রেডিয়েন্ট ব্যবহার করে একটি পলিলাইনকে রঙিন করে।
  • স্ট্যাম্পড পলিলাইনস পুনরাবৃত্তিমূলক বিটম্যাপ ব্যবহার করে একটি পলিলাইনকে শৈলী প্রদান করে।

পলিলাইন কাস্টমাইজেশন ব্যবহার করতে হলে, আপনাকে অবশ্যই অ্যান্ড্রয়েডের জন্য ম্যাপস এসডিকে-এর 18.1.0 বা তার পরবর্তী সংস্করণ এবং সর্বশেষ ম্যাপস এসডিকে ফর অ্যান্ড্রয়েড রেন্ডারার ব্যবহার করতে হবে

একটি বহুরঙা পলিলাইন তৈরি করা

বহুরঙা পলিলাইন সহ মানচিত্র

আপনি StyleSpan অবজেক্ট তৈরি করে এবং addSpan() বা addSpans() মেথড ব্যবহার করে সেগুলোকে PolylineOptions এ যোগ করার মাধ্যমে একটি পলিলাইনের সেগমেন্টগুলোকে আলাদাভাবে রঙিন করতে পারেন। ডিফল্টরূপে, অ্যারের প্রতিটি আইটেম সংশ্লিষ্ট লাইন সেগমেন্টের রঙ নির্ধারণ করবে। নিচের উদাহরণটিতে লাল এবং সবুজ সেগমেন্টসহ একটি পলিলাইন তৈরি করার জন্য সেগমেন্টের রঙ নির্ধারণ করা দেখানো হয়েছে:

কোটলিন

val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(StyleSpan(Color.RED))
        .addSpan(StyleSpan(Color.GREEN))
)

      

জাভা

Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(Color.RED))
        .addSpan(new StyleSpan(Color.GREEN)));

      

একটি গ্রেডিয়েন্ট পলিলাইন তৈরি করা

গ্রেডিয়েন্ট পলিলাইন সহ মানচিত্র

স্ট্রোকের শুরু এবং শেষের রঙ নির্দিষ্ট করার জন্য, আপনি দুটি ৩২-বিট আলফা-রেড-গ্রিন-ব্লু (ARGB) পূর্ণসংখ্যা উল্লেখ করে একটি গ্রেডিয়েন্ট তৈরি করতে পারেন। শেপের অপশনস অবজেক্টে PolylineOptions.addSpan() কল করে এই প্রপার্টিটি সেট করুন। নিচের উদাহরণটিতে উডল্যান্ড পার্ক জু থেকে কার্কল্যান্ড, WA পর্যন্ত একটি লাল থেকে হলুদ গ্রেডিয়েন্ট পলিলাইন তৈরি করা দেখানো হয়েছে।

কোটলিন

val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(
            StyleSpan(
                StrokeStyle.gradientBuilder(
                    Color.RED,
                    Color.YELLOW
                ).build()
            )
        )
)

      

জাভা

Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(StrokeStyle.gradientBuilder(Color.RED, Color.YELLOW).build())));

      

একটি স্ট্যাম্পড পলিলাইন তৈরি করা

স্ট্যাম্প করা পলিলাইন সহ মানচিত্র

আপনি একটি পলিলাইনের চেহারাকে একটি রিপিটিং বিটম্যাপ টেক্সচারে সেট করতে পারেন। এটি করার জন্য, TextureStyle নামে একটি StampStyle তৈরি করুন, তারপর এখানে দেখানো অনুযায়ী PolylineOptions.addSpan() কল করে শেপের অপশনস অবজেক্টে এই প্রপার্টিটি সেট করুন:

কোটলিন

val stampStyle =
    TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build()
val span = StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build())
map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(span)
)

      

জাভা

StampStyle stampStyle =
        TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build();
StyleSpan span = new StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build());
map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(span));

      

পলিলাইন ইভেন্ট

ডিফল্টরূপে, পলিলাইনগুলো ক্লিকযোগ্য নয়। আপনি Polyline.setClickable(boolean) কল করে এর ক্লিকযোগ্যতা চালু বা বন্ধ করতে পারেন।

ক্লিকযোগ্য পলিলাইনের ক্লিক ইভেন্ট শোনার জন্য একটি OnPolylineClickListener ব্যবহার করুন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnPolylineClickListener(OnPolylineClickListener) কল করুন। যখন কোনো ব্যবহারকারী একটি পলিলাইনে ক্লিক করেন, তখন আপনি একটি onPolylineClick(Polyline) কলব্যাক পাবেন।

বহুভুজ

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

আপনি একটি Polyline যোগ করার মতোই ম্যাপে একটি Polygon যোগ করতে পারেন। প্রথমে একটি PolygonOptions অবজেক্ট তৈরি করুন এবং এতে কিছু পয়েন্ট যোগ করুন। এই পয়েন্টগুলো পলিগনটির রূপরেখা তৈরি করবে। এরপর GoogleMap.addPolygon(PolygonOptions) কল করে পলিগনটি ম্যাপে যোগ করুন, যা একটি Polygon অবজেক্ট রিটার্ন করবে।

নিম্নলিখিত কোড স্নিপেটটি একটি ম্যাপে একটি আয়তক্ষেত্র যোগ করে।

কোটলিন

// Instantiates a new Polygon object and adds points to define a rectangle
val rectOptions = PolygonOptions()
    .add(
        LatLng(37.35, -122.0),
        LatLng(37.45, -122.0),
        LatLng(37.45, -122.2),
        LatLng(37.35, -122.2),
        LatLng(37.35, -122.0)
    )

// Get back the mutable Polygon
val polygon = map.addPolygon(rectOptions)

      

জাভা

// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions polygonOptions = new PolygonOptions()
    .add(new LatLng(37.35, -122.0),
        new LatLng(37.45, -122.0),
        new LatLng(37.45, -122.2),
        new LatLng(37.35, -122.2),
        new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = map.addPolygon(polygonOptions);

      

বহুভুজটি যোগ করার পরে এর আকৃতি পরিবর্তন করতে, আপনি Polygon.setPoints() কল করতে পারেন এবং বহুভুজটির রূপরেখার জন্য পয়েন্টের একটি নতুন তালিকা প্রদান করতে পারেন।

আপনি ম্যাপে পলিগন যোগ করার আগে এবং যোগ করার পরেও এর চেহারা কাস্টমাইজ করতে পারেন। আরও বিস্তারিত জানতে নিচের চেহারা কাস্টমাইজ করার অংশটি দেখুন।

বহুভুজ স্বয়ংক্রিয়-সম্পূর্ণতা

উপরের উদাহরণে বহুভুজটি পাঁচটি স্থানাঙ্ক নিয়ে গঠিত, কিন্তু লক্ষ্য করুন যে প্রথম এবং শেষ স্থানাঙ্ক একই স্থানে অবস্থিত, যা লুপটিকে সংজ্ঞায়িত করে। তবে বাস্তবে, যেহেতু বহুভুজ একটি আবদ্ধ ক্ষেত্রকে সংজ্ঞায়িত করে, তাই আপনার এই শেষ স্থানাঙ্কটি নির্ধারণ করার প্রয়োজন নেই। যদি শেষ স্থানাঙ্কটি প্রথমটি থেকে ভিন্ন হয়, তাহলে API স্বয়ংক্রিয়ভাবে স্থানাঙ্কের অনুক্রমের শেষে প্রথম স্থানাঙ্কটি যুক্ত করে বহুভুজটিকে "বন্ধ" করে দেবে।

নিচের দুটি বহুভুজ সমতুল্য, এবং এদের প্রত্যেকটির জন্য polygon.getPoints() কল করলে চারটি বিন্দুই ফেরত আসবে।

কোটলিন

val polygon1 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(0.0, 0.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)
val polygon2 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)

      

জাভা

Polygon polygon1 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(0, 0))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

Polygon polygon2 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

      

একটি ফাঁপা বহুভুজ তৈরি করুন

একটিমাত্র Polygon অবজেক্টে একাধিক পাথ একত্রিত করে জটিল আকৃতি তৈরি করা যায়, যেমন ভরাট করা বলয় বা "ডোনাট" (যেখানে বহুভুজাকার এলাকাগুলো পলিগনের ভেতরে "দ্বীপ" হিসেবে দেখা যায়)। জটিল আকৃতিগুলো সর্বদা একাধিক সরল পাথের সমন্বয়ে গঠিত হয়।

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

নিচের কোডটি একটি একক আয়তক্ষেত্র তৈরি করবে, যার মধ্যে একটি ছোট আয়তাকার ছিদ্র থাকবে।

কোটলিন

val hole = listOf(
    LatLng(1.0, 1.0),
    LatLng(1.0, 2.0),
    LatLng(2.0, 2.0),
    LatLng(2.0, 1.0),
    LatLng(1.0, 1.0)
)
val hollowPolygon = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(3.0, 0.0),
            LatLng(0.0, 0.0)
        )
        .addHole(hole)
        .fillColor(Color.BLUE)
)

      

জাভা

List<LatLng> hole = Arrays.asList(new LatLng(1, 1),
    new LatLng(1, 2),
    new LatLng(2, 2),
    new LatLng(2, 1),
    new LatLng(1, 1));
Polygon hollowPolygon = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(3, 0),
        new LatLng(0, 0))
    .addHole(hole)
    .fillColor(Color.BLUE));

      

ফাঁপা বহুভুজটি মানচিত্রে নিচে দেখানো ছবির মতো দেখা যায়:

ফাঁপা আয়তক্ষেত্রাকার পলিলাইন সহ মানচিত্র

বহুভুজ ইভেন্টগুলি

ডিফল্টরূপে, বহুভুজ ক্লিকযোগ্য নয়। আপনি Polygon.setClickable(boolean) কল করে এর ক্লিকযোগ্যতা সক্রিয় বা নিষ্ক্রিয় করতে পারেন।

ক্লিকযোগ্য বহুভুজের ক্লিক ইভেন্ট শোনার জন্য একটি OnPolygonClickListener ব্যবহার করুন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnPolygonClickListener(OnPolygonClickListener) কল করুন। যখন কোনো ব্যবহারকারী একটি বহুভুজে ক্লিক করেন, তখন আপনি একটি onPolygonClick(Polygon) কলব্যাক পাবেন।

চেনাশোনা

বৃত্ত সহ মানচিত্র

In addition to a generic Polygon class, the Maps API also includes specific classes for Circle objects, to simplify their construction.

একটি বৃত্ত আঁকতে হলে, আপনাকে নিম্নলিখিত দুটি বৈশিষ্ট্য নির্দিষ্ট করতে হবে:

  • LatLng হিসেবে center
  • radius মিটারে।

একটি বৃত্তকে পৃথিবীর পৃষ্ঠের সেই সমস্ত বিন্দুর সেট হিসাবে সংজ্ঞায়িত করা হয়, যেগুলি প্রদত্ত center থেকে radius মিটার দূরে অবস্থিত। Maps API দ্বারা ব্যবহৃত মারকেটর প্রজেকশন যেভাবে একটি সমতল পৃষ্ঠে গোলক রেন্ডার করে, তার কারণে নিরক্ষরেখার কাছাকাছি অবস্থিত হলে এটি মানচিত্রে প্রায় একটি নিখুঁত বৃত্ত হিসাবে প্রদর্শিত হবে এবং বৃত্তটি নিরক্ষরেখা থেকে যত দূরে সরে যাবে, তত এটিকে (পর্দায়) ক্রমশ অ-বৃত্তাকার দেখাবে।

বৃত্তটি যোগ করার পরে এর আকৃতি পরিবর্তন করতে, আপনি Circle.setRadius() বা Circle.setCenter() কল করে নতুন মান প্রদান করতে পারেন।

মানচিত্রে বৃত্তটি যুক্ত করার আগে এবং যুক্ত করার পরেও আপনি এর চেহারা পরিবর্তন করতে পারেন। আরও বিস্তারিত জানতে নিচের চেহারা পরিবর্তন সংক্রান্ত অংশটি দেখুন।

নিম্নলিখিত কোড স্নিপেটটি একটি CircleOptions অবজেক্ট তৈরি করে এবং GoogleMap.addCircle(CircleOptions) কল করার মাধ্যমে ম্যাপে একটি বৃত্ত যোগ করে:

কোটলিন

// Instantiates a new CircleOptions object and defines the center and radius
val circleOptions = CircleOptions()
    .center(LatLng(37.4, -122.1))
    .radius(1000.0) // In meters

// Get back the mutable Circle
val circle = map.addCircle(circleOptions)

      

জাভা

// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000); // In meters

// Get back the mutable Circle
Circle circle = map.addCircle(circleOptions);

      

সার্কেল ইভেন্টগুলি

ডিফল্টরূপে, বৃত্তগুলো ক্লিকযোগ্য নয়। আপনি GoogleMap.addCircle() ফাংশনের সাথে CircleOptions.clickable(boolean) অথবা Circle.setClickable(boolean) কল করে এর ক্লিকযোগ্যতা চালু বা বন্ধ করতে পারেন।

ক্লিকযোগ্য বৃত্তের ক্লিক ইভেন্ট শোনার জন্য একটি OnCircleClickListener ব্যবহার করুন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnCircleClickListener(OnCircleClickListener) কল করুন।

যখন কোনো ব্যবহারকারী একটি বৃত্তে ক্লিক করবেন, তখন আপনি একটি onCircleClick(Circle) কলব্যাক পাবেন, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

কোটলিন

val circle = map.addCircle(
    CircleOptions()
        .center(LatLng(37.4, -122.1))
        .radius(1000.0)
        .strokeWidth(10f)
        .strokeColor(Color.GREEN)
        .fillColor(Color.argb(128, 255, 0, 0))
        .clickable(true)
)
map.setOnCircleClickListener {
    // Flip the r, g and b components of the circle's stroke color.
    val strokeColor = it.strokeColor xor 0x00ffffff
    it.strokeColor = strokeColor
}

      

জাভা

Circle circle = map.addCircle(new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)
    .strokeWidth(10)
    .strokeColor(Color.GREEN)
    .fillColor(Color.argb(128, 255, 0, 0))
    .clickable(true));

map.setOnCircleClickListener(new GoogleMap.OnCircleClickListener() {
    @Override
    public void onCircleClick(Circle circle) {
        // Flip the r, g and b components of the circle's stroke color.
        int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
        circle.setStrokeColor(strokeColor);
    }
});

      

চেহারা কাস্টমাইজ করা

আপনি ম্যাপে কোনো শেপ যোগ করার আগে (অপশনস অবজেক্টে কাঙ্ক্ষিত প্রপার্টি উল্লেখ করে) অথবা পরে, উভয় সময়েই সেটির চেহারা পরিবর্তন করতে পারেন। সমস্ত প্রপার্টির জন্য গেটারও রয়েছে, যাতে আপনি সহজেই শেপটির বর্তমান অবস্থা জানতে পারেন।

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

কোটলিন

val polyline = map.addPolyline(
    PolylineOptions()
        .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
        .width(25f)
        .color(Color.BLUE)
        .geodesic(true)
)

      

জাভা

Polyline polyline = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

      

মানচিত্রটি নিচে দেখানো হলো:

মেলবোর্ন থেকে পার্থ পর্যন্ত একটি পলিলাইন সহ মানচিত্র

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

স্ট্রোকের রঙ

স্ট্রোক কালার হলো একটি ৩২-বিট আলফা-রেড-গ্রিন-ব্লু (ARGB) পূর্ণসংখ্যা, যা শেপটির স্ট্রোকের অস্বচ্ছতা এবং রঙ নির্দিষ্ট করে। শেপটির অপশনস অবজেক্টে *Options.strokeColor() (অথবা পলিলাইনের ক্ষেত্রে PolylineOptions.color() কল করে এই প্রপার্টিটি সেট করুন। যদি নির্দিষ্ট করা না থাকে, তাহলে ডিফল্ট স্ট্রোক কালার কালো ( Color.BLACK ) হয়।

ম্যাপে আকৃতিটি যুক্ত করার পরে, getStrokeColor() (অথবা পলিলাইনের জন্য getColor() ) কল করে স্ট্রোকের রঙ পাওয়া যেতে পারে এবং setStrokeColor() (অথবা setColor() for a polyline ) কল করে তা পরিবর্তন করা যেতে পারে।

রঙ পূরণ করুন

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

ফিল কালার হলো একটি ৩২-বিট আলফা-রেড-গ্রিন-ব্লু (ARGB) পূর্ণসংখ্যা, যা শেপটির ভেতরের অংশের অস্বচ্ছতা এবং রঙ নির্দিষ্ট করে। শেপটির অপশনস অবজেক্টে *Options.fillColor() কল করে এই প্রপার্টিটি সেট করুন। যদি এটি নির্দিষ্ট করা না থাকে, তবে ডিফল্ট স্ট্রোক কালার স্বচ্ছ ( Color.TRANSPARENT ) হয়।

ম্যাপে আকৃতিটি যুক্ত করার পর, getFillColor() কল করে ফিল কালারটি পাওয়া যায় এবং setFillColor() কল করে তা পরিবর্তন করা যায়।

স্ট্রোকের প্রস্থ

লাইন স্ট্রোকের প্রস্থ, যা পিক্সেল (px) এককে একটি ফ্লোট সংখ্যা। ম্যাপ জুম করা হলে এই প্রস্থ পরিবর্তিত হয় না (অর্থাৎ, একটি শেপের স্ট্রোকের প্রস্থ সব জুম লেভেলে একই থাকবে)। শেপের অপশন অবজেক্টে *Options.strokeWidth() (অথবা পলিলাইনের জন্য PolylineOptions.width() ) কল করে এই প্রপার্টিটি সেট করুন। নির্দিষ্ট করা না থাকলে, ডিফল্ট স্ট্রোকের প্রস্থ হয় ১০ পিক্সেল।

ম্যাপে আকৃতিটি যুক্ত করার পরে, getStrokeWidth() (অথবা পলিলাইনের জন্য getWidth() ) কল করে স্ট্রোকের প্রস্থ জানা যায় এবং setStrokeWidth() (অথবা setWidth() for a polyline ) কল করে তা পরিবর্তন করা যায়।

স্ট্রোক প্যাটার্ন

পলিলাইন এবং বহুভুজ ও বৃত্তের রূপরেখার জন্য ডিফল্ট স্ট্রোক প্যাটার্ন হলো একটি নিরেট রেখা। আপনি PatternItem অবজেক্টের একটি কাস্টম স্ট্রোক প্যাটার্ন নির্দিষ্ট করতে পারেন, যেখানে প্রতিটি আইটেম হলো একটি ড্যাশ, একটি ডট বা একটি ফাঁকা স্থান।

নিম্নলিখিত নমুনাটি একটি পলিলাইনের প্যাটার্নকে একটি পুনরাবৃত্ত অনুক্রমে সেট করে, যেখানে একটি বিন্দুর পর ২০ পিক্সেল দৈর্ঘ্যের একটি ফাঁক, ৩০ পিক্সেল দৈর্ঘ্যের একটি ড্যাশ এবং আরও একটি ২০-পিক্সেলের ফাঁক থাকে।

কোটলিন

val pattern = listOf(
    Dot(), Gap(20F), Dash(30F), Gap(20F)
)
polyline.pattern = pattern

      

জাভা

List<PatternItem> pattern = Arrays.asList(
    new Dot(), new Gap(20), new Dash(30), new Gap(20));
polyline.setPattern(pattern);

      

আকৃতিটির জন্য নির্দিষ্ট করা প্রথম শীর্ষবিন্দুতে প্রথম প্যাটার্ন আইটেমটি থেকে শুরু করে, প্যাটার্নটি রেখা বরাবর পুনরাবৃত্তি হয়।

জয়েন্টের প্রকারভেদ

পলিলাইন এবং পলিগনের আউটলাইনের জন্য, আপনি ডিফল্ট ফিক্সড মাইটার জয়েন্ট টাইপের পরিবর্তে একটি বেভেল বা রাউন্ড JointType নির্দিষ্ট করতে পারেন।

নিম্নলিখিত নমুনাটি একটি পলিলাইনে গোলাকার জয়েন্ট টাইপ প্রয়োগ করে:

কোটলিন

polyline.jointType = JointType.ROUND

      

জাভা

polyline.setJointType(JointType.ROUND);

      

জয়েন্ট টাইপ লাইনের অভ্যন্তরীণ বাঁকগুলোকে প্রভাবিত করে। যদি লাইনের স্ট্রোক প্যাটার্নে ড্যাশ থাকে, তবে কোনো ড্যাশ জয়েন্টের দুই পাশ জুড়ে থাকলেও জয়েন্ট টাইপটি প্রযোজ্য হয়। জয়েন্ট টাইপ ডটকে প্রভাবিত করে না, কারণ সেগুলো সর্বদা বৃত্তাকার হয়।

লাইন ক্যাপ

আপনি একটি পলিলাইনের প্রতিটি প্রান্তের জন্য একটি Cap স্টাইল নির্দিষ্ট করতে পারেন। বিকল্পগুলো হলো বাট (ডিফল্ট), স্কয়ার, রাউন্ড, অথবা একটি কাস্টম বিটম্যাপ। PolylineOptions.startCap এবং PolylineOptions.endCap এ স্টাইলটি সেট করুন, অথবা উপযুক্ত গেটার এবং সেটার মেথডগুলো ব্যবহার করুন।

নিম্নলিখিত কোড স্নিপেটটি একটি পলিলাইনের শুরুতে একটি গোলাকার ক্যাপ নির্দিষ্ট করে।

কোটলিন

polyline.startCap = RoundCap()

      

জাভা

polyline.setStartCap(new RoundCap());

      

নিম্নলিখিত কোড স্নিপেটটি এন্ড ক্যাপের জন্য একটি কাস্টম বিটম্যাপ নির্দিষ্ট করে:

কোটলিন

polyline.endCap = CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16F)

      

জাভা

polyline.setEndCap(
    new CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16));

      

যখন আপনি একটি কাস্টম বিটম্যাপ ব্যবহার করেন, তখন আপনাকে পিক্সেলে একটি রেফারেন্স স্ট্রোক প্রস্থ নির্দিষ্ট করতে হবে। এপিআই সেই অনুযায়ী বিটম্যাপটিকে স্কেল করে। রেফারেন্স স্ট্রোক প্রস্থ হলো সেই স্ট্রোক প্রস্থ যা আপনি ক্যাপের জন্য বিটম্যাপ ইমেজটি ডিজাইন করার সময়, ইমেজটির মূল ডাইমেনশনে ব্যবহার করেছিলেন। ডিফল্ট রেফারেন্স স্ট্রোক প্রস্থ হলো ১০ পিক্সেল। ইঙ্গিত: রেফারেন্স স্ট্রোক প্রস্থ নির্ধারণ করতে, একটি ইমেজ এডিটরে আপনার বিটম্যাপ ইমেজটি ১০০% জুমে খুলুন এবং ইমেজটির সাপেক্ষে লাইন স্ট্রোকের কাঙ্ক্ষিত প্রস্থটি প্লট করুন।

যদি আপনি বিটম্যাপ তৈরি করতে BitmapDescriptorFactory.fromResource() ব্যবহার করেন, তাহলে নিশ্চিত করুন যে আপনি একটি ডেনসিটি-ইন্ডিপেন্ডেন্ট রিসোর্স ( nodpi ) ব্যবহার করছেন।

ভূ-জ্যামিতিক খণ্ড

জিওডেসিক সেটিং শুধুমাত্র পলিলাইন এবং পলিগনের ক্ষেত্রে প্রযোজ্য। এটি বৃত্তের ক্ষেত্রে প্রযোজ্য নয়, কারণ বৃত্তকে একাধিক রেখাংশের সমষ্টি হিসেবে সংজ্ঞায়িত করা হয় না।

জিওডেসিক সেটিং নির্ধারণ করে যে একটি পলিলাইন/পলিগনের পরপর শীর্ষবিন্দুগুলোর মধ্যবর্তী রেখাংশগুলো কীভাবে আঁকা হবে। জিওডেসিক রেখাংশ হলো সেগুলো যা পৃথিবীর পৃষ্ঠ (একটি গোলক) বরাবর সবচেয়ে ছোট পথ অনুসরণ করে এবং মারকেটর প্রজেকশনযুক্ত মানচিত্রে প্রায়শই বক্ররেখা হিসাবে দেখা যায়। নন-জিওডেসিক রেখাংশগুলো মানচিত্রে সরলরেখা হিসাবে আঁকা হয়।

শেপের অপশন অবজেক্টে এই প্রপার্টিটি সেট করতে *Options.geodesic() কল করুন, যেখানে true নির্দেশ করে সেগমেন্টগুলো জিওডেসিক হিসেবে এবং false নির্দেশ করে সেগমেন্টগুলো সরলরেখা হিসেবে আঁকা হবে। যদি নির্দিষ্ট না করা হয়, তবে ডিফল্ট হলো নন-জিওডেসিক সেগমেন্ট ( false )।

মানচিত্রে আকৃতিটি যুক্ত করার পরে, isGeodesic() কল করে জিওডেসিক সেটিং অ্যাক্সেস করা যেতে পারে এবং setGeodesic() কল করে তা পরিবর্তন করা যেতে পারে।

জেড-সূচক

z-সূচকটি মানচিত্রে থাকা অন্যান্য ওভারলেগুলির (অন্যান্য আকৃতি, ভূমি ওভারলে এবং টাইল ওভারলে) সাপেক্ষে এই আকৃতিটির বিন্যাস ক্রম নির্দিষ্ট করে। উচ্চ z-সূচকযুক্ত একটি ওভারলে নিম্ন z-সূচকযুক্ত ওভারলেগুলির উপরে অঙ্কিত হয়। একই z-সূচকযুক্ত দুটি ওভারলে যেকোনো ক্রমে অঙ্কিত হয়।

মনে রাখবেন যে, অন্যান্য ওভারলেগুলির z-index নির্বিশেষে, মার্কারগুলি সর্বদা সেগুলির উপরে আঁকা হয়।

শেপের অপশনস অবজেক্টে *Options.zIndex() কল করে এই প্রপার্টিটি সেট করুন। অনির্দিষ্ট থাকলে, ডিফল্ট z-index হয় 0 শেপটি ম্যাপে যুক্ত করার পর, getZIndex() কল করে z-index অ্যাক্সেস করা যায় এবং setZIndex() কল করে এটি পরিবর্তন করা যায়।

দৃশ্যমানতা

ভিজিবিলিটি নির্দিষ্ট করে যে আকৃতিটি মানচিত্রে আঁকা হবে কি না, যেখানে true মানে এটি আঁকা হবে এবং false মানে এটি আঁকা হবে না। এটি আপনাকে সাময়িকভাবে মানচিত্রে একটি আকৃতি প্রদর্শন না করার সুযোগ দেয়। মানচিত্র থেকে আকৃতিটি স্থায়ীভাবে মুছে ফেলতে, সেই আকৃতিটির উপর remove() কল করুন।

*Options.visible() কল করে শেপের অপশনস অবজেক্টে এই প্রপার্টিটি সেট করুন। অনির্দিষ্ট থাকলে, ডিফল্ট ভিজিবিলিটি true হয়। শেপটি ম্যাপে যুক্ত হওয়ার পর, isVisible() কল করে ভিজিবিলিটি অ্যাক্সেস করা যায় এবং setVisible() কল করে তা পরিবর্তন করা যায়।

একটি আকৃতির সাথে ডেটা সংযুক্ত করুন

আপনি শেপটির setTag() মেথড ব্যবহার করে একটি পলিলাইন, পলিগন বা সার্কেলের সাথে যেকোনো ডেটা অবজেক্ট সংরক্ষণ করতে পারেন এবং getTag() ব্যবহার করে অবজেক্টটি পুনরুদ্ধার করতে পারেন। উদাহরণস্বরূপ, একটি পলিলাইনের সাথে ডেটা অবজেক্ট সংরক্ষণ করতে Polyline.setTag() কল করুন এবং ডেটা অবজেক্টটি পুনরুদ্ধার করতে Polyline.getTag() কল করুন।

নিচের কোডটি নির্দিষ্ট পলিলাইনের জন্য একটি যথেচ্ছ ট্যাগ ( A ) নির্ধারণ করে:

কোটলিন

val polyline = map.addPolyline(
    PolylineOptions()
        .clickable(true)
        .add(
            LatLng(-35.016, 143.321),
            LatLng(-34.747, 145.592),
            LatLng(-34.364, 147.891),
            LatLng(-33.501, 150.217),
            LatLng(-32.306, 149.248),
            LatLng(-32.491, 147.309)
        )
)
polyline.tag = "A"

      

জাভা

Polyline polyline = map.addPolyline((new PolylineOptions())
    .clickable(true)
    .add(new LatLng(-35.016, 143.321),
        new LatLng(-34.747, 145.592),
        new LatLng(-34.364, 147.891),
        new LatLng(-33.501, 150.217),
        new LatLng(-32.306, 149.248),
        new LatLng(-32.491, 147.309)));

polyline.setTag("A");

      

এমন কিছু পরিস্থিতির উদাহরণ নিচে দেওয়া হলো, যখন শেপ ব্যবহার করে ডেটা সংরক্ষণ ও পুনরুদ্ধার করা উপযোগী হতে পারে:

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