2

有点进退两难。我有表学校项目赞助商

学校项目有一个连接/关联表(学校已经完成了一些项目)。赞助商项目赞助商赞助了某些学校完成的某些项目)。因此,它们都是相关/连接的。稍后,我想使用这种互连来过滤一堆表单控件。

所有三个表(SchoolsProjectsSponsors)都有纬度和经度列。

使用 JSON,我想在我的地图(Google Maps API v3)上绘制所有三个标记,并以某种方式显示它们是如何连接的。我目前正在为 jQuery 使用这个 Google Maps v3 插件

因此,地图初始化时将有三种类型的标记 -学校(名称、地址、电话、学校的专业类型、已完成的项目等)、项目(名称、描述、专业领域)、赞助商(姓名、地址、电话、赞助项目等)。

过滤将基于“专业类型”(将显示所有具有选定专业类型的学校、他们所做的所有项目以及每个项目的所有赞助商)和“专业领域”(将显示所有选定的项目专业领域,所有完成这些项目的学校以及与每个项目相关的所有赞助商)。

问题是我不确定如何生成 JSON 文件(或文件?)及其结构。

我是否应该为每个表(SchoolsProjectsSponsors)生成三个不同的 JSON 文件,其中将包含数据以及位置(lat、lng)以将它们绘制为标记。

或者

我是否应该生成一个巨大的 JSON 文件,比方说,基于Schools将包含Projects子节点,而 Projects 子节点又将包含Sponsors子节点?

或者

你会如何处理这个问题?

到目前为止,我已经设法在我的地图上绘制了所有学校作为标记:

$(function(){
    $('#map_canvas').gmap(mapOptions).bind('init', function() {
        $.getJSON( 'results.json', function(data) {                         
            $.each(data.schools, function(i, s) {                           
                $('#map_canvas').gmap('addMarker', {
                    'position': new google.maps.LatLng(s.Lat, s.Lng),
                    'bounds':true
                }).click(function() {                               
                    $('#map_canvas').gmap('openInfoWindow', {
                        'content': '<h1>'+s.SchoolName+'</h1>'+
                        '<p style="color: green">'+s.SchoolAddress+'</p>'
                    }, this);                           
                });                     
            });                 
        });             
    });         
});
4

2 回答 2

2

我处理这个(并且它有效)的方式如下:

我没有生成包含所有三个表中的数据的一个(或三个单独JSON的)文件,而是简单地生成一个 SQL 查询,该查询是根据用户希望在地图上看到的内容构建的。

因此,如果用户只想查看学校- 构建一个 SQL 查询,该查询仅从数据库中获取学校并将数据(名称、地址、电话、学校的专业类型、已完成的项目等)格式化为JSON在线格式-飞。

如果用户想在地图上看到不止一种类型的标记(例如Schools及其Projects) - 只需构建 SQL 查询,用于JOIN获取有关SchoolsProjects及其关系数据的数据,这些数据可用于将每所学校链接到适当的项目学校 infobox有两个选项卡 -学校信息已完成的项目),反之亦然。

于 2012-05-19T01:27:51.450 回答
1

JSON 生成非常简单。JSON 只是以这样的方式格式化的字符串,它们可以在不同平台之间发送并解码为可用的东西,如数组。

至于格式,也许您可​​以制作另一个纬度/经度表作为主键,以跟踪每个纬度/经度位置与其关联的内容(即学校/项目/赞助商)。

所以你有了:

Location | School     | Project     | Sponsor
---------|------------|-------------|----------
12/46    | Hoover Elem| Science Fair| NULL
37/87    | NULL       | Recycling   | GreenSponsor
45/32    | Lonely High| NULL        | NULL

等等。这样,您可以查询此表以映射相对于每个位置的关系。

如果每个元素(学校/项目/赞助商)都有位置,您应该能够通过使用精心制作的 SELECT 语句自动生成该表

编辑:即使它不像“从这三个具有相同位置的表中选择所有名称”那么简单,您也应该能够选择一个位置(我假设是学校),然后根据“专业化”或“填写任何关系”已完成的项目”,学校与项目共享,如果存在,请检查是否有与这些项目相关的赞助商。

于 2012-05-16T14:26:12.993 回答