Как отобразить карту Openstreetmap на C# и WPF? у меня только черный экранC#

Место общения программистов C#
Ответить
Anonymous
 Как отобразить карту Openstreetmap на C# и WPF? у меня только черный экран

Сообщение Anonymous »

В mainwindow.xaml.cs я добавил событие кнопки переключения для переключения из текущего режима в интерактивное представление Open Google Streetmap.
Вверху я добавил:

Код: Выделить всё

using Microsoft.Web.WebView2.Core;
и затем в моем коде:

Код: Выделить всё

private bool isMapMode = false;
и

Код: Выделить всё

private async void BtnToggleMap_Click(object sender, RoutedEventArgs e)
{
isMapMode = !isMapMode;

if (isMapMode)
{
// Switch to MAP mode
BtnToggleMap.Content = "📡 חזור לתצוגת רדאר";
MapContainer.Visibility = Visibility.Visible;
RadarContainer.Visibility = Visibility.Collapsed;

string projectRoot = IOPath.GetFullPath(IOPath.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\"));
string htmlPath = IOPath.Combine(projectRoot, "Assets", "Map", "map.html");
string mapFolder = IOPath.Combine(projectRoot, "Assets", "Map");

try
{
if (!File.Exists(htmlPath))
{
Log("⚠ map.html not found in Assets/Map folder!");
return;
}

// Initialize WebView2
await MapView.EnsureCoreWebView2Async(null);

// Enable access for local radar images
string radarFolder = IOPath.Combine(projectRoot, "Assets", "Radar_Images");
MapView.CoreWebView2.SetVirtualHostNameToFolderMapping(
"radar.local", radarFolder, CoreWebView2HostResourceAccessKind.Allow);

// Enable access for map folder (for leaflet.css and leaflet.js)
MapView.CoreWebView2.SetVirtualHostNameToFolderMapping(
"map.local", mapFolder, CoreWebView2HostResourceAccessKind.Allow);

// Read and modify HTML to use virtual host
string htmlContent = File.ReadAllText(htmlPath);
MapView.NavigateToString(htmlContent);

Log("🌍 Loaded interactive map mode with local Leaflet files.");

// Wait for map to load
await Task.Delay(1500);

// Send radar frames to map
await SendRadarFramesToMap();
}
catch (Exception ex)
{
Log($"❌ Failed to initialize map: {ex.Message}");
}
}
else
{
// Switch back to RADAR mode
BtnToggleMap.Content = "🗺 הצג מפה אינטראקטיבית";
MapContainer.Visibility = Visibility.Collapsed;
RadarContainer.Visibility = Visibility.Visible;
Log("📡 Returned to radar image mode.");
}
}
и

Код: Выделить всё

private async void MapView_NavigationCompleted(object? sender, CoreWebView2NavigationCompletedEventArgs e)
{
if (e.IsSuccess)
{
Log("✅ Map loaded successfully.");
// Send radar frames after map loads
await SendRadarFramesToMap();
}
else
{
Log($"❌ Map failed to load: {e.WebErrorStatus}");
}
}
Достигается эта черта

Код: Выделить всё

Log("✅ Map loaded successfully.");
но при запуске приложения я вижу только черный цвет с правой стороны.
Изображение

Это содержимое файла map.html, немного длиннее.

Код: Выделить всё





מפת רדאר






html, body, #map {
height: 100%;
margin: 0;
padding: 0;
background: black;
}





// Initialize map
var map = L.map('map', {
center: [31.5, 35.0],
zoom: 8,
zoomControl: true
});

// Base map
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors',
maxZoom: 19
}).addTo(map);

// Correct radar bounds
var radarBounds = L.latLngBounds([29.0, 33.0], [33.5, 36.5]);

var radarFrames = [];
var currentLayer = null;

function loadRadarImages(list) {
radarFrames = list || [];
console.log("✅ Received " + radarFrames.length + " frames");
if (radarFrames.length > 0) showRadarFrameUri(radarFrames[0]);
}

function showRadarFrameUri(uri) {
if (currentLayer) map.removeLayer(currentLayer);
console.log("🛰 Showing " + uri);
currentLayer = L.imageOverlay(uri, radarBounds, { opacity: 0.6 }).addTo(map);
}

console.log("✅ Map initialized and ready.");



У меня нет никаких ошибок, просто черный экран слева.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ack-screen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»