Si tu shapefile puede ser convertido a GeoJSON, en otras palabras, fuiste capaz de crear una capa Leaflet adecuada a partir de él en Mapbox, puedes usar el operador Inside de TurfJS como aquí:
http://turfjs.org/static/docs/module-turf_inside.html
Si realmente no quieres ninguna dependencia puedes volver a la calcografía de la escuela secundaria. :) Mi algoritmo es así:
- Iterar sobre los lados del polígono en una dirección tomando los 2 extremos del lado del polígono dado.
- Llamemos a los puntos finales p0(x0,y0) y p1(x1,y1). Su punto de dirección a comprobar es P(x,y)
- Calcular firmado distancia de la línea definida por los 2 puntos del polígono:
d=((y0-y1)x+(x1-x0)y+(x0y1-x1y0))/sqrt((x1-x0)^2+(y1-y0)^2) ( razonamiento aquí )
- Si el punto ESTÁ DENTRO de sus polígonos entonces las distancias calculadas desde los lados del polígono tendrán el mismo signo (dependiendo de la dirección de los anillos todos positivos o todos negativos)
- Si tu polígono tiene agujeros tienes que iterar sobre todos los anillos interiores y tu punto tiene que estar NO DENTRO de los anillos interiores sino DENTRO del anillo exterior.
Espero que esto ayude. Esto no funcionará para polígonos erróneos como las "pajaritas" (lados que se cruzan).
Estoy seguro de que puede haber toneladas de otros algo para estas tareas. Esto sólo salió de la parte superior de mi cabeza como algo que puede ser codificado simplemente en JS.
0 votos
Probablemente pueda utilizar JavaScript Topology Suite(jsts) probablemente en conjunción con proj4js , a resolver un punto en un polígono . Sin embargo, eso no cumple realmente con su requisito de shapefile ..en mi opinión, la mejor solución requerirá ir más allá del shapefile.
0 votos
Además de lo que ha preguntado @elrobis, ¿cómo se utiliza actualmente el shapefile? ¿Sólo se usa para renderizar mosaicos, o los datos poligonales ya están en el navegador (como geojson, etc.)? Además, si tienes python en tu entorno, echa un vistazo a esta respuesta
0 votos
Gracias chicos, me encantaría dejar de usar el archivo de forma por completo. Sólo estoy buscando una solución que sea la mejor para devolver un resultado booleano para una dirección. Y sí, los archivos de forma sólo se están utilizando para renderizar archivos a través de Mapbox.
0 votos
Puedes pasar las geometrías al servicio público de geometría de ESRI y hacer una intersección: tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/