create query feature layer

339
11
3 weeks ago
emreaktas1
New Contributor II

Hello  create query feature layer
I run a query by creating a query feature layer.
But it returns a single value.
My codes are as follows.
How can I fetch all data with the same values ​​using forEach?

 

 // Query feature layer
          function queryFeaturesLayer () {
            let featureName = document.getElementById("searchInput").value;  
          // create query feature layer
          let query = layer.createQuery()
 
 
// define the parameters for the query
          //   query.forEach(function(query){
          //   query.where=`adi_soyadi= '${featureName}'`;
          //   query.outFields=['*'];// sorgulanacak katman alanı
          //   query.returnGeometry=true;
          // });
 
 
 
 
 query.where=`adi_soyadi= '${featureName}'`;
          query.outFields=['*'];
          query.returnGeometry=true;
          //excute the query
          layer.queryFeatures(query).then((result) => {
            console.log(result)

 

 

0 Kudos
11 Replies
JoelBennett
MVP Regular Contributor

This might be what you're trying to do:

let featureName = document.getElementById("searchInput").value;  

let query = layer.createQuery();
query.where = "adi_soyadi = '" + featureName + "'";
query.outFields = ["*"];
query.returnGeometry = true;

layer.queryFeatures(query).then(function(featureSet) {
	featureSet.features.forEach(function(feature) {
		//do something
	});
});
0 Kudos
emreaktas1
New Contributor II

How can I return the query result?
I want to show the values coming with foreach

0 Kudos
JoelBennett
MVP Regular Contributor

You access the values via the attributes property.  For example:

let featureName = document.getElementById("searchInput").value;  

let query = layer.createQuery();
query.where = "adi_soyadi = '" + featureName + "'";
query.outFields = ["*"];
query.returnGeometry = true;

layer.queryFeatures(query).then(function(featureSet) {
	featureSet.features.forEach(function(feature, index) {
		var fieldNames = Object.keys(feature.attributes);

		fieldNames.forEach(function(fieldName) {
			console.info("Result " + index.toString() + ": " + fieldName + " = " + feature.attributes[fieldName]);
		});
	});
});

 

0 Kudos
emreaktas1
New Contributor II

I got the query result I wanted from the layer and used the returned values as I wanted.
I want to run the same query in 2 different layers. and I want to show the results on the map
For my code to run, the button is clicked and the data I want to query for the second query appears.
The query operation is expected to occur, but it does not happen.

emreaktas1_0-1715676146735.png

 

0 Kudos
JoelBennett
MVP Regular Contributor

Can you show the code that executes when the button is clicked?  I assume it is the parkResultClickHandler function.

0 Kudos
emreaktas1
New Contributor II
   const attributesss = result.attributes;
            const itemmm=document.createElement("calcite-pick-list-item");
            itemmm.setAttribute("label", attributesss.adi_soyadi);
            //itemm.setAttribute("value" , index);
            const malilk= ` Ada/Parsel: ${attributesss.adaparsel }`;
                const descriptionn = malilk ;
                itemmm.setAttribute("description", descriptionn);
                itemmm.addEventListener("click", parkResultClickHandler);                  
                document.getElementById("results2").appendChild(itemmm);
         
       
  

    function parkResultClickHandler(event) {
      const target = event.target;
      const resultId = target.getAttribute("value");

     

      if (result) {
        view
          .goTo(result.geometry.extent.expand(3))
          .then(() => {
            view.openPopup({
              features: [result],
              location: result.geometry.centroid
            });
          })
          .catch((error) => {
            if (error.name != "İptal Hatası , AbortError ") {
              console.error(error);
            }
          });
      }
    }

});    
});    
0 Kudos
emreaktas1
New Contributor II

The park Result Click Handler function allows me to bring the values returned in the query closer to the value I clicked on the list and to open a pop-up window.

0 Kudos
JoelBennett
MVP Regular Contributor

Ok, it looks like I asked for the wrong thing.  You said you're trying to query two layers, but only seeing results for one.  Can you show the code for where you're querying the two layers?  I only see code where one layer is being queried.

0 Kudos
emreaktas1
New Contributor II

merhaba@JoelBennett ;

emreaktas1_0-1716202265911.png

I query in two layers.
How can I show the searched values ​​when entering search data (name/surname), for example "NAil"?

// HTML Kodu

emreaktas1_1-1716202567608.png

 

 

//JS code

