/* eslint-disable no-unused-vars */ import React, { useEffect, useMemo, useRef, useState } from 'react' import { useLeafletContext } from '@react-leaflet/core' import L from 'leaflet' import 'leaflet.vectorgrid' import '../generalWms/L.VectorGrid.VectorPoi' import { useMap } from 'react-leaflet' function getVectorStyles(layerName, fieldName) { const style = {} style[layerName] = function (properties, zoom) { const p = properties[fieldName] return { color: p < 0.001 ? 'transparent' : p < 5 ? '#800026' : p < 15 ? '#E31A1C' : p < 30 ? '#FEB24C' : '#00ff00', fillOpacity: 0.2, // fillOpacity: 1, stroke: true, fill: true, //opacity: 0.2, weight: 3 } } return style } export const Styles = { water: { fill: true, weight: 1, fillColor: '#06cccc', color: '#06cccc', fillOpacity: 0.2, opacity: 0.4 }, admin: { weight: 1, fillColor: 'pink', color: 'pink', fillOpacity: 0.2, opacity: 0.4 }, waterway: { weight: 1, fillColor: '#2375e0', color: '#2375e0', fillOpacity: 0.2, opacity: 0.4 }, landcover: { fill: true, weight: 1, fillColor: '#53e033', color: '#53e033', fillOpacity: 0.2, opacity: 0.4 }, landuse: { fill: true, weight: 1, fillColor: '#e5b404', color: '#e5b404', fillOpacity: 0.2, opacity: 0.4 }, park: { fill: true, weight: 1, fillColor: '#84ea5b', color: '#84ea5b', fillOpacity: 0.2, opacity: 0.4 }, boundary: { weight: 1, fillColor: '#c545d3', color: '#c545d3', fillOpacity: 0.2, opacity: 0.4 }, aeroway: { weight: 1, fillColor: '#51aeb5', color: '#51aeb5', fillOpacity: 0.2, opacity: 0.4 }, road: { // mapbox & nextzen only weight: 1, fillColor: '#f2b648', color: '#f2b648', fillOpacity: 0.2, opacity: 0.4 }, tunnel: { // mapbox only weight: 0.5, fillColor: '#f2b648', color: '#f2b648', fillOpacity: 0.2, opacity: 0.4 // dashArray: [4, 4] }, bridge: { // mapbox only weight: 0.5, fillColor: '#f2b648', color: '#f2b648', fillOpacity: 0.2, opacity: 0.4 // dashArray: [4, 4] }, transportation: { // openmaptiles only weight: 0.5, fillColor: '#f2b648', color: '#f2b648', fillOpacity: 0.2, opacity: 0.4 // dashArray: [4, 4] }, transit: { // nextzen only weight: 0.5, fillColor: '#f2b648', color: '#f2b648', fillOpacity: 0.2, opacity: 0.4 // dashArray: [4, 4] }, building: { fill: true, weight: 1, fillColor: '#2b2b2b', color: '#2b2b2b', fillOpacity: 0.2, opacity: 0.4 }, water_name: { weight: 1, fillColor: '#022c5b', color: '#022c5b', fillOpacity: 0.2, opacity: 0.4 }, transportation_name: { weight: 1, fillColor: '#bc6b38', color: '#bc6b38', fillOpacity: 0.2, opacity: 0.4 }, place: { weight: 1, fillColor: '#f20e93', color: '#f20e93', fillOpacity: 0.2, opacity: 0.4 }, housenumber: { weight: 1, fillColor: '#ef4c8b', color: '#ef4c8b', fillOpacity: 0.2, opacity: 0.4 }, poi: { weight: 1, fillColor: '#3bb50a', color: '#3bb50a', fillOpacity: 0.2, opacity: 0.4 }, kpdl_npwp_tidak_valid: { weight: 1, fillColor: '#3bb50a', color: '#3bb50a', fillOpacity: 0.2, opacity: 0.4 }, earth: { // nextzen only fill: true, weight: 1, fillColor: '#c0c0c0', color: '#c0c0c0', fillOpacity: 0.2, opacity: 0.4 }, // Do not symbolize some stuff for mapbox country_label: [], marine_label: [], state_label: [], place_label: [], waterway_label: [], poi_label: [], road_label: [], housenum_label: [], // Do not symbolize some stuff for openmaptiles country_name: [], marine_name: [], state_name: [], place_name: [], waterway_name: [], poi_name: [], road_name: [], housenum_name: [] } export const PoiKpdl = () => { const context = useLeafletContext() // const { map } = context const map = useMap() const providerUrl = `http://localhost:8080/geoserver/wms?REQUEST=GetMap &SERVICE=WMS&VERSION=1.1.0&FORMAT=application/vnd.mapbox-vector-tile&STYLES=&TRANSPARENT=true &LAYERS=matoa:kpdl_npwp_tidak_valid &TILED=false&WIDTH=256&HEIGHT=256&CRS=EPSG:3857` const vectorGrid = useMemo(() => { const options = { interactive: true, type: 'protobuf', vectorTileLayerStyles: { kpdl_npwp_tidak_valid: { // weight: 2, fillColor: '#3388ff', color: '#f20e93', fillOpacity: 1, opacity: 1, radius: 7, fill: true, zIndex: 2, getFeatureId: function (f) { return f.properties.UUID } } } } return L.vectorGrid.vectorpoi(providerUrl, options) }, [providerUrl, Styles]) // vectorGrid.on('click', function (e) { // console.log(this) // console.log('clicked', e) // }) // vectorGrid.on('mouseover', function (e) { // console.log('mouseover', e) // }) useEffect(() => { map.addLayer(vectorGrid) return () => { map.removeLayer(vectorGrid) } }, [map, vectorGrid]) return null }