【问题标题】:Three tables that are related in some ways need to be plotted on map as markers. Best way to generate JSON files to plot them?需要在地图上绘制以某种方式相关的三个表格作为标记。生成 JSON 文件以绘制它们的最佳方法?
【发布时间】:2012-05-23 03:19:00
【问题描述】:

有点进退两难。我有表格SchoolsProjectsSponsors

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

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

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

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

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

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

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

我是否应该生成一个基于 Schools 的巨大 JSON 文件,其中包含 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);                           
                });                     
            });                 
        });             
    });         
});

【问题讨论】:

  • 假设您不是在寻找代码来查询数据库并实际创建 JSON 是否安全?您想关注 JSON 的实际结构以及如何在客户端使用 JavaScript 处理它?

标签: jquery json google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

我处理这个问题的方法(并且它工作)如下:

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

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

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

【讨论】:

  • 不错。通过阅读您的描述,我可以看出您使用汗水和辛勤工作来找到正确的解决方案。好东西。
【解决方案2】:

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 语句自动生成该表

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

【讨论】:

  • 嗯。 Location 列 - 它基于谁?(学校或项目或赞助商位置?)。因为学校、项目和赞助商都有不同的位置。
  • 啊,您应该仍然能够找到一种方法来生成具有它们的关系映射的表,即使位置不是最好的方法。但是从它的声音来看,您需要一个位置作为图钉生成(这样您就有一个具有任何多重关系的图钉)使用哪个位置取决于您,这取决于最清晰的沟通方式.在我的脑海中,我猜“学校”是放置别针并展示其与项目和赞助商关系的最佳场所
  • 您是说您表中的Location 应该基于学校位置吗?然后使用项目和赞助商的位置来绘制它们相对于学校的位置?
  • 这听起来很对,但我并不是 100% 知道您要解决的问题究竟是什么
  • 好吧,我想在地图上标出学校、项目和赞助商(它们三个都有自己的纬度和经度列)。我遇到的问题是决定如何构建 JSON。您建议使用一个大的 JSON,重点放在将项目作为子项目和赞助项目子项目的学校。但它能够处理任何类型的过滤吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多