Przeszukałem wszędzie w dokumentacji, aby wyjaśnić, w jaki sposób mogę wyświetlać tylko znaczniki dla danego obszaru tabeli fuzji.Mapy google, tabele i znaczniki fuzji
W tej chwili wszystkie znaczniki pojawiają się na mapie tak:
JSFiddle (note jsfiddle wont load the uri from website so markers wont show)
Jeśli klikniesz na powierzchni stołu fuzja/google map otrzymuję nazwa obszaru w wyskakującym okienku zgodnie z oczekiwaniami, jednak nie chcę początkowo pokazywać żadnego ze znaczników. Po kliknięciu obszaru tabeli/mapy fuzyjnej chcę, aby wyświetlała tylko znaczniki dla danego obszaru, a nie całej mapy.
ten sposób dodać znaczniki na mapie z mojego Web API:
var uri = 'http://mountainsandweather.azurewebsites.net/api/Mountains';
$(document).ready(function() {
//Get web api json data
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of mountains.
$.each(data, function (key, item) {
// Add a list item for the mountain.
$('<li>', { text: formatItem(item) }).appendTo($('#mountains'));
//Put seperate data fields into one variable
var latLng = new google.maps.LatLng(item.Latitude, item.Longitude);
//Add info window to each marker
var infowindow = new google.maps.InfoWindow({
content: formatItemInfoWindow(item)
});
// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: latLng,
title: formatItemInfoWindow(item.Name),
infowindow: infowindow
});
marker.setMap(map);
google.maps.event.addListener(marker, 'click', function() {
//this.infowindow.close(); //not working correctly info windows still show
this.infowindow.open(map, marker);
});
});
});
});
function formatItemInfoWindow(item) {
return item.Name + '<br />' + item.Height_ft + '<br />' + item.humidity + '<br />' + item.snowCover + '<br />' + item.temperature;
}
function formatItem(item) {
return item.Latitude +', '+ item.Longitude;
}
}
ja widziałem w dokumentacji oświadczenie where
, który można dodać do tabel fuzyjnych. Tak:
var layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: '11RJmSNdTr7uC867rr2zyzNQ6AiE1hcREmGFTlvH3'
where: //not sure if I could use this or what to put.
},
Jednak dane z API Web nie jest podzielony na poszczególnych obszarach jest to po prostu jedna długa lista długości i szerokości geograficzne. Podobnie jak:
<Mountain>
<Height_ft>2999</Height_ft>
<Height_m>914</Height_m>
<ID>c1</ID>
<Latitude>57.588007</Latitude>
<Longitude>-5.5233564</Longitude>
<Name>Beinn Dearg</Name>
<humidity>0.81</humidity>
<snowCover>4.99</snowCover>
<temperature>63</temperature>
</Mountain>
Czy Google ma coś na kształt mieszania geometrii stołu ze współrzędnymi? Prosty sposób wyświetlania wszystkich znaczników dla danego obszaru? Czy ktoś może pomyśleć o sposobie, w jaki można to zrobić?
Kilka dodatkowych szczegółów na temat WebAPI okrywać jest to potrzebne:
private MountainContext db = new MountainContext();
// GET: api/Mountains
public IQueryable<Mountain> GetMountains()
{
return db.Mountains;
}
// GET: api/Mountains/5
[ResponseType(typeof(Mountain))]
public IHttpActionResult GetMountain(string id)
{
Mountain mountain = db.Mountains.Find(id);
if (mountain == null)
{
return NotFound();
}
return Ok(mountain);
}
public IQueryable<Mountain> GetMountainByName(string name)
{
return db.Mountains.Where(n => string.Equals(n.Name, name));
}
masz możliwość zapisania znaczników również w FusionTable? –