Подтвердить что ты не робот

Простая метка на многоугольнике (geojson)

Я пытаюсь понять, что я считаю довольно распространенным прецедентом с объектом multipolgon листка.

Я создаю MultiPolygon с помощью geojson:

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

Мне хотелось бы поставить простую текстовую метку в центре каждого полигона. (Например, что-то вроде помещения имени состояния в центр каждого состояния).

Я посмотрел: https://groups.google.com/forum/?fromgroups=#!topic/leaflet-js/sA2HnU5W9Fw

Что на самом деле накладывает текст, но когда я добавляю кучу полигонов, он, кажется, помещает ярлык не в центр, и я в настоящее время не могу отследить проблему.

Я также посмотрел: https://github.com/jacobtoye/Leaflet.label

но, по-видимому, он помещает метку на полигонах, когда вы наводите указатель мыши на многоугольник и не статически статируете на многоугольнике.

Я думаю, что мой лучший способ действий - использовать эту первую ссылку и определить, почему она меняет местоположение, но в то же время, если кто-нибудь знает быстрый и простой способ наложить ярлык на многоугольник в листовке, Я был бы очень обязан.

Кроме того, если у меня есть какие-либо ошибочные предположения о двух ссылках выше, пожалуйста, не стесняйтесь выпрямить меня.

Спасибо очень заблаговременно.

4b9b3361

Ответ 1

Плакат с надписью labellet также позволяет создавать статические метки, см. демонстрацию . Единственная причина, по которой метка полилинии не является статичной, заключается в том, что она перемещается по ходу вдоль полилинии.

Возможно, вы можете сделать это лучше, переопределив bindLabel() для полигонов, но это простой способ добавить статическую метку в центр многоугольника:

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

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

Ответ 2

Вы можете использовать onEachFeature опцию L.geoJson для создания нового L.divIcon для каждого многоугольника.

L.geoJson(geoJsonData, {
  onEachFeature: function(feature, layer) {
    var label = L.marker(layer.getBounds().getCenter(), {
      icon: L.divIcon({
        className: 'label',
        html: feature.properties.NAME,
        iconSize: [100, 40]
      })
    }).addTo(map);
  }
);