مدیریت رویدادهای کلیک

پلاتفرم را انتخاب کنید: Android iOS JavaScript

ویژگی‌های داده را طوری تنظیم کنید که به رویدادهای click پاسخ دهند و از آن‌ها برای تغییر ظاهر ویژگی براساس تعامل کاربر استفاده کنید.

نماگرفتی که داده‌های چندضلعی سبک‌دار را نشان می‌دهد.

نوشتن گرداننده رویداد کلیک

وقتی رویداد کلیک در لایه عارضه رخ می‌دهد، «کیت توسعه نرم‌افزار Google Maps برای Android» شیء FeatureClickEvent را به گرداننده رویداد ارسال می‌کند.

از روش FeatureClickEvent.getFeatures() برای دریافت فهرست ویژگی‌های تحت‌تأثیر کلیک استفاده کنید.

مدیریت رویدادهای لایه عارضه

برای مدیریت رویدادها در لایه «مجموعه‌داده‌ها»، مراحل زیر را دنبال کنید. در این مثال، رنگ آبی را برای پر کردن و حاشیه چندضلعی‌ای که نشان‌دهنده عارضه انتخاب‌شده است اعمال می‌کنید.

وقتی FeatureLayer.setFeatureStyle() را فراخوانی می‌کنید، تابع کارخانه سبک، سبک عارضه را روی همه عارضه‌های مجموعه داده تنظیم می‌کند. برای به‌روزرسانی سبک مجموعه داده در گرداننده رویداد، باید FeatureLayer.setFeatureStyle() را فراخوانی کنید تا سبک به‌روزشده را در همه عارضه‌های مجموعه داده تنظیم کنید.

  1. اگر قبلاً این کار را نکرده‌اید، مراحل شروع به کار را برای ایجاد شناسه نقشه و سبک نقشه جدید دنبال کنید. حتماً لایه عارضه مجموعه داده‌ها را فعال کنید.

  2. مطمئن شوید که کلاس شما FeatureLayer.OnFeatureClickListener را پیاده‌سازی می‌کند.

  3. با فراخوانی FeatureLayer.addOnFeatureClickListener()، یک کنترل‌کننده رویداد برای رویدادهای کلیک روی ویژگی ثبت کنید.

    Kotlin

    private var datasetLayer: FeatureLayer? = null
    // The globalid of the clicked dataset feature.
    var lastGlobalId: String? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
    // Register the click event handler for the Datasets layer. datasetLayer?.addOnFeatureClickListener(this)
    // Apply default style to all features on load to enable clicking. styleDatasetsLayer() }
    // Define the click event handler to set lastGlobalId to globalid of selected feature. override fun onFeatureClick(event: FeatureClickEvent) { // Get the dataset feature affected by the click. val clickFeatures: MutableList<Feature> = event.features lastGlobalId = null if (clickFeatures.get(0) is DatasetFeature) { lastGlobalId = ((clickFeatures.get(0) as DatasetFeature).getDatasetAttributes().get("globalid")) // Remember to reset the Style Factory. styleDatasetsLayer() } }

    جاوا

    private FeatureLayer datasetLayer;
    // The globalid of the clicked dataset feature.
    String lastgobalid = null;
    @Override public void onMapReady(GoogleMap map) {
    // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
    // Register the click event handler for the Datasets layer. datasetLayer.addOnFeatureClickListener(this);
    // Apply default style to all features on load to enable clicking. styleDatasetsLayer(); }
    @Override // Define the click event handler. public void onFeatureClick(FeatureClickEvent event) { // Get the dataset feature affected by the click. List<Feature> clickFeatures = event.getFeatures(); lastgobalid = null; if (clickFeatures.get(0) instanceof DatasetFeature) { lastgobalid = ((DatasetFeature) clickFeatures.get(0)).getDatasetAttributes().get("globalid"); // Remember to reset the Style Factory. styleDatasetsLayer(); } }

  4. رنگ پرکننده آبی را برای عارضه انتخاب‌شده و رنگ سبز را برای همه عارضه‌های دیگر اعمال کنید. فقط ویژگی‌های قابل‌مشاهده قابل‌کلیک هستند.

    Kotlin

    // Set fill and border for all features.
    private fun styleDatasetsLayer() {
        // Create the style factory function.
        val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
    // Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) { val globalIDs: MutableMap<String, String> = feature.getDatasetAttributes() // Determine globalid attribute. val globalID = globalIDs!!["globalid"] // Set default colors to to green. var fillColor = 0x800000ff var strokeColor = 0xff0000ff if (globalID == lastGlobalId) { // Color selected area blue. fillColor = 0x8000ff00 strokeColor = 0xff00ff00 } return@StyleFactory FeatureStyle.Builder() .fillColor(fillColor) .strokeColor(strokeColor) .build() } return@StyleFactory null }
    // Apply the style factory function to the dataset feature layer. datasetLayer?.setFeatureStyle(styleFactory) }

    جاوا

    // Set default green fill and border for all features.
    private void styleDatasetsLayer() {
      // Create the style factory function.
      FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
    // Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
    // Check if "globalid" attribute of feature is the "globalid" of clicked feature. Map<String, String> globalIDs = ((DatasetFeature) feature).getDatasetAttributes(); String globalID = globalIDs.get("globalid"); // Set default colors to green. int fillColor = 0x4000ff00; int strokeColor = 0xff00ff00; if (Objects.equals(globalID, lastgobalid)) { // Color selected area blue. fillColor = 0x400000ff; strokeColor = 0xff0000ff; } return new FeatureStyle.Builder() .fillColor(fillColor) .strokeColor(strokeColor) .strokeWidth(2) .build(); } return null; };
    // Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }