気象注警報
河川水位
雨量
避難情報
避難所
各地の震度
各地の震度・津波
土砂災害警戒情報
噴火警報・予報
潮位
観測所(震度)
道路規制
土砂災害警戒判定メッシュ情報
土砂災害警戒判定区域
ため池浸水想定区域(まんのう町)
ダム情報
雨雲の動き(ナウキャスト)
台風進路図
河川カメラ
警戒体制
警戒体制
警戒体制
Loading
';
legendHtml += '
';
}
}
legend.innerHTML += '
' + legendHtml + '
';
}
legend.innerHTML += '
';
// 凡例エリアの作成
legendArea = L.control({position: 'bottomright'});
legendArea.onAdd = function(){
return legend;
}
legendArea.addTo(map);
}
// 初期表示レイヤ設定
if(dispLayerKind.length > 0){
// 表示レイヤが既に設定されている場合は表示
changeLayerKind(dispLayerKind);
}else{
var defaultLayer = '1';
if(defaultLayer.length > 0 ){
changeLayerKind(defaultLayer);
}
}
// 表示市町村名が設定されている時は移動
if(dispCityName.length > 0){
changeCoordZoom(dispCityName);
dispCityName = '';
}
// 引数で初期表示レイヤ設定時は表示
var layerKind = getParam('lk');
var layerKindList = null;
if(layerKind != null && layerKind.length > 0){
changeLayerKind(layerKind);
layerKindList = layerKind.split(',');
}
// レイヤコントロール利用フラグチェック
if(!false){
// 初期化終了
initDone = true;
return;
}
// レイヤコントロールの生成
var overlayList = [];
var overlayWorkMap = {};
for(var i = 0 ; i < layerMasterList.length ; i++){
var layerMaster = layerMasterList[i];
// まずは下地を作る
if(layerMaster.ParentID__c == null){
// ルートの場合
overlayMaps = {
label: layerMaster.Name,
selectAllCheckbox: layerMaster.canLayerChange__c,
children: []
};
overlayWorkMap[layerMaster.ID__c] = overlayMaps;
}else if(layerMaster.DispTargetFlag__c){
// レイヤ(リーフ)の場合
if(layerMaster.kakudaiDispTarget__c){
// 発令区域情報を表示する設定であれば、拡大地図画面では発令区域を表示
if (layerMaster.LayerKind__c == LAYER_KIND.HATSUREIKUIKI) {
if (DISPLAY_HATSUREIKUIKI_FLG == 'true') {
var overlay = {
label: '避難情報',
layer: layers[layerMaster.LayerKind__c],
layerFlg: true,
parentId: layerMaster.ParentID__c
}
overlayList.push(overlay);
if (layerKindList != null) {
for(var j = 0 ; j < layerKindList.length ; j++){
if (layerMaster.LayerKind__c == layerKindList[j]) {
dispLayer(layers[layerMaster.LayerKind__c]);
j = layerKindList.lengt;
}
}
}
}
} else if (layerMaster.LayerKind__c == LAYER_KIND.HINANKANKOKU_INFO) {
if (DISPLAY_HATSUREIKUIKI_FLG == 'false') {
var overlay = {
label: layerMaster.Name,
layer: layers[layerMaster.LayerKind__c],
layerFlg: true,
parentId: layerMaster.ParentID__c
}
overlayList.push(overlay);
if (layerKindList != null) {
for(var j = 0 ; j < layerKindList.length ; j++){
if (layerMaster.LayerKind__c == layerKindList[j]) {
dispLayer(layers[layerMaster.LayerKind__c]);
j = layerKindList.lengt;
}
}
}
}
} else {
var overlay = {
label: layerMaster.Name,
layer: layers[layerMaster.LayerKind__c],
layerFlg: true,
parentId: layerMaster.ParentID__c
}
overlayList.push(overlay);
if (layerKindList != null) {
for(var j = 0 ; j < layerKindList.length ; j++){
if (layerMaster.LayerKind__c == layerKindList[j]) {
dispLayer(layers[layerMaster.LayerKind__c]);
j = layerKindList.lengt;
}
}
}
}
}
}else{
// ノードの場合
var overlay = {
label: layerMaster.Name,
selectAllCheckbox: layerMaster.canLayerChange__c,
layer: layers[layerMaster.LayerKind__c],
children: [],
Id: layerMaster.ID__c,
parentId: layerMaster.ParentID__c,
collapsed: true
}
overlayList.push(overlay);
overlayWorkMap[layerMaster.ID__c] = overlay;
}
}
// 次にツリーを形成していく
for(var i = 0 ; i < overlayList.length ; i++){
var overlay = overlayList[i];
var parentlay = overlayWorkMap[overlay.parentId];
if(parentlay != null){
parentlay['children'].push(overlay);
}
}
layerSelectControl = L.control.layers.tree(null, overlayMaps,{position:'topleft',collapsed:true});
L.DomEvent.disableScrollPropagation(layerSelectControl);
layerSelectControl.addTo(map);
// mouseenter,mouseleaveによるレイヤ選択ダイアログのONOFFを抑制
L.DomEvent.off(layerSelectControl.getContainer(),{mouseleave: layerSelectControl.collapse},layerSelectControl);
L.DomEvent.off(layerSelectControl.getContainer(),{mouseenter: layerSelectControl.expand},layerSelectControl);
// ポップアップ表示時にレイヤ選択ダイアログを閉じる
map.on('popupopen',function(e){
layerSelectControl.collapse();
});
// 凡例クリック時にレイヤ選択ダイアログを閉じる
if(legendArea != null){
L.DomEvent.on(legendArea.getContainer(),{click: layerSelectControl.collapse},layerSelectControl);
}
layerSelectControl.expand();
// 初期化終了
initDone = true;
}
/**
* 凡例表示ソート用
*
* @param 比較対象A
* @param 比較対象B
*/
function compareLegendDisp(a,b){
return a.LegendDispOrder__c - b.LegendDispOrder__c;
}
/**
* Salesforceデータ取得
*/
function LoadSalesforceData(layerKind){
// すでに取得している場合は無視
if( layerDataLoaded[layerKind] == true){
return;
}
layerDataLoaded[layerKind] = true;
pleaseWait();
Visualforce.remoting.Manager.invokeAction( 'P_PUB_CL_MapCtrl.GetSalesforceData',layerKind,
function(result,event){
// 結果の確認
if ( !event.status ) {
ajaxOnFailure( 'GetSalesforceData', event.message );
waitOver();
return;
}
if ( !result.status ) {
ajaxOnFailure( 'GetSalesforceData', result.message );
waitOver();
return;
}
// 雨量の取得
if(result.uryoList != null){
suiboUryoList = result.uryoList;
}
if(result.uryoUpdateTime != null){
suiboUryoUpdateTime = result.uryoUpdateTime;
}
// 水位の取得
if(result.suiiList != null){
suiboSuiiList = result.suiiList;
}
if(result.suiiUpdateTime != null){
suiboSuiiUpdateTime = result.suiiUpdateTime;
}
// ダムの取得
if(result.damList != null){
suiboDamList = result.damList;
}
if(result.damUpdateTime != null){
suiboDamUpdateTime = result.damUpdateTime;
}
// 気象注警報の取得
if(result.kishouWarningList != null){
kishouWarningList = result.kishouWarningList;
}
if(result.kishouUpdateTime != null){
kishouUpdateTime = result.kishouUpdateTime;
}
// 避難勧告情報の取得
if(result.hinankankokuList != null){
hinankankokuList = result.hinankankokuList;
}
if(result.hinankankokuUpdateTime != null){
hinankankokuUpdateTime = result.hinankankokuUpdateTime;
}
// 発令区域情報の取得
if (result.hatsureikuikiTopoList != null) {
hatsureikuikiTopoList = result.hatsureikuikiTopoList;
}
if(result.hatsureikuikiColorList != null) {
hatsureikuikiColorList = result.hatsureikuikiColorList;
}
if(result.hatsureikuikiTextMap != null) {
hatsureiShubetsuMapping = result.hatsureikuikiTextMap;
}
// 避難所情報の取得
if(result.hinanjyoList != null){
hinanjyoList = result.hinanjyoList;
}
if(result.hinanjyoUpdateTime != null){
hinanjyoUpdateTime = result.hinanjyoUpdateTime;
}
// 地震情報の取得
if(result.earthquakeList != null){
earthquakeList = result.earthquakeList;
}
if(result.earthquakeUpdateTime != null){
earthquakeUpdateTime = result.earthquakeUpdateTime;
}
// 津波情報の取得
if(result.tsunamiList != null){
tsunamiList = result.tsunamiList;
}
if(result.tsunamiUpdateTime != null){
tsunamiUpdateTime = result.tsunamiUpdateTime;
}
// 土砂災害警戒情報の取得
if(result.doshakeikaiList != null){
doshakeikaiList = result.doshakeikaiList;
}
if(result.doshakeikaiUpdateTime != null){
doshakeikaiUpdateTime = result.doshakeikaiUpdateTime;
}
// 火山・噴火警報情報の取得
if(result.kazanPointList != null){
kazanPointList = result.kazanPointList;
}
if(result.volcWarnList != null){
volcWarnList = result.volcWarnList;
}
if(result.kazanUpdateTime != null){
kazanUpdateTime = result.kazanUpdateTime;
}
// 潮位情報の取得
if(result.chouiList != null){
suiboChouiList = result.chouiList;
}
if(result.chouiUpdateTime != null){
suiboChouiUpdateTime = result.chouiUpdateTime;
}
// 観測所震度情報の取得
if(result.shindoList != null){
shindoList = result.shindoList;
}
if(result.shindoUpdateTime != null){
shindoUpdateTime = result.shindoUpdateTime;
}
// 避難所ポイント情報の取得
if(result.hinanjyoPointList != null){
hinanjyoPointList = result.hinanjyoPointList
}
if(result.hinanjyoPointUpdateTime != null){
hinanjyoPointUpdateTime = result.hinanjyoPointUpdateTime;
}
// 避難所(指定避難所)
if(result.hinanjyoMasterShelter != null){
hinanjyoMasterShelter = result.hinanjyoMasterShelter;
}
// 避難所(指定緊急避難場所兼避難所)
if(result.hinanjyoMasterAreaShelter != null){
hinanjyoMasterAreaShelter = result.hinanjyoMasterAreaShelter;
}
// 避難所(指定緊急避難場所)
if(result.hinanjyoMasterArea != null){
hinanjyoMasterArea = result.hinanjyoMasterArea;
}
// 避難所(指定なし)
if(result.hinanjyoMasterNA != null){
hinanjyoMasterNA = result.hinanjyoMasterNA;
}
// 道路規制
if(result.roadregulation != null){
roadregulation = result.roadregulation;
}
if(result.roadregulationUpdateTime != null){
roadregulationUpdateTime = result.roadregulationUpdateTime;
}
//警戒体制情報
if(result.keikaiList0 != null) {
keikaiInfoList0 = result.keikaiList0;
}
if(result.keikaiUpdateTime0 != null) {
keikaiInfoUpdateTime0 = result.keikaiUpdateTime0;
}
//301
if(result.keikaiList1 != null) {
keikaiInfoList1 = result.keikaiList1;
}
if(result.keikaiUpdateTime1 != null) {
keikaiInfoUpdateTime1 = result.keikaiUpdateTime1;
}
//302
if(result.keikaiList2 != null) {
keikaiInfoList2 = result.keikaiList2;
}
if(result.keikaiUpdateTime2 != null) {
keikaiInfoUpdateTime2 = result.keikaiUpdateTime2;
}
//303
if(result.keikaiList3 != null) {
keikaiInfoList3 = result.keikaiList3;
}
if(result.keikaiUpdateTime3 != null) {
keikaiInfoUpdateTime3 = result.keikaiUpdateTime3;
}
//304
if(result.keikaiList4 != null) {
keikaiInfoList4 = result.keikaiList4;
}
if(result.keikaiUpdateTime4 != null) {
keikaiInfoUpdateTime4 = result.keikaiUpdateTime4;
}
//305
if(result.keikaiList5 != null) {
keikaiInfoList5 = result.keikaiList5;
}
if(result.keikaiUpdateTime5 != null) {
keikaiInfoUpdateTime5 = result.keikaiUpdateTime5;
}
// ラスタ複数画像対応
var kindList = layerKind.split(',');
for(var i = 0 ; i < kindList; i ++){
var kind = kindList[i];
if(result[kind] != null){
rasterImageMap[kind] = result[kind];
}
}
// データ取得後処理
onAfterLoadSalesforceData(layerKind);
},{escape:false}
);
}
/**
* Salesforceデータ取得後処理
*/
function onAfterLoadSalesforceData(layerKinds){
try{
var kindList = layerKinds.split(',');
for(var i = 0 ; i < kindList.length ; i++){
var layerKind = kindList[i];
var layerMaster = layerKindMap[layerKind];
if (typeof layerMaster === "undefined") {
waitOver();
continue;
}
if ( layerMaster.LayerKind__c == null ) {
waitOver();
continue;
}
var callback;
switch(layerMaster.LayerKind__c){
case LAYER_KIND.KISHOU_INFO:
// 気象注警報レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeKishouInfoLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.URYO_INFO:
// 雨量情報レイヤ取得(静的リソースに定義)
makeUryoInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.SUII_INFO:
// 水位情報レイヤ取得(静的リソースに定義)
makeSuiiInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANKANKOKU_INFO:
// 避難勧告レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeHinanKankokuLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.HATSUREIKUIKI:
// 発令区域のポリゴン表示(避難情報レイヤとして表示)
makeHatsureiKuikiMapInfoLayer(DISPLAY_KEIKAIKUIKI_FLG, DISPLAY_HINAN_KAIJO_FLG, DISPLAY_ALERT_LV_PATTERN);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_INFO:
// 避難所レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeHinanjyoLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.EARTHQUAKE_INFO:
// 地震レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeEarthquakeLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.TSUNAMI_INFO:
// 津波レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeTsunamiLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.DOSHAKEIKAI_INFO:
// 土砂警戒レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeDoshakeikaiLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.KAZAN_INFO:
// 火山レイヤ取得(静的リソースに定義)
makeKazanInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.VOLCWARNING_INFO:
// 噴火警報レイヤ取得(静的リソースに定義)
callback = function(useTopo, result) {
makeVolcwarninguInfoLayer(useTopo, result);
}
drowLayer(layerMaster.Name, callback);
break;
case LAYER_KIND.CHOUI_INFO:
// 潮位情報レイヤ取得(静的リソースに定義)
makeChouiInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.SHINDO_INFO:
// 観測所震度情報レイヤ取得(静的リソースに定義)
makeShindoInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_POINT_INFO:
// 避難所ポイントレイヤ取得(静的リソースに定義)
makeHinanjyoPointInfoLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,targetId,16,true);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_MASTER_SHELTER:
// 避難所(指定避難所)
makeHinanjyoMasterLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,targetId,SHITEI_KUBUN.SHELTER);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_MASTER_AREA_SHELTER:
// 避難所(指定緊急避難場所兼避難所)
makeHinanjyoMasterLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,targetId,SHITEI_KUBUN.AREA_SHELTER);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_MASTER_AREA:
// 避難所(指定緊急避難場所)
makeHinanjyoMasterLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,targetId,SHITEI_KUBUN.AREA);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HINANJYO_MASTER_NA:
// 避難所(指定なし)
makeHinanjyoMasterLayer(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,targetId,SHITEI_KUBUN.NA);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.DAM_INFO:
// ダム情報レイヤ取得(静的リソースに定義)
makeDamInfoLayer(layerMaster.Legends__r, layerMaster.IconWidth__c, layerMaster.IconHeight__c);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.ROAD_REGULATION:
//道路規制情報取得
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.HONDA_INFO:
// HONDA通行実績レイヤ取得(静的リソースに定義)
hondaMarkers = makeHONDATrafficLayer('4932,5032,5033,5132,5133');
layers[layerMaster.LayerKind__c].clearLayers();
for (var i = 0; i < hondaMarkers.length; i++) {
layers[layerMaster.LayerKind__c].addLayer(hondaMarkers[i])
}
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO:
//警戒体制情報取得
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO1:
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO1);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO2:
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO2);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO3:
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO3);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO4:
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO4);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
case LAYER_KIND.KEIKAI_INFO5:
makeKeikaitaiseiLayer1(layerMaster.Legends__r,layerMaster.IconWidth__c,layerMaster.IconHeight__c,LAYER_KIND.KEIKAI_INFO5);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
default:
// 業務に特化しないレイヤの場合(現状はイメージレイヤ)
var rasterImageList = rasterImageMap[layerMaster.LayerKind__c];
var rasterList = [];
if (typeof rasterImageList === "undefined") {
//レイヤが存在しない場合(全選択用チェックボックスなど)
break;
} else {
// 各画像用のイメージレイヤを作成
for(var i = 0 ; i < rasterImageList.length ; i++){
var rasterImage = rasterImageList[i];
rasterList.push(
L.imageOverlay(rasterImage.ImageURL__c,
[
[Number(rasterImage.bottomLat__c),Number(rasterImage.leftLng__c)],
[Number(rasterImage.topLat__c),Number(rasterImage.rightLng__c)]
],
{
opacity:Number(layerMaster.Opacity__c)
})
);
}
layers[layerMaster.LayerKind__c] = L.layerGroup(rasterList);
onAfterMapLoaded(layerMaster.LayerKind__c);
break;
}
}
}
}catch(e){
ajaxOnFailure('onAfterLoadSalesforceData',e);
waitOver();
}
}
/**
* レイヤ表示処理
*/
function drowLayer(layerName, callbackFunc) {
// カスタムメタデータから図形取得しLayerMakerを呼出す
if(TOPOJSON_USE_FLG == 'true'){
Visualforce.remoting.Manager.invokeAction('P_PUB_CL_MapCtrl.GetAreasTopoJson', layerName,
function(result, event){
if(!event.status){
ajaxOnFailure('P_PUB_CL_MapCtrl', event.message);
waitOver();
return;
}
callbackFunc(TOPOJSON_USE_FLG, result);
}, {escape : false});
} else {
callbackFunc(TOPOJSON_USE_FLG, null);
}
}
/**
* 道路規制(GeoJson)読み込み処理
*/
var layerGroup = new L.LayerGroup();
var RoadGeoJson;
var GeoJsonFlg = false;
function drowGeoJson() {
if(GeoJsonFlg){
return;
}
layerGroup = new L.LayerGroup();
RoadGeoJson = "";
Visualforce.remoting.Manager.invokeAction('P_PUB_CL_MapCtrl.GetRoadGeoJson',
function(result, event){
RoadGeoJson = L.geoJson(result,{
pointToLayer: function (feature, latlng) {
if (feature.properties._iconUrl !== "") {
icn = L.icon({
iconUrl: feature.properties._iconUrl,
iconSize: [20, 20]
});
}
return L.marker(latlng, {icon: icn});
},onEachFeature: onEachFeature
});
layerGroup.addTo(map);
layerGroup.addLayer(RoadGeoJson);
}, {escape : false});
GeoJsonFlg = true;
}
function onEachFeature(feature, layer) {
makeRoadRegulationPointInfoLayer(feature, layer);
}
function removeMarkers(){
map.removeLayer(layerGroup);
for(var i = 0 ; i < layerLoadedMap.length ; i++){
if(layerLoadedMap[i] == 19){
layerLoadedMap.splice(i, 1);
}
}
GeoJsonFlg = false;
}
/**
* 地図ロード後処理
*/
function onAfterMapLoaded(loadedKind){
layerLoadedMap[loadedKind] = true;
// 表示要求全てのレイヤが準備できていない場合は処理終了
var kindList = dispLayerKind.split(',')
for(var i = 0 ; i < kindList.length ; i++){
if(layerLoadedMap[kindList[i]] != true){
return;
}
}
changeLayerKind(dispLayerKind);
// ポップアップ対象がある場合はポップアップ表示
if(popupItem != null){
popupItem.openPopup();
}
waitOver();
}
/**
* レイヤ種別の変更(レイヤ表示は全てこのメソッドを通る)
*
* @param 地図種別
*/
function changeLayerKind(targetKinds){
// 表示レイヤ種別の設定
dispLayerKind = targetKinds;
// 既にタイマー設定している場合はタイマー停止
if(changeLayerTimer!= null){
clearTimeout(changeLayerTimer);
changeLayerTimer = null;
}
if(!initDone){
// 初期化終了していない場合はタイマーで再度呼び出し
changeLayerTimer= setTimeout(function(targetKinds){
changeLayerKind(targetKinds);
},0,targetKinds);
return;
}
// レイヤ変更前のローディングを解除する
waitOver();
// レイヤ選択コントロール未使用の場合は最初にレイヤ非表示、拡大マップリンク修正を実施する
if(!false){
// 全てのレイヤを非表示にしてから目的のレイヤを表示する
for( key in layers){
hideLayer(layers[key]);
hideLegend(key);
removeMarkers();
}
// 拡大マップリンク修正
changeKakudaiMapLink();
}
// 種別は複数来ることがある
var kindList = targetKinds.split(',');
if(layerLoadedMap[kindList[0]] != true){
// 複数同時表示レイヤは基本複数同時に来るので先頭が未作成の場合は全てを作成しなおす
LoadSalesforceData(targetKinds);
return;
}
// 指定レイヤの表示
for(var i = 0 ; i < kindList.length ; i++){
dispLayer(layers[kindList[i]]);
showLegend(kindList[i]);
layerDispStatus[kindList[i]] = true;
if(kindList[i] == 19){
drowGeoJson();
}
}
// レイヤ選択コントロール未使用の場合は更新日時設定を行う
if(!false){
var info_update = '';
switch(kindList[0]){
case LAYER_KIND.KISHOU_INFO:
info_update = kishouUpdateTime;
break;
case LAYER_KIND.KISHOU_DOSHA:
break;
case LAYER_KIND.SUII_INFO:
info_update = suiboSuiiUpdateTime;
break;
case LAYER_KIND.URYO_INFO:
info_update = suiboUryoUpdateTime;
break;
case LAYER_KIND.HINANKANKOKU_INFO:
info_update = hinankankokuUpdateTime;
break;
case LAYER_KIND.HINANJYO_INFO:
info_update = hinanjyoUpdateTime;
break;
case LAYER_KIND.EARTHQUAKE_INFO:
info_update = earthquakeUpdateTime;
break;
case LAYER_KIND.TSUNAMI_INFO:
// info_update = tsunamiUpdateTime;
break;
case LAYER_KIND.DOSHAKEIKAI_INFO:
info_update = doshakeikaiUpdateTime;
break;
case LAYER_KIND.KAZAN_INFO:
info_update = kazanUpdateTime;
break;
case LAYER_KIND.VOLCWARNING_INFO:
info_update = kazanUpdateTime;
break;
case LAYER_KIND.CHOUI_INFO:
info_update = suiboChouiUpdateTime;
break;
case LAYER_KIND.SHINDO_INFO:
info_update = shindoUpdateTime;
break;
case LAYER_KIND.HINANJYO_POINT_INFO:
info_update = hinanjyoPointUpdateTime;
break;
case LAYER_KIND.DAM_INFO:
info_update = suiboDamUpdateTime;
break;
case LAYER_KIND.ROAD_REGULATION:
info_update = roadregulationUpdateTime;
break;
}
// 更新日時の更新
$('#info_update_' + kindList[0]).text(info_update);
}
}
/**
* マップイベント定義
*
*/
function setMapEvent(){
// レイヤON
map.on('overlayadd',function(e){
var layerKind = layerMap[e.layer.id];
// レイヤ変更イベント呼び出し(内部で凡例も表示)
changeLayerKind(layerKind);
var kindLists = layerKind.split(',');
for(var i = 0 ; i < kindLists.length ; i++){
if(kindLists[i] == 19){
drowGeoJson();
}
}
});
// レイヤOFF
map.on('overlayremove',function(e){
var layerKind = layerMap[e.layer.id];
layerDispStatus[layerKind] = false;
// レイヤOFF
hideLayer(layers[layerKind]);
// 凡例OFF
hideLegend(layerKind);
if(layerKind == 19){
removeMarkers();
}
if(layerKind == LAYER_KIND.HATSUREIKUIKI){
popupItem = null;
}
});
// 地図移動
map.on('moveend',function(e){
// 拡大マップリンク修正
changeKakudaiMapLink();
});
// ズームレベル変更
map.on('zoomend',function(e){
// 拡大マップリンク修正
changeKakudaiMapLink();
});
}
/**
* 地図表示位置・ズームレベル変更
*
* @param 市町村名
*/
function changeCoordZoom(cityName){
if(!makeMapDone){
viewCityName = cityName;
return;
}
// ポータル市町村リストが空の場合はまだ情報が未取得なので、ロード後にジャンプするようにする
if(portalCityList.length == 0){
dispCityName = cityName;
return;
}
// 市町村に紐づく表示位置・ズームレベルを設定する
for(var i = 0 ; i < portalCityList.length ; i++){
var item = portalCityList[i];
if(item.CityName__c == cityName){
map.setView([item.LatitudeWGS84__c,item.LongitudeWGS84__c],item.ZoomLevel__c);
break;
}
}
}
/**
* 地図表示位置・ズームレベル変更
*
* @param 市町村コード
*/
function changeCoordZoomCityCode(cityCode){
var citymaster = [];
for(var i = 0 ; i < CityMasterList.length ; i++){
var item = CityMasterList[i];
if(item.CityCode__c == cityCode){
citymaster = item;
break;
}
}
if(!makeMapDone){
viewCityName = citymaster.Name;
return;
}
// ポータル市町村リストが空の場合はまだ情報が未取得なので、ロード後にジャンプするようにする
if(portalCityList.length == 0){
dispCityName = citymaster.Name;
return;
}
// 市町村に紐づく表示位置・ズームレベルを設定する
for(var i = 0 ; i < portalCityList.length ; i++){
var item = portalCityList[i];
if(item.CityName__c == citymaster.Name){
map.setView([item.LatitudeWGS84__c,item.LongitudeWGS84__c],item.ZoomLevel__c);
break;
}
}
}
/**
* 拡大地図リンク変更
*/
function changeKakudaiMapLink(){
if(!makeMapDone){
return;
}
// 現在地の取得
var mapCenter = map.getCenter();
var mapZoom = map.getZoom();
var linkLayerKind = dispLayerKind;
if (DISPLAY_HATSUREIKUIKI_FLG == 'true') {
if (dispLayerKind == LAYER_KIND.HINANKANKOKU_INFO) {
linkLayerKind = LAYER_KIND.HATSUREIKUIKI;
}
}
// ズームレベルを矯正
if (linkLayerKind == LAYER_KIND.HATSUREIKUIKI ) {
mapZoom = 13;
}
// 拡大マップへのリンクを修正する
$('#kakudaiMapLink').attr("href" , '/P_PUB_VF_kakudaiMap' + '?lk=' + linkLayerKind + '&lat=' + mapCenter['lat'] + '&lng=' + mapCenter['lng'] + '&zoom=' + mapZoom);
$('#kakudaiMapLink2').attr("href" , '/P_PUB_VF_kakudaiMap' + '?lk=' + linkLayerKind + '&lat=' + mapCenter['lat'] + '&lng=' + mapCenter['lng'] + '&zoom=' + mapZoom);
}
/**
* 地図初期化
*/
function initMap(){
if(makeMapDone){
// 既に地図作成済みの場合は無視
return;
}
// 地図部分を作成
makeMap();
if(loadDataDone){
// 既に情報読込済だった場合は後続処理を実施する
onAfterLoadSalesforceDataForInit();
}
if(viewCityName.length > 0){
changeCoordZoom(viewCityName);
changeKakudaiMapLink();
}
}