Tengo algunos sitios de celdas: cada celda tiene una orientación de grado de ángulo y un rango en km. Obtengo estas celdas de la base de datos y las represento en un mapa de folleto con semicírculos como se muestra aquí: captura de pantalla de mi mapa
Y tengo una dirección de casa (coords) que quiero verificar si está cubierta por (una o algunas) de las celdas
Como no pude encontrar una manera de verificar si un punto (casa) reside dentro de un semicírculo, decidí convertir mi semicírculo a L.Geojson para usar el complemento leaflet -pip
Código de conversión:
let cellGeojson = { "features": [ { "type": "Feature", "properties": { "id": cell.id, "name": cell.name, "coords": cell.latitude + "," + cell.longitude, "lat": cell.latitude, "long": cell.longitude, "location": cell.location, "azimuth": cell.azimuth, }, "geometry": { "type": "Point", "coordinates": [cell.longitude, cell.latitude] } } ] } let cellLayer = L.geoJSON(cellGeojson, { pointToLayer: function (pointFeature, latlng) { let rangeMarker = L.semiCircle([cell.latitude,cell.longitude], { radius: cell.range, startAngle: cell.angle - 30, stopAngle: cell.angle + 30 }); return rangeMarker; }, }).addTo(this.map) Pero cuando uso el leafletPip.pointInLayer(home, cellLayer, [false]) siempre devuelve una matriz vacía que significa que la casa no está cubierta por ninguna celda, creo que la causa es que el semicírculo creado por la función pointToLayer es solo un el marcador y su capa se tratan como un punto
Probé otros complementos de folletos como Leaflet.PointInPolygon ... pero no funciona porque el semicírculo no es un polígono
Entonces necesito su ayuda para determinar si la casa está cubierta o no.
y lo siento por el mal inglés
Sospecho que está utilizando el complemento jieter/Leaflet-semicircle .
Este complemento ya implementa una función _containsPoint(p) a la que podría llamar usando
p = map.latLngToLayerPoint(L.latLng(yourXCoord,yourYCoord)) .
La función espera un L.point , al que tendrá que convertir primero usando la función latLngToLayerPoint() de sus mapas.
Referencia: https://github.com/jieter/Leaflet-semicircle/blob/master/Semicircle.js
Si eso no funciona o está utilizando un complemento diferente, también puede implementar esta función usted mismo (posiblemente utilizando el archivo mencionado anteriormente como guía).
Esto no es completamente trivial, pero debería ser posible con los siguientes recursos: