【问题标题】:Launch Google Maps On Blazor在 Blazor 上启动 Google 地图
【发布时间】:2020-04-18 20:24:09
【问题描述】:

我正在尝试使用 JSInterop 在我的服务器端 Blazor 应用程序上启动 Google 地图。我似乎几乎尝试了所有方法,但无法显示地图。不幸的是,互联网上几乎没有关于它的示例,因为它是一个相当新的框架,而且我自己也同样只是在 Blazor 上沾沾自喜,所以我可能做错了很多事情。任何朝着正确方向的推动都将不胜感激。

在我的组件文件中,我有:

@page "/MapTest"
@inject IJSRuntime JSRuntime

<style>
    #map {
        width: 60%;
        height: 60%;
    }
</style>

<h1>Display Google Map</h1>


<div @ref="map" id="map"></div>

@code {

    ElementReference map; // reference to the DIV

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        await JSRuntime.InvokeVoidAsync("Showgooglemap", null);
        //StateHasChanged();

    }
}

在我的 _Host.cshtml 文件中,我有:

   <script src="_framework/blazor.server.js"></script>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=xxxmykeyxxx&v=3"></script>

    <script type="text/javascript">
            function initialize() {
                var latlng = new google.maps.LatLng(40.716948, -74.003563);
                var options = {
                    zoom: 14, center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                var map = new google.maps.Map(document.getElementById
                    ("map"), options);
        }
            //google.maps.event.addDomListener(window, 'load', initialize);

//i tried wrapping the call in a function to see if it helps
        function Showgooglemap() {
            google.maps.event.addDomListener(window, 'load', initialize);
        }
      </script>

【问题讨论】:

    标签: google-maps-api-3 blazor-server-side


    【解决方案1】:

    欢迎@flylily,你快完成了。我在我的示例 Blazor-server-side 项目中运行您的代码。我只改变两件事。 一个是将高度从百分比更改为像素(for percentage height HTML 5),另一个是调用initialize函数而不是Showgooglemap,因为initialize函数已经初始化你的地图page loadfirst render。完整的代码如下,试试这些...

    _Host.cshtml 文件,

    <script src="_framework/blazor.server.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key={{put-your-api-key}}&v=3"></script>
    <script>
        function initialize() {
            var latlng = new google.maps.LatLng(40.716948, -74.003563);
            var options = {
                zoom: 14, center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById
                ("map"), options);
        }   
    </script>
    

    MapTest.razor 组件,

    @page "/MapTest"
    @inject IJSRuntime JSRuntime
    
    <h1>Display Google Map</h1>
    <div id="map" style="height:500px;width:100%;">
    </div>
    
    @code{
    
        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            if (firstRender)
            {
                await JSRuntime.InvokeVoidAsync("initialize", null);
                StateHasChanged();
            }
    
        }
    }
    

    最后,运行您的应用程序并享受。

    【讨论】:

    • 非常感谢你。我拔掉了一半的头发,把所有的指甲都咬掉了,试图弄清楚为什么这不起作用。你救了我几个星期的挫败感。
    • @flylily 很高兴为您提供帮助
    • 它说我的情况发生了意外错误:(
    • 是否可以在 MapTest.razor.component 中添加多个标记?
    【解决方案2】:

    您可以使用this Nuget package。它还可以让您的 Blazor 应用完全控制 Google Static 和 JavaScript Maps API。 用法可能很复杂,因此建议阅读documentation了解更多详细信息并查看demo app

    其他Nuget package 也可以帮助您访问浏览器地理定位服务。请参阅 Geo JS docsdemo app

    【讨论】:

    • 我偶然发现了这个线程,但这引起了我的注意。 (⊙⊙)
    • 说使用可能很复杂是轻描淡写,建议阅读文档以获得帮助是一种夸张的夸张。这个库可能声称是一个很好的包装器,它可能是......但我根本无法让它工作。
    • 谷歌地图有很多功能。所以库也有点复杂,添加了 Js 回调等。演示应用程序使它完美运行,你应该检查代码。如果您仍有问题,请在 GitHub 上提交...
    【解决方案3】:

    您也可以使用来自rungwiroon 的包BlazorGoogleMaps。支持

    • 地图
    • 标记
    • 符号
    • 信息窗口
    • 多边形、线串、矩形、圆形
    • 路线
    • 坐标
    • 界限
    • 样式

    GithubNuGet 上可用。

    我正在使用它,效果很好。

    【讨论】:

    • 我查看了这个,但找不到任何好的文档。即使是主页上的简单代码也与示例中的代码不匹配。您是否找到任何好的文档或示例用法?我只是想做一些简单的事情,比如在 GoogleMap 组件上设置高度。
    • 我是支持者,我懒得很好地填写所有文档:)。我可以保证服务器端示例具有几乎所有可能的地图变化
    • @Kevon 我刚刚下载了 zip 文件并在 Visual Studio 中打开它,一切运行良好。代码示例是最好的文档?
    猜你喜欢
    • 2020-04-08
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多