交互式地图,如何在 symfony 中创建从地图标记的弹出窗口到模板的链接

Posted

技术标签:

【中文标题】交互式地图,如何在 symfony 中创建从地图标记的弹出窗口到模板的链接【英文标题】:interactive map, how to create a link from a popup of a marker of the map to a template in symfony 【发布时间】:2021-09-23 06:55:46 【问题描述】:

我正在寻找制作交互式地图。例如,我的地图显示了法国的攀登地点。我希望地图站点标记的弹出窗口将我引向该站点的描述性模板。我的项目在 symfony 中。我进行如下。在 index.htmll.twig 中,我将地图粘贴到 javascript 标记中。我尝试通过树枝中的 javascript 脚本循环访问数据库中升级站点的变量“站点”。但目前它不起作用。下面是 index.html.twig 中脚本的代码:

<script>
    //definiton de la variable site dans le script
    var site = sites

    //on initialise la carte
    var carte = L.map('macarte').setView([48.852969, 2.349903], 5);
    //on charge les tuiles
    L.tileLayer('https://s.tile.openstreetmap.fr/osmfr/z/x/y.png', 
            // Il est toujours bien de laisser le lien vers la source des données
            attribution: 'données © <a href="//osm.org/copyright">OpenStreetMap</a>/ODbL - rendu <a href="//openstreetmap.fr">OSM France</a>',
            minZoom: 1,
            maxZoom: 20
        ).addTo(carte);
    
     var icone = L.icon(
                iconUrl:"../img/pointeur-de-carte.png",
                iconSize: [50, 50],
                iconAnchor: [25, 50],
                popupAnchor: [-2, -44],
            );

    // on parcours les différents sites
               
    for ( site in sites) 
       
            // Nous définissons l'icône à utiliser pour le marqueur, sa taille affichée (iconSize), sa position (iconAnchor) et le décalage de son ancrage (popupAnchor) 
            //on crée un marqueur et on lui donne un popup
            var marqueur = L.marker([sites[site].lat, sites[site].lon],icon:icone).addTo(carte);
            //marqueur.bindPopup('<h3>sites</h3>');
            //marqueur.bindPopup(site);
                         
            marqueur.bindPopup(<a href=" path('site_show', 'id':sites.id) ">site</a>);

            
           // markerClusters.addLayer(marker); // Nous ajoutons le marqueur aux groupes
            //markerClusters.push(marqueur);
        
                          
</script>

我有以下错误: 渲染模板时抛出异常(“注意:数组到字符串的转换”)。

twig 中的站点转储正在运行。我不知道在哪里放置 __toString 才能使转换为字符串工作。

你也可以找到部分DB的图片。

在控制器中是这样的:

/**
 * @Route("/", name="site_index", methods="GET")
 */
public function index(SiteRepository $siteRepository): Response

    return $this->render('site/index.html.twig', [
        'sites' => $siteRepository->findAll(),
       
        
    ]);

谢谢。 迭戈

【问题讨论】:

【参考方案1】:

在这部分:

var site = sites

您的 sites 是一个数组。你应该先序列化这个变量。您可以使用 Symfony 5.3 中的新序列化过滤器来做到这一点:https://symfony.com/blog/new-in-symfony-5-3-twig-serialize-filter

var site =  sites|serialize('json') 

如果你还没有使用 Symfony 5.3,你应该使用 json_encoderaw 过滤器:

var site =  sites|json_encode()|raw 

【讨论】:

您好,感谢您的回复。我尝试了 var site = sites|json_encode()|raw whitch 工作。但它给了我另一个错误:“键为“0、1、2”的数组的键“id”不存在。”在那种情况下,它找不到数组,显然它不再存在。有人建议我使用传单中的 goejson,您管理 geojson(可能在变量列表上,这取决于后面如何管理它),您将其插入脚本标签中。我仍然必须这样做...... 但这是另一个问题,对吧?您没有在问题的代码中使用数组。 我尝试将数组与树枝中存在的 3 个对象 0、1、2 一起使用,但当我在脚本中循环时不再使用了 我不明白你的意思。我已经回答了你的问题,但现在你问的是另一个问题。 谢谢你,你给了一个很好的答案,但我仍然无法实现我的目标。但我想我找到了一个解决方案,在你的帮助下。我只需要努力。再次感谢您。

以上是关于交互式地图,如何在 symfony 中创建从地图标记的弹出窗口到模板的链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中创建从绿色到红色的热图?

如何在 Flutter 中创建从左到右或从上到下的叠加飞溅动画

如何在 EF 中创建从两个表到一个源的一对一映射?

我如何在表格中创建从一行到另一个仪表板的链接

如何在 Python 中创建从 Pub/Sub 到 GCS 的数据流管道

如何在Django中创建从Abstract User继承的多个用户配置文件?