Quiero crear un evento de clic para que las capas de coropletas muestren marcadores dentro de sus coordenadas de polígono. Creé la capa de coropletas usando el complemento del folleto y estoy buscando una manera de mostrar los puntos dentro del polígono, similar a como lo he visto usando el complemento turf -js, la mayoría de los ejemplos que he visto en línea. sin embargo, enlace a la creación de un polígono con los puntos. Los dos archivos que tengo (atributos de polígono por condado y coordenadas de punto) tienen una característica de propiedad similar que podría sustituir por vinculación (ID de condado); sin embargo, no estoy seguro de un método dinámico utilizado para procesar el enlace. Digamos: si tengo más de 100 condados dentro de 1 estado, vinculando los puntos a cada condado en lugar de crear manualmente la colección de características var para cada condado y el conjunto de puntos correspondientes.
Aquí está mi código de coropletas, las coordenadas del polígono para la salida estatal a los límites por condado:
let plethstate = new L.layerGroup() geojson = L.choropleth(countydata, { valueProperty: "Amount", scale: ["#ffffb2", "#b10026"], steps: 10, mode: "q", style: { color: "#fff", weight: 1, fillOpacity: 0.8 }, onEachFeature(feature, layer) { layer.bindPopup("CountyID: " + feature.properties.IDcounty + "<br>County: " + feature.properties.NAME + "<br># : " + feature.properties.Number); var state = feature.properties.IDcounty.slice(0,2); if (state == '51') layer.addTo(plethstate); } })Me gustaría hacer referencia a esta capa como una colección de características usando turf Js y encontrar marcadores de puntos dentro de los límites de cada condado, de modo que con un evento onclick() del condado, muestre los marcadores dentro de mi capa de puntos:
var pts = L.geoJson('/data', { pointToLayer: function (feature){ return new L.circleMarker([feature.geometry.coordinates[1], feature.geometry.coordinates[0]], { radius: getRadius(feature.properties.Amount), fillOpacity:0.8, color: getColor(feature.properties.Name), }) } })Al hacer clic en la función para vincular el polígono a la capa de puntos:
$("#mybutton").click(function (event) { var ptsWithin = turf.within(pts.toGeoJSON(), plethstate.toGeoJSON()); console.log(ptsWithin) })Sin embargo, es posible que no entienda la funcionalidad intrínseca del método turf-js: ¿Está vinculando los puntos a var plethstate como una sola capa? ¿O vincula inherentemente los puntos a su capa de polígono correspondiente (cada condado) dentro del grupo de capas (después de convertir a geoJson)?
Para cualquier persona curiosa, pude vincular marcadores a cada capa de polígono dentro del archivo de datos de coropletas usando este método:
var group = L.featureGroup(); let plethstate = new L.layerGroup() geojson = L.choropleth(countydata, { valueProperty: "Amount", scale: ["#ffffb2", "#b10026"], steps: 10, mode: "q", style: { color: "#fff", weight: 1, fillOpacity: 0.8 }, onEachFeature(feature, layer) { layer.bindPopup("CountyID: " + feature.properties.IDcounty + "<br>County: " + feature.properties.NAME + "<br># : " + feature.properties.Number); layer.on("click", function (e){ pointsInBuffer = L.geoJSON().addTo(group); var ptswithin = turf.pointsWithinPolygon(pts.toGeoJSON(), layer.toGeoJSON()) console.log(ptswithin) pointsInBuffer.addData(ptswithin); }) var state = feature.properties.IDcounty.slice(0,2); if (state == '51') layer.addTo(plethstate); } })Tenga en cuenta que la función de clic en el código anterior no habilita los marcadores, pero envía los datos al grupo de características. Para habilitar el grupo de características como una capa opcional, adjunté una casilla de verificación (cuando está marcada, renderiza marcadores al hacer clic y elimina cuando no está marcada). Se agregó un botón opcional para actualizar los marcadores en el grupo de características cuando se hace clic.