简体   繁体   English

将数据从JSON文件加载到Google地图中的地图标记中

[英]Load data from JSON file into map markers in Google Maps

I've got the following JSON file: 我有以下JSON文件:

{
   "universities" : [
    [
        "title": "Aberystwyth University",
        "web": "www.aber.ac.uk",
        "phone": "+44 (0)1970 623 111",
        "lat": 52.415524,
        "lng": -4.063066
    ],
    [
        "title": "Bangor University",
        "web": "www.bangor.ac.uk",
        "phone": "+44 (0)1248 351 151",
        "lat": 53.229520,
        "lng": -4.129987
    ],
    [
        "title": "Cardiff Metropolitan University",
        "website": "www.cardiffmet.ac.uk",
        "phone": "+44 (0)2920 416 138", 
        "lat": 51.482708,
        "lng": -3.165881
    ]
  ]
}

And I'm trying to load the data from this file into my google maps script to produce some map markers with respective info windows. 我正在尝试将此文件中的数据加载到我的谷歌地图脚本中,以生成一些带有相应信息窗口的地图标记。 Here's my script: 这是我的脚本:

var map;
var icon = "http://path/to/icon.png";
var json = "http://path/to/universities.json";

function initialize() {

  var mapProp = {
  center:   new google.maps.LatLng(52.4550,-3.3833), //LLANDRINDOD WELLS
   zoom:        7,
   mapTypeId:  google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map"), mapProp);

  $.getJSON(json, function(json1) {

$.each(json1, function(key, data) {

    var latLng = new google.maps.LatLng(data.lat, data.lng);

    var marker = new google.maps.Marker({
        position:   latLng,
        map:        map,
        icon:       icon,
        title:      data.title
    });

    var details = data.website + ", " + data.phone + ".";

    bindInfoWindow(marker, map, infowindow, details);

});

 });

}

function bindInfoWindow(marker, map, infowindow, strDescription) {
    google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent(strDescription);
    infowindow.open(map, marker);
    });
}

google.maps.event.addDomListener(window, 'load', initialize);

But the data isn't loading (ie the map markers and infowindows aren't showing)? 但是数据没有加载(即,地图标记和信息窗口未显示)? Are there any problems with my JSON format. 我的JSON格式有任何问题吗? I've looked at previous solutions from Stacked such as this one but they're not loading. 我已经看过Stacked之前的解决方案,比如这个,但它们没有加载。 Any ideas? 有任何想法吗?

There are three issues with the posted code: 发布的代码有三个问题:

  1. the universities array should be an array of javascript objects "{}" not javascript arrays "[]". university数组应该是javascript对象“ {}”的数组,而不是javascript数组“ []”的数组。
  2. you need to process the universities array in the $.each 你需要在$ .each中处理大学数组
  3. the "web" property of your javascript object is incorrect, the code expects "website" 你的javascript对象的“web”属性不正确,代码需要“网站”

working fiddle (without the JSON fetch) 工作小提琴 (没有JSON提取)

working code snippet: 工作代码片段:

 var map; var icon = "http://path/to/icon.png"; var json = "http://path/to/universities.json"; var infowindow = new google.maps.InfoWindow(); function initialize() { var mapProp = { center: new google.maps.LatLng(52.4550, -3.3833), //LLANDRINDOD WELLS zoom: 7, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById("map"), mapProp); // $.getJSON(json, function(json1) { var json1 = { "universities": [{ "title": "Aberystwyth University", "website": "www.aber.ac.uk", "phone": "+44 (0)1970 623 111", "lat": 52.415524, "lng": -4.063066 }, { "title": "Bangor University", "website": "www.bangor.ac.uk", "phone": "+44 (0)1248 351 151", "lat": 53.229520, "lng": -4.129987 }, { "title": "Cardiff Metropolitan University", "website": "www.cardiffmet.ac.uk", "phone": "+44 (0)2920 416 138", "lat": 51.482708, "lng": -3.165881 } ] }; $.each(json1.universities, function(key, data) { var latLng = new google.maps.LatLng(data.lat, data.lng); var marker = new google.maps.Marker({ position: latLng, map: map, // icon: icon, title: data.title }); var details = data.website + ", " + data.phone + "."; bindInfoWindow(marker, map, infowindow, details); // }); }); } function bindInfoWindow(marker, map, infowindow, strDescription) { google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(strDescription); infowindow.open(map, marker); }); } google.maps.event.addDomListener(window, 'load', initialize); 
 html, body, #map { height: 100%; width: 100%; margin: 0px; padding: 0px } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script> <div id="map" style="border: 2px solid #3872ac;"></div> 

JSON is invalid - see correction JSON无效 - 请参阅更正

{
    "universities" : [
        {
            "title": "Aberystwyth University",
            "web": "www.aber.ac.uk",
            "phone": "+44 (0)1970 623 111",
            "lat": 52.415524,
            "lng": -4.063066
        },
        {
            "title": "Bangor University",
            "web": "www.bangor.ac.uk",
            "phone": "+44 (0)1248 351 151",
            "lat": 53.229520,
            "lng": -4.129987
        },
        {
            "title": "Cardiff Metropolitan University",
            "website": "www.cardiffmet.ac.uk",
            "phone": "+44 (0)2920 416 138", 
            "lat": 51.482708,
            "lng": -3.165881
        }
    ]
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM