Javascript 加载外部JSON文件以设置google地图样式

Javascript 加载外部JSON文件以设置google地图样式,javascript,json,google-maps-api-3,Javascript,Json,Google Maps Api 3,我目前正在使用JSON成功地为我的谷歌地图设计样式。这里显示了我的代码示例(尽管实际上有数百行json样式): window.onload=函数initMap(){ var styledMapType=new google.maps.styledMapType( [ { “elementType”:“几何体”, “造型师”:[ { “颜色”:“#F5” } ] }, ],{name:'Map'}); var map=new google.maps.map(document.getElement

我目前正在使用JSON成功地为我的谷歌地图设计样式。这里显示了我的代码示例(尽管实际上有数百行json样式):

window.onload=函数initMap(){
var styledMapType=new google.maps.styledMapType(
[
{
“elementType”:“几何体”,
“造型师”:[
{
“颜色”:“#F5”
}
]
},
],{name:'Map'});
var map=new google.maps.map(document.getElementById('map'){
缩放:10,
中心:{lat:51.529517,lng:10.058284},
mapTypeControlOptions:{
MapTypeId:['satellite','styled_map']
}
});
//将样式化映射与MapTypeId关联,并将其设置为显示。
map.mapTypes.set('styled_map',styledMapType);
setMapTypeId('styled_map');
}

#地图{
位置:绝对位置;
顶部:100px;
左:0;
底部:100px;
右:0;
}

您需要重新排列代码。在初始化styledMapType时,加载的_json看起来是空的。尝试按如下方式重新排列代码:

var styledMapType;

var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 10,
  center: {lat: 51.529517, lng: 10.058284},
  mapTypeControlOptions: {
    mapTypeIds: ['satellite', 'styled_map']
  }
});  

loadJSON(function(response) {
  loaded_json = JSON.parse(response);
  styledMapType = new google.maps.StyledMapType(loaded_json, {name: 'Map'});

  map.mapTypes.set('styled_map', styledMapType);
  map.setMapTypeId('styled_map');
});

你需要重新排列你的代码。在初始化styledMapType时,加载的_json看起来是空的。尝试按如下方式重新排列代码:

var styledMapType;

var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 10,
  center: {lat: 51.529517, lng: 10.058284},
  mapTypeControlOptions: {
    mapTypeIds: ['satellite', 'styled_map']
  }
});  

loadJSON(function(response) {
  loaded_json = JSON.parse(response);
  styledMapType = new google.maps.StyledMapType(loaded_json, {name: 'Map'});

  map.mapTypes.set('styled_map', styledMapType);
  map.setMapTypeId('styled_map');
});

当样式存在时,将映射创建移到
loadJSON
回调函数中

代码片段(请注意,由于JSON文件不可用,因此该代码片段无法工作,因此该实例可以工作):

window.onload=函数initMap(){
函数loadJSON(回调){
var xobj=新的XMLHttpRequest();
重写emimetype(“application/json”);
open('GET','style.json',true);
xobj.onreadystatechange=函数(){
if(xobj.readyState==4&&xobj.status==200){
回调(xobj.responseText);
}
};
xobj.send(空);
}
var-loaded\u-json
loadJSON(函数(响应){
//这将正确地打印出JSON
加载的_json=json.parse(响应);
log(加载的_json)
var styledMapType=new google.maps.styledMapType(加载的{
名称:“地图”
});
var map=new google.maps.map(document.getElementById('map'){
缩放:10,
中心:{
拉脱维亚:51.529517,
液化天然气:10.058284
},
mapTypeControlOptions:{
MapTypeId:['satellite','styled_map']
}
});
//将样式化映射与MapTypeId关联,并将其设置为显示。
map.mapTypes.set('styled_map',styledMapType);
setMapTypeId('styled_map');
//这并不重要
log(加载的_json)
});
}
#地图{
位置:绝对位置;
顶部:100px;
左:0;
底部:100px;
右:0;
}

当样式存在时,将映射创建移到
loadJSON
回调函数中

代码片段(请注意,由于JSON文件不可用,因此该代码片段无法工作,因此该实例可以工作):

window.onload=函数initMap(){
函数loadJSON(回调){
var xobj=新的XMLHttpRequest();
重写emimetype(“application/json”);
open('GET','style.json',true);
xobj.onreadystatechange=函数(){
if(xobj.readyState==4&&xobj.status==200){
回调(xobj.responseText);
}
};
xobj.send(空);
}
var-loaded\u-json
loadJSON(函数(响应){
//这将正确地打印出JSON
加载的_json=json.parse(响应);
log(加载的_json)
var styledMapType=new google.maps.styledMapType(加载的{
名称:“地图”
});
var map=new google.maps.map(document.getElementById('map'){
缩放:10,
中心:{
拉脱维亚:51.529517,
液化天然气:10.058284
},
mapTypeControlOptions:{
MapTypeId:['satellite','styled_map']
}
});
//将样式化映射与MapTypeId关联,并将其设置为显示。
map.mapTypes.set('styled_map',styledMapType);
setMapTypeId('styled_map');
//这并不重要
log(加载的_json)
});
}
#地图{
位置:绝对位置;
顶部:100px;
左:0;
底部:100px;
右:0;
}


可能存在的重复项。请注意,您(可能)现在有两个异步函数(您没有发布一个,因此我们无法看到您是如何初始化映射的),因此您必须处理一个潜在的竞争条件(映射初始化,返回的样式数据)。我已经用嵌入html中的json版本的完整工作示例更新了这个问题。然后我有一个完整但不完整的json外部示例。可能是的重复。请注意,您(可能)现在有两个异步函数(您没有发布一个,因此我们无法看到您是如何初始化映射的),因此您必须处理一个潜在的竞争条件(映射初始化,返回的样式数据)。我已经用嵌入html中的json版本的完整工作示例更新了这个问题。然后我有一个完整但不完整的json外部示例。请注意,这段代码有一个竞态条件,映射必须在json之前加载,或者它不起作用。请注意,这段代码有一个竞态条件,映射必须在json之前加载,或者它不起作用。