UNPKG

2.2 kBJavaScriptView Raw
1goog.require('ol.Feature');
2goog.require('ol.Map');
3goog.require('ol.Overlay');
4goog.require('ol.View');
5goog.require('ol.geom.Point');
6goog.require('ol.layer.Tile');
7goog.require('ol.layer.Vector');
8goog.require('ol.source.TileJSON');
9goog.require('ol.source.Vector');
10goog.require('ol.style.Icon');
11goog.require('ol.style.Style');
12
13
14var iconFeature = new ol.Feature({
15 geometry: new ol.geom.Point([0, 0]),
16 name: 'Null Island',
17 population: 4000,
18 rainfall: 500
19});
20
21var iconStyle = new ol.style.Style({
22 image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
23 anchor: [0.5, 46],
24 anchorXUnits: 'fraction',
25 anchorYUnits: 'pixels',
26 src: 'data/icon.png'
27 }))
28});
29
30iconFeature.setStyle(iconStyle);
31
32var vectorSource = new ol.source.Vector({
33 features: [iconFeature]
34});
35
36var vectorLayer = new ol.layer.Vector({
37 source: vectorSource
38});
39
40var rasterLayer = new ol.layer.Tile({
41 source: new ol.source.TileJSON({
42 url: 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json?secure',
43 crossOrigin: ''
44 })
45});
46
47var map = new ol.Map({
48 layers: [rasterLayer, vectorLayer],
49 target: document.getElementById('map'),
50 view: new ol.View({
51 center: [0, 0],
52 zoom: 3
53 })
54});
55
56var element = document.getElementById('popup');
57
58var popup = new ol.Overlay({
59 element: element,
60 positioning: 'bottom-center',
61 stopEvent: false,
62 offset: [0, -50]
63});
64map.addOverlay(popup);
65
66// display popup on click
67map.on('click', function(evt) {
68 var feature = map.forEachFeatureAtPixel(evt.pixel,
69 function(feature) {
70 return feature;
71 });
72 if (feature) {
73 var coordinates = feature.getGeometry().getCoordinates();
74 popup.setPosition(coordinates);
75 $(element).popover({
76 'placement': 'top',
77 'html': true,
78 'content': feature.get('name')
79 });
80 $(element).popover('show');
81 } else {
82 $(element).popover('destroy');
83 }
84});
85
86// change mouse cursor when over marker
87map.on('pointermove', function(e) {
88 if (e.dragging) {
89 $(element).popover('destroy');
90 return;
91 }
92 var pixel = map.getEventPixel(e.originalEvent);
93 var hit = map.hasFeatureAtPixel(pixel);
94 map.getTarget().style.cursor = hit ? 'pointer' : '';
95});