ユーザーがデータ(geojson、topojson、raster、shapefile)をアップロードして表示できるリーフレットマップがあります。レイヤーを追加/削除するためのカスタム コントロール レイヤーを作成するまで、すべてがうまく機能します。NB:// 私のスクリプトにはリーフレット描画プラグインがあり、描画プラグインをサポートするリーフレット バージョンが layerGroup コントロール オプションをサポートしていないのは奇妙です。
そのため、レイヤーの追加と削除を支援する次の関数を作成しました。
function one(event) {
event.preventDefault();
if(m.hasLayer(files[0])) {
this.removeClass('selected');
m.removeLayer(files[0]);
} else {
m.addLayer(files[0]);
this.addClass('selected');
}
}
function two(event) {
event.preventDefault();
if(m.hasLayer(files[1])) {
this.removeClass('selected');
m.removeLayer(files[1]);
} else {
m.addLayer(files[1]);
this.addClass('selected');
}
}
function three(event) {
event.preventDefault();
if(m.hasLayer(files[2])) {
this.removeClass('selected');
m.removeLayer(files[2]);
} else {
m.addLayer(files[2]);
this.addClass('selected');
}
}
次に、データセット ファイルのアップロード時に、次のコード行により、レイヤーを追加/削除するオプションがユーザーに提供されます。
if (file.name.slice(-3) === 'zip') {
count++;
counter.push(count);
if(count == 1) {
func = one;
} else if(count == 2) {
func = two;
} else if(count == 3) {
func = three;
} else if(count == 4) {
func = four;
}
color = colors.getRandom();
var f1 = file.name.split('.');
var f = f1[0];
var ff = f;
if(f.length > 15) {
f = f.slice(0, 14);
f = f + '...';
}
files.push(ff);
var x = document.getElementById('toggle-layers');
var aTag = document.createElement('a');
aTag.setAttribute('href', '#');
aTag.class = 'nav-link';
aTag.onclick = func;
aTag.style.paddingLeft = '20px';
aTag.id = count;
aTag.innerHTML = f;
aTag.style.textDecoration = 'none';
var li = document.createElement('li');
li.class = 'nav-item';
x.appendChild(li);
li.appendChild(aTag);}
生成されたリンクをクリックするまで、すべてが正常に機能します。ただし、レイヤーは切り替えられず、代わりに「Uncaught TypeError: "sme_site" のプロパティ "_leaflet_id" に割り当てられません: オブジェクトではありません」というエラーが表示されます。このようなエラーが表示される理由は何ですか? Google で検索しましたが、このようなエラーの結果はありません。