2 votos

¿Hay alguna forma de acceder a los "datos" desde la función cartodb.createLayer?

¿Puedo acceder a la parte de datos de las consultas SQL utilizadas en la función cartodb.createLayer sin utilizar manejadores de eventos especiales?

Estoy haciendo un mapa coropleto y categorizando los datos con las rupturas naturales de Jenks. Por lo tanto, para determinar los saltos necesarios para establecer los valores correctos en CartoCSS, necesito acceder a todos los valores de los datos, ejecutar el proceso Jenks y establecer el CartoCSS adecuado. Actualmente lo hago mediante una consulta SQL independiente antes de ejecutar createLayer:

var sql = new cartodb.SQL({ user: 'user' });
var sqlQuery = "SELECT * FROM table;"
sql.execute(sqlQuery)

Esto funciona bien, pero preferiría no ejecutar la consulta SQL independiente, si de alguna manera puedo extraer esa información de la función createLayer.

Configuré la fuente de la capa con cuatro subcapas:

var layerSource = {
  user_name: 'user',
  type: 'cartodb',
  sublayers: [
    {
      sql: q1,
      interactivity: 'cartodb_id',
      cartocss: s1
    },
    {
      sql: q2,
      interactivity: 'cartodb_id',
      cartocss: s2
    },
    {

      sql: q3,
      interactivity: 'cartodb_id',
      cartocss: s3
    },
    {

      sql: q4,
      interactivity: 'cartodb_id',
      cartocss: s4
    }
  ]
}

Luego creo las capas:

cartodb.createLayer(map, layerSource, {cartodb_logo: false})
.addTo(map)
.done(function(layer) {
  for (var i = 0; i < layer.getSubLayerCount(); i++) {
    subLayers[i] = layer.getSubLayer(i);
  }

etc...

No conozco ninguna forma de extraer los valores de los atributos de las cuatro consultas SQL que se realizan para crear la capa, ni de la capa devuelta ni de ninguno de los elementos de las subcapas.

Puedo acceder a los "datos" desde un controlador de eventos featureOver o featureClick en una subcapa, por ejemplo.

 subLayer[0].on('featureOver', function(e,pos,latlng,data){
    $('.leaflet-container').css('cursor','pointer');
    if (data.cartodb_id != highlight.cartodb_id) {
        highlightArea(data);
 }

pero necesito los datos antes de eso - para configurar CartoCSS y crear una leyenda adecuada.

¿Alguna idea?

3voto

MEMark Puntos 173

El archivo vizjson que define la capa no contiene los datos que necesitas. Echa un vistazo a la respuesta de la petición lanzada por createLayer, que tiene el siguiente aspecto http://documentation.cartodb.com/api/v2/viz/2b13c956-e7c1-11e2-806b-5404a6a683d5/viz.json?callback=vizjson (demasiado largo para pegarlo aquí).

Maps API se centra en la presentación y SQL API se centra en los datos, por lo que solicitarlo con SQL API es definitivamente el camino a seguir.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X