// sorgulama
      // kullanıcı butana tıkladığı zaman sorgu calısır ve sorguyu temizler
      const queryBtn = belge . getElementById ( "queryBtn" ). addEventListener ( "tıklayın" , queryFeaturesLayer );  
       const clearBtn = belge . getElementById ( "queryBtnclear" )
       //sorgu temizleme fonksiyonu
       clearBtn . addEventListener ( "tıklayın" , clearqueryFeaturesLayer )
       function clearqueryFeaturesLayer (){
        belge . getElementById ( "sonuçlarHeading" ). innerHTML = `Sorgu temizlendi` ;  
        belge . getElementById ( "sonuçlar" ). içHTML = "" ;
        belge . getElementById ( "sonuçlar2" ). içHTML = "" ;
        belge . getElementById ( "sonuçlarPanel" ). içHTML = "" ;
        belge . getElementById ( "sonuçlarPanel2" ). içHTML = "" ;
       }
       // sorgu baslatma
        işlev queryFeaturesLayer (){
            belge . getElementById ( "sonuçlarHeading" ). innerHTML = `Parsel Sonuçları` ;
           

        const featureName = belge . getElementById ( "searchInput" ). değer ;  
        if ( featureName != "" ){
            const sorgu = LayerParsel . createQuery ();
            sorgu . nerede = "adi_soyadi = '" + özellikAdı + "'" ;
            sorgu . outFields = [ "*" ];
            sorgu . returnGeometri = doğru ;
            katmanParsel . sorguÖzellikleri ( sorgu ). sonra ( function ( featureSet ) {
              özellik seti . özellikler . forEach ( işlev ( sonuç ) {
               
              // grafik Parsel
                    const graphParsel = yeni Grafik ({
                      geometri : sonuç . geometri ,
                       açılan şablon : {
                        title : "Grafik Sonuçları: {label}" ,
                        içerik : [{                          
                            şunu yazın : "alanlar" ,
                            alanBilgileri : [{                            
                                alanAdı : "içerik" ,
                                label : "Ada / Parsel No: " ,
                                // biçim: {
                                // yerler: 0,
                                // rakam Ayırıcı: doğru
                                // }
                              },{
                                alanAdı : "parselalan" ,
                                label : "Parsel Alanı_m2: " ,                        
                              },                              
                               {
                                fieldName : "Ödeme" ,
                                etiket : "Ödeme" ,                        
                              }, {
                                alanAdı : "Payda" ,
                                etiket : "Payda" ,                        
                              }, {
                                alanAdı : "PayaDüsenAlan" ,
                                label : "Paya Düşen Alan_m2" ,                        
                              },  
                              {
                                alanAdı : "parsel_e_1" ,
                                label : "Parsel Endeksi" ,                        
                              },    
                                                                                 
                            ]
                          }
                        ]
                      },                  
                      sembol : yeni SimpleFillSymbol ({
                        renk : [ 77 , 85 , 6 , 0,4 ],
                        style: "solid" , // alan içini style verme
                        taslak: {
                          Beyaz renk " ,
                          ile: 2
                        }
                      }),
                      katman :layerParsel ,
                     
                    });    
                    grafikParsel . nitelikler = {
                          "name" : ` ${ featureName } ` ,
                          "etiket" : ` ${ sonuç . Öznitellikler . adi_soyadi___babaadi } ` ,
                          "içerik" : ` ${ sonuç . Öznitellikler . ada_parsel_new } ` ,
                          "parselalan" : ` ${ sonuç . Öznitellikler . parsel_alanı_m2 } ` ,
                          "Öde" : ` ${ sonuç . Öznitellikler . pay_1 } ` ,
                          "Payda" : ` ${ sonuç . Öznitellikler . payda_1 } ` ,
                          "PayaDüsenAlan" : ` ${ result . Öznitellikler . paya_düş_1 } ` ,
                          "parsel_e_1" : ` ${ sonuç . Öznitellikler . parsel_e_1 } ` ,

                         
                    };

                    görüş . grafikler . add ( graphParsel ) // seçilen sorgu sonucunu haritaya ekler    
                   // harita.add(graphicParsel);

                   let grafiklayer = yeni GraphicsLayer ({
                    grafikler : [ grafikParsel ],
                   
                   });
                   harita . ekle ( grafikkater )
  // grafik Parsel oğul
 
                // sonuç.özellikler?.map((özellik) => {                                    
                // });

                      const nitelikleri = sonuç . Öznitellikler ;
                      const itemm = belge . createElement ( "kalsit-seçim-listesi-öğesi" );
                      öğem . setAttribute ( "etiket " , nitelikler.adi_soyadi ) ;
                      //itemm.setAttribute("değer", indeks);
                      const malilk = ` Ada/Parsel: ${ nitelikler . ada_parsel_new } ` ;
                          const açıklaman = malilk ;
                          öğem . setAttribute ( "açıklama" , açıklama );
                          öğem . addEventListener ( "tıklayın" , parkResultClickHandler );
                          belge . getElementById ( "sonuçlar" ). AppendChild ( itemm );
                //YanPanel
                   belge . getElementById ( "yanPanel" ). addEventListener ( "tıklayın" , pnlsorgu );
                   işlev pnlsorgu (){
                          belge . getElementById ( "sonuçlarPanel" ). AppendChild ( itemm );  
                          belge . getElementById ( "resultsHeadingPanel" ). innerHTML = "Ayrıştırma Sonuçları" ;              
                   };
                //YanPanel
 
              //console.log("sorgu değeri" ,featureName , result);
 
              function parkResultClickHandler ( olay ) {
                const hedef = olay . hedef ;
                const resultId = hedef . getAttribute ( "değer" );    
                     
                eğer ( sonuç ) {
                  görüş
                    . goTo ( sonuç . geometri . kapsam . genişlet ( 3 ))
                    . sonra (() => {
                      görüş . openPopup ({
                        özellikler : [ grafikParsel ],
                        konum : sonuç . geometri . merkez
                      });
                    })
                    . yakala (( hata ) => {
                      if ( error . name != "İptal Hatası , AbortError " ) {
                        konsol . hata ( hata );
                      }
                    });
                }
              }
 
          });    
      });    
        }
            başka {
                warning ( "Reklam Soyad Alanı Bos Bırakılamaz..!" )
            }    
     
        }; // sorgu baslatma fonksiyonu son

 

0 Kudos