У меня есть этот код JS, который я использую для отображения вида улиц и карт Google в моей форме:
/*
* Click the map to set a new location for the Street View camera.
*/
var icon;
var markers = [];
var currentmarker;
var geocoder, infowindow;
var map;
var panorama;
var sv;
function initMap() {
var berkeley = { lat: 39.277782, lng: -7.428514 };
sv = new google.maps.StreetViewService();
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'));
// Set up the map.
map = new google.maps.Map(document.getElementById('map'), {
center: berkeley,
zoom: 17,
streetViewControl: false
});
sv.getPanorama({ location: berkeley, radius: 70 }, processSVData);
geocoder = new google.maps.Geocoder;
infowindow = new google.maps.InfoWindow;
map.addListener('click', function (event) {
sv.getPanorama({ location: event.latLng, radius: 70 }, processSVData);
});
document.getElementById('submit').addEventListener('click', function () {
var input = document.getElementById("resulttest"); /*latlng*/
var latlngStr = input.value.split(',', 2);
geocodeLatLng(latlngStr);
});
// Set the initial Street View camera to the center of the map
// Look for a nearby Street View panorama when the map is clicked.
// getPanoramaByLocation will return the nearest pano when the
// given radius is 50 meters or less.
}
function geocodeLatLng(latlngStr) {
// var input = document.getElementById("resulttest"); /*latlng*/
latlngStr = latlngStr.split(',', 2);
var latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]) };
geocoder.geocode({ 'location': latlng }, function (results, status) {
if (status === 'OK') {
if (results[1]) {
center: latlng,
map.setZoom(20);
var marker = new google.maps.Marker({
position: latlng,
map: map
});
markers.push(marker);
infowindow.setContent(results[1].formatted_address);
infowindow.open(map, marker);
sv.getPanorama({ location: latlng, radius: 70 }, processSVData);
} else {
window.alert('No results found');
}
} else {
window.alert('Geocoder failed due to: ' + status);
}
});
}
function processSVData(data, status) {
if (status === 'OK') {
var marker = new google.maps.Marker({
position: data.location.latLng,
map: map,
title: data.location.description
});
markers.push(marker);
panorama.setPano(data.location.pano);
panorama.setPov({
heading: 270,
pitch: 0
});
panorama.setVisible(true);
marker.addListener('click', function () {
var markerPanoID = data.location.pano;
// Set the Pano to use the passed panoID.
panorama.setPano(markerPanoID);
panorama.setPov({
heading: 270,
pitch: 0
});
panorama.setVisible(true);
});
} else {
console.error('Street View data not found for this location.');
}
}
function OnclickMarker(data, status) {
if (status === 'OK') {
panorama.setPano(data.location.pano);
panorama.setPov({
heading: 270,
pitch: 0
});
panorama.setVisible(true);
} else {
console.error('Street View data not found for this location.');
}
}
function setMapOnAll(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}
function clearOverlays() {
setMapOnAll(null);
}
function showMarkers() {
setMapOnAll(map);
}
function criarMarker(id, lat, lon) {
alert(id + ' ' + lat + ' ' + lon);
var LatLng = { lat: lat, lng: lon };
var marker = new google.maps.Marker({
id: id,
position: LatLng,
map: map
});
google.maps.event.addListener(marker, 'click', function () {
this.setIcon('https://www.google.com/mapfiles/marker_green.png');
sv.getPanorama({ location: LatLng, radius: 70 }, OnclickMarker);
if (currentmarker != null) {
currentmarker.setIcon('http://maps.google.com/mapfiles/ms/icons/red-dot.png');
panorama.setPov({
heading: 165,
pitch: 0
});
}
currentmarker = this;
//alert(lat);
//var evente = document.createEvent('MessageEvent');
// var origina = window.location.protocol + '//' + window.location.host;
//evente = new MessageEvent('jsCall', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': 'criarMarker' });
//document.dispatchEvent(evente);
var evente = document.createEvent('MessageEvent');
var origina = window.location.protocol + '//' + window.location.host;
evente = new MessageEvent('jsCall', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': id });
document.dispatchEvent(evente);
});
}
Я хотел бы вызвать функцию "criarMarker" и этого маленького парня "jscall", но я не могу этого сделать.Пробовал использовать: browser.ExecuteJavaScript("criarMarker('" + item.id + "'," + item.lat + "," + item.lon + ");");
, и когда я запускаю программу, она показывает вывод в изображении:
, но не добавляет маркеры на карту.Есть идеи?Цените усилие!
РЕДАКТИРОВАТЬ Плюс Инфо : Согласно моему ответу, на самом деле мне нужна помощь в вызове "jsCall", ранее я использовал geckobrowser и использовал "AddMessageEventListener" в моем c #, но теперь кажется, чтоЯ не могу назвать это geckoWebBrowser1.AddMessageEventListener("jsCall", (id) =>
, это то, что я использовал в моем предыдущем коде.
Другое редактирование: я изменил последние 4 строки моего JS, чтобы сделать его функцией, и теперь выглядит так:
function newFunction(evente, id) {
evente = new MessageEvent('jsCall', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': id });
return evente;
Также, если это сбивает с толку, весь смысл, когда я нажимаюмаркер это меняет мою строку dgv.Но на самом деле ничего не происходит, и я действительно не знаю почему, мой код для dgv такой:
int rowindex = -1;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["Edificio_cad"].Value.ToString().Equals(id))
{
rowindex = row.Index;
dataGridView1.Rows[rowindex].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = rowindex;
//MessageBox.Show(edificios);
//Console.WriteLine(edificios);
MessageBox.Show(lat);
return;
}
else
{
//dataGridView1.ClearSelection();
}
}
Благодарю за помощь.