私は CartoDB にかなり慣れていませんが (これは素晴らしいです)、CartoDB.js を使用してカスタム ビジュアライゼーションを構築していますが、私が持っているソリューションは初期ロードが非常に遅く (ロードに約 1 分プラスかかります)、こちらのドキュメントに基づいています。 SQLでCTEを使用した結果だと思います(このマップのGUIで確認しました:http://cdb.io/1hL3pzF、 CTEなしではるかに高速です)。しかし、私は別のアプローチへの言及を見たことがありません - 誰かがこれに対する良い解決策を持っていますか?
クエリにはデフォルト名が割り当てられていると思います (たとえば、cartodb.com GUI では、関連付けられた CartoCSS は、最初に使用したテーブルを使用します...) が、参照はまだ見ていません。
ここに私の作業アプローチのjsfiddleがあります。
HTML
<div id="map"></div>
CSS
#map { position: absolute; top: 5px; left: 3px; height: 400px; width: 600px; }
JS
var map = new L.map('map');
/* this works but is quite slow...
what is result of query called from cartodb?
*/
var cartocss = '#summary_tbl{ polygon-fill: #F1EEF6; polygon-opacity: 0.8; line-color: #FFF; line-width: 0.5; line-opacity: 1;}';
cartocss = cartocss + '#summary_tbl [ methane <= 158.47731712611244] { polygon-fill: #91003F; }';
cartocss = cartocss + '#summary_tbl [ methane <= 135] { polygon-fill: #CE1256; }';
cartocss = cartocss + '#summary_tbl [ methane <= 120.95519348268839] { polygon-fill: #E7298A; }';
cartocss = cartocss + '#summary_tbl [ methane <= 112.3529411764706] { polygon-fill: #DF65B0; }';
cartocss = cartocss + '#summary_tbl [ methane <= 108.42857142857143] { polygon-fill: #C994C7; }';
cartocss = cartocss + '#summary_tbl [ methane <= 104.09859154929578] { polygon-fill: #D4B9DA; }';
cartocss = cartocss + '#summary_tbl [ methane <= 98.36206896551724] { polygon-fill: #F1EEF6; }';
var sql_summ = "WITH summary_tbl AS (SELECT avg(n.methane) as methane, count(n.cartodb_id) record_count, h.the_geom_webmercator ";
sql_summ = sql_summ + "FROM nurve_sample_boston_0828 n JOIN hex_base_v500m h ON ST_Within(n.the_geom, h.the_geom) ";
sql_summ = sql_summ + "GROUP BY h.the_geom_webmercator) SELECT methane, the_geom_webmercator FROM summary_tbl";
var cbd_layer = {
user_name: 'crshunter', // Required
type: 'cartodb', // Required
sublayers: [{
sql: sql_summ,
cartocss: cartocss, // Required
interactivity: "methane"
}]
};
$(document).ready(function () {
map.on('load', function(e){
// grab OSM basemap for context
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
cartodb.createLayer(map, cbd_layer).addTo(map);
});
});
var startPosition = new L.LatLng(42.3601, -71.0589); // Boston, MA
map.setView(startPosition, 12);