Suite

Lier le champ de recherche à la colonne du jeu de données dans Carto ?

Lier le champ de recherche à la colonne du jeu de données dans Carto ?


La zone de recherche dans une carte publiée de CartoDB n'est pas liée à l'ensemble de données qui est affiché dans la carte CartoDB. Comment puis-je lier le champ de recherche à une certaine colonne d'un ensemble de données ?


J'espère que ce lien pourra vous aider. Le code dans le lien peut effectuer la saisie semi-automatique du champ de recherche en fonction d'une certaine colonne de votre table cartodb.

http://bl.ocks.org/javisantana/7932459

var sql = cartodb.SQL({ utilisateur : 'YOUR_CARTODB_ACCOUNT_NAME' }); $(YOUR_INPUT_BOX).autocomplete({ source: function( request, response ) { var s sql.execute("select COLUMN_NAME from TABLE_NAME où COLUMN_NAME ilike '" + request.term + "%'").done(function(data) { response(data.rows.map(function(r) { return {value: r.COLUMN_NAME}; }) ) }) }, minLength: 2 });

Fondamentalement, ce morceau de code aide à compléter automatiquement la zone de saisie en faisant correspondre le texte saisi avec toutes les valeurs de la colonne de votre table cartodb.

sql.execute("sélectionnez COLUMN_NAME de TABLE_NAME où COLUMN_NAME ilike '" + request.term + "%'").done(function(data) { response(data.rows.map(function(r) { return {value: r .NOM DE COLONNE}; })

Ce morceau de code est utilisé pour rechercher votre table cartodb en termes de texte d'entrée.
La méthode de rappel renvoie toutes les valeurs correspondantes. Si vous avez plus d'une valeur correspondante, une liste déroulante vous sera proposée pour afficher tous les résultats.

N'oubliez pas d'inclure ces deux sources.

 

Comme vous le dites, le champ de recherche agit naturellement comme un géocodeur.

Afin de le faire rechercher dans votre table, vous devrez utiliser CartoDB.js et développer un code personnalisé.

Les idées de base sont :

  • Vous devez étendre la fonctionnalité de la zone de recherche ou créer toute autre zone de texte pour fournir cette fonctionnalité

  • Vous devrez créer une requête dans laquelle vos résultats seront recherchés

  • Vous voudriez obtenir les résultats de la requête et centrer la carte dans cette position (map.fitBounds le fera, vérifiez l'exemple ci-dessous)

Laissez-moi vous montrer un exemple ici. C'est un peu différent de ce que vous demandez car j'ai implémenté un sélecteur directement, mais vous pouvez modifier le sélecteur par une zone de texte et en obtenir la valeur pour l'insérer dans la requête. Son code source est le suivant :

          

Utilisez le sélecteur pour choisir le pays dans lequel vous souhaitez centrer la carte :

Et un commentaire spécial en général :

Ce cas d'utilisation reçoit toujours la même question. « Oh, les gens pourront injecter du SQL dans mon application ? »

Les requêtes utiliseront l'API SQL CartoDB, qui est sûre à utiliser et sûre pour l'injection SQL. Bien sûr, si vous avez des données publiques stockées dans votre compte, elles sont accessibles, mais ce n'est pas un bogue, c'est une fonctionnalité appelée API SQL. S'il te plaît, jamais ajoutez votre clé API dans l'une de ces requêtes, car il s'agit d'une fuite de sécurité et toute personne ayant accès à votre fichier Javascript pourra obtenir votre clé API et accéder pour vérifier, modifier ou supprimer vos données. Mais ne vous inquiétez pas, c'est la même chose que si vous partagez votre mot de passe publiquement ! :-)


Voir la vidéo: Champs de recherche