传单(geojson)多边形上的简单标签

时间:2012-11-09 22:26:19

标签: javascript mapping openlayers leaflet

我正在尝试使用传单多面体对象的相当常见的用例。

我使用geojson创建MultiPolygon:

var layer = L.GeoJSON(g, style_opts);

我想要的是在每个多边形的中心放置一个简单的文本标签。 (例如,将州名放在每个州的中心)。

我看过: https://groups.google.com/forum/?fromgroups=#!topic/leaflet-js/sA2HnU5W9Fw

这实际上覆盖了文本,但是当我添加一堆多边形时,它似乎以偏怪的方式将标签偏离中心,而我目前无法追踪问题。

我也看过:https://github.com/jacobtoye/Leaflet.label

但是当你将鼠标悬停在多边形上时,它似乎只会将标签放在多边形上,并且不会静态地保留在多边形上。

我认为我最好的做法是使用第一个链接,并追踪它为什么会改变位置,但与此同时,如果有人知道在传单中在多边形上放置标签的快捷方式,我非常感激。

另外,如果我对上述两个链接有任何错误的假设,请随时理解我。

非常感谢。

2 个答案:

答案 0 :(得分:22)

传单标签插件还允许使用静态标签,请参阅demo。 折线标签不是静态的唯一原因是它沿着折线移动时会移动。

通过覆盖多边形的bindLabel(),你可以做得更好,但这是一种向多边形中心添加静态标签的简单方法:

label = new L.Label()
label.setContent("static label")
label.setLatLng(polygon.getBounds().getCenter())
map.showLabel(label);

http://jsfiddle.net/CrqkR/6/

答案 1 :(得分:14)

您可以使用public class SQLDetailRepository : IDetailRepository { ApplicationDbContext camOnlineDb = new ApplicationDbContext(); public IEnumerable<YearsModel> GetAllYearsFrom(int ClientID) { var x = (from d in camOnlineDb.Details where d.ClientID == ClientID where d.NominalPeriod != null select new { d.NominalPeriod }); return x.GroupBy(r => new { r.NominalPeriod }) .Select(g => new YearsModel { Year = g.Key.NominalPeriod.ToString().Substring(0, 4) })//Need another group by here to group after the substring has occrured } } 的{​​{1}}选项为每个多边形创建新的onEachFeature

L.geoJson