实时移动点不会改变Blazor下MapBox中地图上的位置

实时移动点不会改变Blazor下MapBox中地图上的位置,mapbox,real-time,blazor,Mapbox,Real Time,Blazor,我在Blazor下使用MapBox。有一个点是JSON坐标实时变化的。在索引页面中,单击鼠标,我调用javascript函数: refreshJSON: function (str) { window.jsontest = JSON.parse(str); window.map.getSource('drone').setData(window.jsontest); } 其中jsontest包含新坐标,但该点在屏幕上的位置不变。 我怎样才能解决这个问题? 在Index.razor代码

我在Blazor下使用MapBox。有一个点是JSON坐标实时变化的。在索引页面中,单击鼠标,我调用javascript函数:

refreshJSON: function (str) { 
  window.jsontest = JSON.parse(str);
  window.map.getSource('drone').setData(window.jsontest);
}
其中jsontest包含新坐标,但该点在屏幕上的位置不变。 我怎样才能解决这个问题? 在Index.razor代码中:

public void refreshMapJson()
{
    refreshCoords();
    JSRuntime.InvokeAsync<object>("mapBoxFunctions.refreshJSON",currJson);
    InvokeAsync(() =>
        {
            StateHasChanged();
        }
     );
}
public void refreshMapJson()
{
刷新Coords();
JSRuntime.InvokeAsync(“mapBoxFunctions.refreshJSON”,currJson);
InvokeAsync(()=>
{
StateHasChanged();
}
);
}
等待您的方法:

public async Tassk refreshMapJson()
{
    refreshCoords();
    await JSRuntime.InvokeAsync<object>("mapBoxFunctions.refreshJSON",currJson);
    StateHasChanged();
}
等待您的方法:

public async Tassk refreshMapJson()
{
    refreshCoords();
    await JSRuntime.InvokeAsync<object>("mapBoxFunctions.refreshJSON",currJson);
    StateHasChanged();
}

一位MapBox开发人员说出了什么问题

您正在将源定义而不是数据传递给setData,setData理所当然地认为这不是有效的GeoJSON。这项工作:


一位MapBox开发人员说出了什么问题

您正在将源定义而不是数据传递给setData,setData理所当然地认为这不是有效的GeoJSON。这项工作:


尝试以下方法:从代码中删除对InvokeAsync的调用,并将剩下的内容放在OnAfterRenderAsync方法中,这样就可以了。该点会改变位置,但整个地图会重新绘制(约3秒),而不仅仅是该点。这不适合尝试以下方法:从代码中删除对InvokeAsync的调用,并将剩下的内容放在OnAfterRenderAsync方法中,这样做有效。该点会改变位置,但整个地图会重新绘制(约3秒),而不仅仅是该点。这不适用于第一种情况,即点改变位置,但重新绘制整个地图(~3秒),而不仅仅是点。这不合适。我使用了下一个代码:私有异步任务callJson(){Time=DateTime.UtcNow.ToString();refreshCoords();wait JSRuntime.InvokeAsync(“refreshJSON”,currJson”).configurewait(false);wait InvokeAsync(()=>{StateHasChanged();});}在第二种情况下-ValueTask不包含“ContinueWith”的定义。如果使用代码“JSRuntime.InvokeVoidAsync(“refreshJSON”,currJson).AsTask().ContinueWith(t=>StateHasChanged());”则我会得到一个错误-“当前线程与调度程序没有关联。在触发渲染或组件状态时,使用InvokeAsync()将执行切换到调度程序。”“哦,是的,我忘记了在第一种情况下,点的位置会发生变化,但整个映射会被重绘(~3秒)我使用了下一个代码:private async Task callJson(){Time=DateTime.UtcNow.ToString();refreshCoords();wait JSRuntime.InvokeAsync(“refreshJSON”,currJson”).configurewait(false);wait InvokeAsync(()=>{StateHasChanged();});}在第二种情况下-ValueTask不包含“ContinueWith”的定义。如果使用代码“JSRuntime.InvokeVoidAsync(“refreshJSON”,currJson.AsTask().ContinueWith(t=>StateHasChanged());”那么我会得到一个错误--当前线程与调度程序没有关联。在触发呈现或组件状态时,使用InvokeAsync()将执行切换到调度程序。“”哦,是的,我忘了
map.getSource('drone').setData(window.jsonleft.data);