labcluster
This commit is contained in:
parent
e3fe6f6194
commit
1d4fb0cf09
243
labcluster.php
Normal file
243
labcluster.php
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Create and style clusters</title>
|
||||||
|
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
|
||||||
|
<link rel="stylesheet" href="librerias/bootstrap/css/bootstrap.min.css" />
|
||||||
|
<script src="https://api.mapbox.com/mapbox-gl-js/v1.10.0/mapbox-gl.js"></script>
|
||||||
|
<link href="https://api.mapbox.com/mapbox-gl-js/v1.10.0/mapbox-gl.css" rel="stylesheet" />
|
||||||
|
<script src="https://code.jquery.com/jquery-3.3.1.js" ></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v1.3.0/mapbox-gl-geocoder.js'></script>
|
||||||
|
<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v1.3.0/mapbox-gl-geocoder.css' type='text/css' />
|
||||||
|
<link href='https://www.mapbox.com/base/latest/base.css' rel='stylesheet' />
|
||||||
|
<link rel='stylesheet' href='./milfs/css/mapero.css' type='text/css' />
|
||||||
|
<link rel="canonical" href="https://labs.mapbox.com/bites/00281/" >
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="map"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
mapboxgl.accessToken = 'pk.eyJ1IjoiaHVtYW5vIiwiYSI6IlgyRTFNdFEifQ.OmQBXmcVg_zq-vMpr8P5vQ';
|
||||||
|
var map = new mapboxgl.Map({
|
||||||
|
container: 'map',
|
||||||
|
style: 'mapbox://styles/mapbox/dark-v10',
|
||||||
|
center: [-72, 4],
|
||||||
|
zoom: 5
|
||||||
|
});
|
||||||
|
map.on('load', function () {
|
||||||
|
map.addSource("addresses", {
|
||||||
|
type: "geojson",
|
||||||
|
data: 'http://localhost/tupali/archivos/74.geojson',
|
||||||
|
cluster: true,
|
||||||
|
clusterMaxZoom: 14, // Max zoom to cluster points on
|
||||||
|
clusterRadius: 50 // Radius of each cluster when clustering points (defaults to 50)
|
||||||
|
});
|
||||||
|
/// estilos cluster
|
||||||
|
|
||||||
|
map.addLayer({
|
||||||
|
id: 'clusters',
|
||||||
|
type: 'circle',
|
||||||
|
source: 'addresses',
|
||||||
|
filter: ['has', 'point_count'],
|
||||||
|
paint: {
|
||||||
|
// Use step expressions (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-step)
|
||||||
|
// with three steps to implement three types of circles:
|
||||||
|
// * Blue, 20px circles when point count is less than 100
|
||||||
|
// * Yellow, 30px circles when point count is between 100 and 750
|
||||||
|
// * Pink, 40px circles when point count is greater than or equal to 750
|
||||||
|
'circle-color': [
|
||||||
|
'step', ['get', 'point_count'],
|
||||||
|
'#51bbd6',
|
||||||
|
100,
|
||||||
|
'#f1f075',
|
||||||
|
750,
|
||||||
|
'#f28cb1'
|
||||||
|
],
|
||||||
|
'circle-radius': [
|
||||||
|
'step', ['get', 'point_count'],
|
||||||
|
20,
|
||||||
|
100,
|
||||||
|
30,
|
||||||
|
750,
|
||||||
|
40
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
map.addLayer({
|
||||||
|
|
||||||
|
id: 'cluster-count',
|
||||||
|
type: 'symbol',
|
||||||
|
source: 'addresses',
|
||||||
|
filter: ['has', 'point_count'],
|
||||||
|
layout: {
|
||||||
|
'text-field': '{point_count_abbreviated}',
|
||||||
|
'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],
|
||||||
|
'text-size': 12
|
||||||
|
}
|
||||||
|
});
|
||||||
|
map.addLayer({
|
||||||
|
id: 'unclustered-point',
|
||||||
|
type: 'circle',
|
||||||
|
source: 'addresses',
|
||||||
|
filter: ['!', ['has', 'point_count']],
|
||||||
|
paint: {
|
||||||
|
'circle-color': '#11b4da',
|
||||||
|
'circle-radius': 4,
|
||||||
|
'circle-stroke-width': 1,
|
||||||
|
'circle-stroke-color': '#fff'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/// estilos cluster
|
||||||
|
// inspect a cluster on click
|
||||||
|
map.on('click', 'clusters', function (e) {
|
||||||
|
var features = map.queryRenderedFeatures(e.point, {
|
||||||
|
layers: ['clusters']
|
||||||
|
});
|
||||||
|
|
||||||
|
var clusterId = features[0].properties.cluster_id;
|
||||||
|
map.getSource('addresses').getClusterExpansionZoom(
|
||||||
|
clusterId,
|
||||||
|
function (err, zoom) {
|
||||||
|
if (err) return;
|
||||||
|
|
||||||
|
map.easeTo({
|
||||||
|
center: features[0].geometry.coordinates,
|
||||||
|
zoom: zoom
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
// When a click event occurs on a feature in
|
||||||
|
// the unclustered-point layer, open a popup at
|
||||||
|
// the location of the feature, with
|
||||||
|
// description HTML from its properties.
|
||||||
|
map.on('click', 'unclustered-point', function (e) {
|
||||||
|
var coordinates = e.features[0].geometry.coordinates.slice();
|
||||||
|
// var mag = e.features[0].properties.mag;
|
||||||
|
var descripcion = e.features[0].properties.description;
|
||||||
|
|
||||||
|
// Ensure that if the map is zoomed out such that
|
||||||
|
// multiple copies of the feature are visible, the
|
||||||
|
// popup appears over the copy being pointed to.
|
||||||
|
while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {
|
||||||
|
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
|
||||||
|
}
|
||||||
|
|
||||||
|
new mapboxgl.Popup()
|
||||||
|
.setLngLat(coordinates)
|
||||||
|
// .setHTML( 'magnitude: ' + mag + '<br>Was there a tsunami?: ' + tsunami )
|
||||||
|
.setHTML( descripcion )
|
||||||
|
.addTo(map);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
// Store IDs and cluster/marker HTMLElements
|
||||||
|
const markers = new Map();
|
||||||
|
|
||||||
|
function updateMarkers(){
|
||||||
|
const features = map.querySourceFeatures('addresses');
|
||||||
|
const keepMarkers = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < features.length; i++) {
|
||||||
|
const coords = features[ i ].geometry.coordinates;
|
||||||
|
const props = features[ i ].properties;
|
||||||
|
const icono = features[ i ].properties.imagen;
|
||||||
|
const descripcion = features[ i ].properties.descripcion;
|
||||||
|
const featureID = features[ i ].properties.control;
|
||||||
|
|
||||||
|
const clusterID = props.cluster_id || null;
|
||||||
|
|
||||||
|
if (props.cluster && markers.has('cluster_'+clusterID)) {
|
||||||
|
|
||||||
|
//Cluster marker is already on screen
|
||||||
|
keepMarkers.push('cluster_'+clusterID);
|
||||||
|
|
||||||
|
} else if (props.cluster) {
|
||||||
|
|
||||||
|
//This feature is clustered, create an icon for it and use props.point_count for its count
|
||||||
|
/*
|
||||||
|
var el = document.createElement('div');
|
||||||
|
el.className = 'mapCluster';
|
||||||
|
el.style.width = '60px';
|
||||||
|
el.style.height = '60px';
|
||||||
|
el.style.textAlign = 'center';
|
||||||
|
el.style.color = 'white';
|
||||||
|
el.style.background = '#16d3f9';
|
||||||
|
el.style.borderRadius = '50%';
|
||||||
|
el.innerText = props.point_count;
|
||||||
|
const marker = new mapboxgl.Marker(el).setLngLat(coords);
|
||||||
|
marker.addTo(map);
|
||||||
|
keepMarkers.push('cluster_'+featureID);
|
||||||
|
markers.set('cluster_'+clusterID,el);
|
||||||
|
*/
|
||||||
|
} else if (markers.has(featureID)) {
|
||||||
|
|
||||||
|
//Feature marker is already on screen
|
||||||
|
keepMarkers.push(featureID);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//Feature is not clustered and has not been created, create an icon for it
|
||||||
|
const el = new Image();
|
||||||
|
// el.style.backgroundImage = 'url(https://placekitten.com/g/50/50)';
|
||||||
|
el.style.backgroundImage = 'url('+icono+')';
|
||||||
|
el.className = 'mapMarker';
|
||||||
|
el.style.width = '50px';
|
||||||
|
el.style.height = '50px';
|
||||||
|
// el.style.borderRadius = '50%';
|
||||||
|
el.dataset.type = props.type;
|
||||||
|
el.addEventListener('click', function() {
|
||||||
|
window.alert("Hola mundo");
|
||||||
|
|
||||||
|
var popup = new mapboxgl.Popup()
|
||||||
|
.setLngLat(coords)
|
||||||
|
.setHTML(descripcion)
|
||||||
|
.addTo(map);
|
||||||
|
});
|
||||||
|
|
||||||
|
const marker = new mapboxgl.Marker(el).setLngLat(coords);
|
||||||
|
marker.addTo(map);
|
||||||
|
keepMarkers.push(featureID);
|
||||||
|
markers.set(featureID,el);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Let's clean-up any old markers. Loop through all markers
|
||||||
|
markers.forEach((value,key,map) => {
|
||||||
|
//If marker exists but is not in the keep array
|
||||||
|
if (keepMarkers.indexOf(key) === -1) {
|
||||||
|
console.log('deleting key: '+key);
|
||||||
|
//Remove it from the page
|
||||||
|
value.remove();
|
||||||
|
//Remove it from markers map
|
||||||
|
map.delete(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
map.on('data', function (e) {
|
||||||
|
if (e.sourceId !== 'addresses' || !e.isSourceLoaded) return;
|
||||||
|
map.on('moveend', updateMarkers); // moveend also fires on zoomend
|
||||||
|
updateMarkers();
|
||||||
|
});
|
||||||
|
map.on('mouseenter', 'clusters', function () {
|
||||||
|
map.getCanvas().style.cursor = 'pointer';
|
||||||
|
});
|
||||||
|
map.on('mouseleave', 'clusters', function () {
|
||||||
|
map.getCanvas().style.cursor = '';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
384
maperogl.php
384
maperogl.php
@ -1,238 +1,186 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset='utf-8' />
|
<meta charset="utf-8" />
|
||||||
<title>Tupale.co</title>
|
<title>Create and style clusters</title>
|
||||||
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
|
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
|
||||||
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.7.0/mapbox-gl.js'></script>
|
<link rel="stylesheet" href="librerias/bootstrap/css/bootstrap.min.css" />
|
||||||
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.7.0/mapbox-gl.css' rel='stylesheet' />
|
<script src="https://api.mapbox.com/mapbox-gl-js/v1.10.0/mapbox-gl.js"></script>
|
||||||
<link href='https://www.mapbox.com/base/latest/base.css' rel='stylesheet' />
|
<link href="https://api.mapbox.com/mapbox-gl-js/v1.10.0/mapbox-gl.css" rel="stylesheet" />
|
||||||
<style>
|
<script src="https://code.jquery.com/jquery-3.3.1.js" ></script>
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#map {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map-overlay {
|
|
||||||
position: absolute;
|
|
||||||
width: 180px;
|
|
||||||
top: 0;
|
|
||||||
left: 10px;
|
|
||||||
padding: 10px;
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
margin-right: 5px;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map-overlay .map-overlay-inner {
|
|
||||||
background: rgba(0, 0, 0, .8);
|
|
||||||
color: #fff;
|
|
||||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.10);
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map-overlay-inner fieldset {
|
|
||||||
border: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0 0 10px;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
/* Dark attribution */
|
|
||||||
|
|
||||||
.mapboxgl-ctrl.mapboxgl-ctrl-attrib {
|
|
||||||
background: rgba(0, 0, 0, .8);
|
|
||||||
}
|
|
||||||
|
|
||||||
.mapboxgl-ctrl.mapboxgl-ctrl-attrib a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
/* Dark popup */
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v1.3.0/mapbox-gl-geocoder.js'></script>
|
||||||
.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip,
|
<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v1.3.0/mapbox-gl-geocoder.css' type='text/css' />
|
||||||
.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip,
|
<link href='https://www.mapbox.com/base/latest/base.css' rel='stylesheet' />
|
||||||
.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {
|
<link rel='stylesheet' href='./milfs/css/mapero.css' type='text/css' />
|
||||||
border-top-color: #202020;
|
<link rel="canonical" href="https://labs.mapbox.com/bites/00281/" >
|
||||||
}
|
|
||||||
|
|
||||||
.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip,
|
|
||||||
.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip,
|
|
||||||
.mapboxgl-popup-anchor-top .mapboxgl-popup-tip {
|
|
||||||
border-bottom-color: #202020;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mapboxgl-popup-anchor-right .mapboxgl-popup-tip {
|
|
||||||
border-left-color: #202020;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mapboxgl-popup-anchor-left .mapboxgl-popup-tip {
|
|
||||||
border-right-color: #202020;
|
|
||||||
}
|
|
||||||
|
|
||||||
#popup-menu ul,
|
|
||||||
#menu li {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mapboxgl-ctrl-group {
|
|
||||||
-webkit-filter: invert(100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.loader {
|
|
||||||
margin: -10px 0 0 -250px;
|
|
||||||
height: 100px;
|
|
||||||
width: 20%;
|
|
||||||
position: fixed;
|
|
||||||
text-align: center;
|
|
||||||
padding: 1em;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
margin: 0 auto 1em;
|
|
||||||
z-index: 9999;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Set the color of the icon
|
|
||||||
*/
|
|
||||||
|
|
||||||
svg path,
|
|
||||||
svg rect {
|
|
||||||
fill: #FF6700;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id='map'></div>
|
<div id="map"></div>
|
||||||
<div class='map-overlay top'>
|
|
||||||
<div class='map-overlay-inner'>
|
<script>
|
||||||
</div>
|
mapboxgl.accessToken = 'pk.eyJ1IjoiaHVtYW5vIiwiYSI6IlgyRTFNdFEifQ.OmQBXmcVg_zq-vMpr8P5vQ';
|
||||||
</div>
|
var map = new mapboxgl.Map({
|
||||||
<div class="loader loader--style1" title="0" id="loader">
|
|
||||||
<svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
|
|
||||||
<path opacity="0.2" fill="#000" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946
|
|
||||||
s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634
|
|
||||||
c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z" />
|
|
||||||
<path fill="#000" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0
|
|
||||||
C22.32,8.481,24.301,9.057,26.013,10.047z">
|
|
||||||
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 20 20" to="360 20 20" dur="0.5s" repeatCount="indefinite" />
|
|
||||||
</path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
mapboxgl.accessToken = 'pk.eyJ1IjoiaHVtYW5vIiwiYSI6IlgyRTFNdFEifQ.OmQBXmcVg_zq-vMpr8P5vQ';
|
|
||||||
/* var bounds = [
|
|
||||||
[-75.04728500751165, 39.68392799015035],
|
|
||||||
[-72.91058699000139, 41.87764500765852]
|
|
||||||
];*/
|
|
||||||
var map = new mapboxgl.Map({
|
|
||||||
container: 'map',
|
container: 'map',
|
||||||
style: 'mapbox://styles/mapbox/dark-v9',
|
style: 'mapbox://styles/mapbox/dark-v10',
|
||||||
center: [-72, 4],
|
//center: [-103.59179687498357, 40.66995747013945],
|
||||||
zoom: 5,
|
zoom: 3
|
||||||
//minZoom: 5,
|
|
||||||
//maxZoom: 5,
|
|
||||||
pitch: 40,
|
|
||||||
// maxBounds: bounds
|
|
||||||
});
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
map.addSource('LosDatos', {
|
|
||||||
type: 'geojson',
|
|
||||||
data: './archivos/74.geojson',
|
|
||||||
//data: 'http://localhost/tupali/milfs/geojson.php?id=74',
|
|
||||||
buffer: 0,
|
|
||||||
maxzoom: 3
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (window.location.search.indexOf('embed') !== -1) map.scrollZoom.disable();
|
|
||||||
var url= ['get', 'title'];
|
|
||||||
map.loadImage(
|
|
||||||
|
|
||||||
// 'https://upload.wikimedia.org/wikipedia/commons/7/7c/201408_cat.png',
|
|
||||||
url,
|
|
||||||
function (error, image) {
|
|
||||||
if (error) throw error;
|
|
||||||
map.addImage('imagenIcono', image);
|
|
||||||
});
|
});
|
||||||
map.addLayer(
|
|
||||||
{
|
map.on('load', function () {
|
||||||
'id': 'datos-1',
|
/* ///gatico
|
||||||
'type': 'symbol',
|
var imagen = features[0].properties.imagen;
|
||||||
'source': 'LosDatos',
|
// map.loadImage('https://upload.wikimedia.org/wikipedia/commons/7/7c/201408_cat.png', function (error, image) {
|
||||||
'layout': {
|
map.loadImage(imagen, function (error, image) {
|
||||||
// get the icon name from the source's "icon" property
|
if (error) throw error;
|
||||||
// concatenate the name to get an icon from the style's sprite sheet
|
map.addImage('cat', image);
|
||||||
'icon-image': 'imagenIcono',
|
|
||||||
// get the title name from the source's "title" property
|
|
||||||
'text-field': ['get', 'title'],
|
|
||||||
'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'],
|
|
||||||
'text-offset': [0, 0.6],
|
|
||||||
'text-anchor': 'top'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
/* map.addLayer({
|
||||||
|
'id': 'points',
|
||||||
|
'type': 'symbol',
|
||||||
|
'source': 'earthquakes',
|
||||||
|
'layout': {
|
||||||
};
|
'icon-image': 'cat',
|
||||||
|
'icon-size': 0.25
|
||||||
map.once('style.load', function(e) {
|
|
||||||
init();
|
|
||||||
map.addControl(new mapboxgl.NavigationControl());
|
|
||||||
map.on('click', function(e) {
|
|
||||||
var features = map.queryRenderedFeatures(e.point, {
|
|
||||||
layers: ['datos-1']
|
|
||||||
});
|
|
||||||
if (!features.length) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
var feature = features[0];
|
});
|
||||||
|
*/
|
||||||
|
//fin gatico
|
||||||
|
// Add a new source from our GeoJSON data and
|
||||||
|
// set the 'cluster' option to true. GL-JS will
|
||||||
|
// add the point_count property to your source data.
|
||||||
|
map.addSource('earthquakes', {
|
||||||
|
type: 'geojson',
|
||||||
|
// Point to GeoJSON data. This example visualizes all M1.0+ earthquakes
|
||||||
|
// from 12/22/15 to 1/21/16 as logged by USGS' Earthquake hazards program.
|
||||||
|
// data: 'https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson',
|
||||||
|
data: 'http://localhost/tupali/archivos/74.geojson',
|
||||||
|
cluster: true,
|
||||||
|
clusterMaxZoom: 14, // Max zoom to cluster points on
|
||||||
|
clusterRadius: 50 // Radius of each cluster when clustering points (defaults to 50)
|
||||||
|
});
|
||||||
|
|
||||||
var popup = new mapboxgl.Popup()
|
map.addLayer({
|
||||||
.setLngLat(map.unproject(e.point))
|
id: 'clusters',
|
||||||
.setHTML(feature.properties.description )
|
type: 'circle',
|
||||||
|
source: 'earthquakes',
|
||||||
|
filter: ['has', 'point_count'],
|
||||||
|
paint: {
|
||||||
|
// Use step expressions (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-step)
|
||||||
|
// with three steps to implement three types of circles:
|
||||||
|
// * Blue, 20px circles when point count is less than 100
|
||||||
|
// * Yellow, 30px circles when point count is between 100 and 750
|
||||||
|
// * Pink, 40px circles when point count is greater than or equal to 750
|
||||||
|
'circle-color': [
|
||||||
|
'step', ['get', 'point_count'],
|
||||||
|
'#51bbd6',
|
||||||
|
100,
|
||||||
|
'#f1f075',
|
||||||
|
750,
|
||||||
|
'#f28cb1'
|
||||||
|
],
|
||||||
|
'circle-radius': [
|
||||||
|
'step', ['get', 'point_count'],
|
||||||
|
20,
|
||||||
|
100,
|
||||||
|
30,
|
||||||
|
750,
|
||||||
|
40
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
map.addLayer({
|
||||||
|
|
||||||
|
id: 'cluster-count',
|
||||||
|
type: 'symbol',
|
||||||
|
source: 'earthquakes',
|
||||||
|
filter: ['has', 'point_count'],
|
||||||
|
layout: {
|
||||||
|
'text-field': '{point_count_abbreviated}',
|
||||||
|
'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],
|
||||||
|
'text-size': 12
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
map.addLayer({
|
||||||
|
|
||||||
|
id: 'unclustered-point',
|
||||||
|
type: 'circle',
|
||||||
|
source: 'earthquakes',
|
||||||
|
filter: ['!', ['has', 'point_count']],
|
||||||
|
paint: {
|
||||||
|
'circle-color': '#11b4da',
|
||||||
|
'circle-radius': 4,
|
||||||
|
'circle-stroke-width': 1,
|
||||||
|
'circle-stroke-color': '#fff'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// inspect a cluster on click
|
||||||
|
map.on('click', 'clusters', function (e) {
|
||||||
|
var features = map.queryRenderedFeatures(e.point, {
|
||||||
|
layers: ['clusters']
|
||||||
|
});
|
||||||
|
|
||||||
|
var clusterId = features[0].properties.cluster_id;
|
||||||
|
map.getSource('earthquakes').getClusterExpansionZoom(
|
||||||
|
clusterId,
|
||||||
|
function (err, zoom) {
|
||||||
|
if (err) return;
|
||||||
|
|
||||||
|
map.easeTo({
|
||||||
|
center: features[0].geometry.coordinates,
|
||||||
|
zoom: zoom
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// When a click event occurs on a feature in
|
||||||
|
// the unclustered-point layer, open a popup at
|
||||||
|
// the location of the feature, with
|
||||||
|
// description HTML from its properties.
|
||||||
|
map.on('click', 'unclustered-point', function (e) {
|
||||||
|
var coordinates = e.features[0].geometry.coordinates.slice();
|
||||||
|
var mag = e.features[0].properties.mag;
|
||||||
|
var descripcion = e.features[0].properties.description;
|
||||||
|
var tsunami;
|
||||||
|
|
||||||
|
if (e.features[0].properties.tsunami === 1) {
|
||||||
|
tsunami = 'yes';
|
||||||
|
} else {
|
||||||
|
tsunami = 'no';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure that if the map is zoomed out such that
|
||||||
|
// multiple copies of the feature are visible, the
|
||||||
|
// popup appears over the copy being pointed to.
|
||||||
|
while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {
|
||||||
|
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
|
||||||
|
}
|
||||||
|
|
||||||
|
new mapboxgl.Popup()
|
||||||
|
.setLngLat(coordinates)
|
||||||
|
// .setHTML( 'magnitude: ' + mag + '<br>Was there a tsunami?: ' + tsunami )
|
||||||
|
.setHTML( descripcion )
|
||||||
.addTo(map);
|
.addTo(map);
|
||||||
});
|
});
|
||||||
|
|
||||||
//Hide loading bar once tiles from geojson are loaded
|
map.on('mouseenter', 'clusters', function () {
|
||||||
map.on('data', function(e) {
|
map.getCanvas().style.cursor = 'pointer';
|
||||||
if (e.dataType === 'source' && e.sourceId === 'LosDatos') {
|
});
|
||||||
document.getElementById("loader").style.visibility = "hidden";
|
map.on('mouseleave', 'clusters', function () {
|
||||||
}
|
map.getCanvas().style.cursor = '';
|
||||||
})
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Use the same approach as above to indicate that the symbols are clickable
|
|
||||||
// by changing the cursor style to 'pointer'.
|
|
||||||
map.on('mousemove', function(e) {
|
|
||||||
var features = map.queryRenderedFeatures(e.point, {
|
|
||||||
layers: ['datos-1']
|
|
||||||
});
|
|
||||||
map.getCanvas().style.cursor = (features.length) ? 'pointer' : '';
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
</script>
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user