Klickereignisse verarbeiten

Plattform auswählen: Android iOS JavaScript

Sie können Datenelemente auf click-Ereignisse reagieren lassen und sie für folgende Aktionen verwenden: Darstellung einer Funktion je nach Nutzerinteraktion ändern

Screenshot mit Polygondaten mit benutzerdefinierten Stil

Handler für Click-Events schreiben

Wenn ein Click-Event auf einer Elementebene auftritt, übergibt das Maps SDK for Android eine FeatureClickEvent -Objekt an den Ereignis-Handler.

Verwenden Sie die Methode FeatureClickEvent.getFeatures(), um die Liste der Elemente abzurufen. die vom Klick betroffen sind.

Ereignisse auf Feature-Ebene verarbeiten

Führen Sie die folgenden Schritte aus, um Ereignisse auf der Datasets-Ebene zu verarbeiten. In dieser Beispiel: Sie wenden eine blaue Füllung und einen blauen Rahmen auf das Polygon an, das die ausgewähltes Element.

Wenn du anrufst FeatureLayer.setFeatureStyle(), Mit der Stil-Factory-Funktion wird der Feature-Stil für alle Elemente im Dataset. Um den Stil eines Datasets im Event-Handler zu aktualisieren, müssen Sie FeatureLayer.setFeatureStyle() aufrufen, um den aktualisierten Stil für das gesamte Dataset festzulegen Funktionen.

  1. Falls Sie dies noch nicht getan haben, folgen Sie den Schritten in Jetzt starten um eine neue Karten-ID und einen neuen Kartenstil zu erstellen. Achten Sie darauf, dass Datasets aktiviert sind. Element-Ebene.

  2. Stellen Sie sicher, dass Ihre Klasse FeatureLayer.OnFeatureClickListener

  3. Registrieren Sie einen Event-Handler für Funktions-Click-Events durch den Aufruf von 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() } }

    Java

    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. Wenden Sie die Füllfarbe Blau auf das ausgewählte Element und Grün auf alle anderen Elemente an. Funktionen. Nur sichtbare Features sind anklickbar.

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

    Java

    // 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); }