Actualmente ofrecemos servicio de recogida y entrega en Marbella, Puerto Banús y determinadas zonas de la Costa del Sol.
En el caso de villas, hoteles, eventos, restaurantes o grandes instalaciones florales, los gastos de envío pueden variar en función de la ubicación y los requisitos.
Mapa de entregas - Floristería Costa del Sol
body {
margin: 0;
padding: 0;
font-family: "Montserrat", Arial, sans-serif;
}
#map-container {
position: relative;
width: 100%;
height: 520px;
touch-action: pan-x pan-y;
}
#map {
height: 100%;
width: 100%;
}
/* Dynamic Overlay for Desktop / Mobile */
.scroll-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(40, 30, 35, 0.7);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
font-weight: 500;
z-index: 1001;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s ease;
backdrop-filter: blur(2px);
text-align: center;
padding: 0 20px;
}
.scroll-overlay.active {
opacity: 1;
}
/* Responsive Legend */
.legend {
background: rgba(255, 255, 255, 0.96);
padding: 14px;
line-height: 20px;
color: #4a4a4a;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
border-radius: 12px;
max-width: 280px;
border: 1px solid #f0f0f0;
}
.legend h4 {
margin: 0 0 8px 0;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.8px;
color: #2d2d2d;
border-bottom: 1px solid #eee;
padding-bottom: 4px;
}
.legend-list {
list-style: none;
padding: 0;
margin: 0;
}
.legend-item {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 6px;
font-size: 12px;
}
.legend-color-box {
display: inline-block;
width: 10px;
height: 10px;
margin-right: 6px;
border-radius: 50%;
flex-shrink: 0;
}
.legend-info {
font-size: 10px;
color: #777;
margin-top: 8px;
border-top: 1px solid #eee;
padding-top: 6px;
line-height: 1.4;
}
.popup-zona h3 {
margin: 0 0 4px 0;
color: #222;
font-size: 14px;
font-weight: 600;
}
.popup-price {
font-size: 14px;
font-weight: bold;
color: #7b5266;
margin-top: 4px;
}
/* Responsive Mobile Styles */
@media (max-width: 600px) {
#map-container {
height: 420px;
}
.legend {
max-width: 210px;
padding: 10px;
}
.legend-item {
font-size: 11px;
}
.legend-info {
display: none;
}
}
Mantén pulsada la tecla Ctrl para ampliar la imagen
const zonasGeoJSON = {
type: "FeatureCollection",
features: [
{
type: "Feature",
properties: {
postal_codes: ["29680"],
postal_code_str: "29680",
name: "Estepona",
price: "€20",
color: "#F3C99F",
},
geometry: {
type: "Polygon",
coordinates: [
[
[-5.18, 36.415],
[-5.18, 36.455],
[-5.08, 36.475],
[-5.05, 36.46],
[-5.05, 36.448],
[-5.11, 36.425],
[-5.15, 36.412],
[-5.18, 36.415],
],
],
},
},
{
type: "Feature",
properties: {
postal_codes: ["29670", "29601"],
postal_code_str: "29670, 29601",
name: "Puerto Banús / San Pedro / Marbella Center",
price: "€15",
color: "#E8B4B8",
},
geometry: {
type: "Polygon",
coordinates: [
[
[-5.05, 36.448],
[-5.05, 36.46],
[-4.98, 36.525],
[-4.87, 36.525],
[-4.87, 36.508],
[-4.95, 36.485],
[-5.0, 36.462],
[-5.05, 36.448],
],
],
},
},
{
type: "Feature",
properties: {
postal_codes: ["29660", "29602", "29603"],
postal_code_str: "29660, 29602, 29603",
name: "East Marbella / Golden Mile / Nueva Andalucía",
price: "€15",
color: "#B8C5B0",
},
geometry: {
type: "Polygon",
coordinates: [
[
[-4.87, 36.508],
[-4.87, 36.535],
[-4.81, 36.535],
[-4.81, 36.492],
[-4.84, 36.5],
[-4.87, 36.508],
],
],
},
},
{
type: "Feature",
properties: {
postal_codes: ["29604"],
postal_code_str: "29604",
name: "Las Chapas / Elviria / Cabopino",
price: "€20",
color: "#D1B3C4",
},
geometry: {
type: "Polygon",
coordinates: [
[
[-4.81, 36.492],
[-4.81, 36.535],
[-4.72, 36.515],
[-4.72, 36.485],
[-4.76, 36.488],
[-4.81, 36.492],
],
],
},
},
],
};
const costaDelSolBounds = L.latLngBounds(
L.latLng(36.38, -5.22),
L.latLng(36.56, -4.68),
);
const isTouchDevice =
"ontouchstart" in window || navigator.maxTouchPoints > 0;
const map = L.map("map", {
scrollWheelZoom: false,
dragging: !isTouchDevice,
tap: true,
minZoom: 11,
maxBounds: costaDelSolBounds,
maxBoundsViscosity: 1.0,
});
L.tileLayer("https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", {
attribution: "© OpenStreetMap contributors, HOT",
maxZoom: 19,
}).addTo(map);
const geojsonLayer = L.geoJSON(zonasGeoJSON, {
style: function (feature) {
return {
fillColor: feature.properties.color,
weight: 1.5,
opacity: 0.9,
color: "#FFFFFF",
fillOpacity: 0.65,
};
},
onEachFeature: function (feature, layer) {
layer.bindPopup(`
`);
layer.on({
mouseover: function (e) {
e.target.setStyle({ fillOpacity: 0.85, weight: 2.5 });
e.target.bringToFront();
},
mouseout: function (e) {
geojsonLayer.resetStyle(e.target);
},
});
},
}).addTo(map);
map.fitBounds(geojsonLayer.getBounds());
// Scroll / Touch Interaction Logic
const mapContainer = document.getElementById("map-container");
const overlay = document.getElementById("scroll-overlay");
const overlayText = document.getElementById("overlay-text");
let overlayTimeout;
if (isTouchDevice) {
overlayText.innerText = "Use two fingers to move the map";
mapContainer.addEventListener("touchmove", function (e) {
if (e.touches.length === 1) {
map.dragging.disable();
overlay.classList.add("active");
clearTimeout(overlayTimeout);
overlayTimeout = setTimeout(
() => overlay.classList.remove("active"),
1200,
);
} else {
map.dragging.enable();
overlay.classList.remove("active");
}
});
} else {
mapContainer.addEventListener(
"wheel",
function (e) {
if (e.ctrlKey) {
e.preventDefault();
map.scrollWheelZoom.enable();
overlay.classList.remove("active");
} else {
map.scrollWheelZoom.disable();
overlay.classList.add("active");
clearTimeout(overlayTimeout);
overlayTimeout = setTimeout(
() => overlay.classList.remove("active"),
1200,
);
}
},
{ passive: false },
);
}
// Legend
const legend = L.control({ position: "bottomright" });
legend.onAdd = function () {
const div = L.DomUtil.create("div", "legend");
div.innerHTML = "
Delivery Zones
";
let listHTML = '
';
zonasGeoJSON.features.forEach((f) => {
listHTML += `
-
${f.properties.name}
${f.properties.price}
`;
});
div.innerHTML += listHTML + "
";
div.innerHTML += `
Out-of-hours delivery
6:00–8:00 / 21:00–01:00: €35
Night delivery: €50
`;
return div;
};
legend.addTo(map);