【发布时间】:2016-07-23 19:28:50
【问题描述】:
我在文档中到处搜索以解释如何仅显示融合表给定区域的标记。
目前所有标记都出现在地图上,如下所示:
JSFiddle (note jsfiddle wont load the uri from website so markers wont show)
如果您单击融合表/谷歌地图的某个区域,我会按预期在弹出窗口中获得该区域名称,但是我最初不想显示任何标记。单击融合表/地图的某个区域时,我希望它仅显示该给定区域的标记,而不是整个地图。
这就是我从 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;
}
}
我确实在文档中看到了可以添加到融合表中的 where 语句。像这样:
var layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: '11RJmSNdTr7uC867rr2zyzNQ6AiE1hcREmGFTlvH3'
where: //not sure if I could use this or what to put.
},
但是,来自 Web Api 的数据并没有被分割成特定的区域,它只是一个很长的纬度和经度列表。像这样:
<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>
谷歌有什么方法可以将融合表几何与坐标混合吗?显示给定区域的所有标记的简单方法?或者任何人都可以想到可以做到这一点的方法吗?
一些关于 webapi 的额外细节以防需要:
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));
}
【问题讨论】:
-
您是否可以选择将标记也存储在 FusionTable 中?
标签: javascript jquery asp.net google-maps asp.net-web-api