Casos Border-Line: MySQL punto in_Polygon de función Resultados por duplicado cuando el punto está en la frontera
-
30-09-2019 - |
Pregunta
Estoy usando MySQL para tirar lat anhela desde una base de datos y comprobar si están o no en un barrio en particular.
Todo funciona muy bien, excepto si el punto está en la frontera entre los dos barrios. Entonces, el punto se incluye en ambos barrios. Se pone duplicado. ¿Cuál es la mejor manera de manejar los puntos que están en las fronteras?
Cada punto debe ser contado en una sola neighborhood-- no ambos. Además, no quiero, por ejemplo, el barrio de A a conseguir todos los casos fronterizos, pero el barrio limítrofe, entorno B, para tener cero casos.
Imaginemos que el punto de 30.3030, -70.7070 encuentra en la frontera entre Newport y Oldport. Por desgracia, el punto se cuenta dos veces. Que se graba como estando en tanto Oldport y Newport.
Tipo | latitud | longitud | barrio
small | 30.3030 | -70.7070 | Newport small | 30.3030 | -70.7070 | Oldport small | 30.3344 | -70.7274 | Anotherport
Yo uso la instrucción de selección a continuación:
SELECT t.type, t.latitude, t.longitude, s.neighborhoods
FROM my_type_table t, neighborhood_shapes s
WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', t.latitude, ' ', t.longitude, ')' ) ) , s.neighborhood_polygons )) = 1
my_type_table tiene columnas:
- tipo (VARCHAR)
- latitud (decimal)
- longitud (decimal)
... y neighborhood_shapes tiene columnas:
- barrios (VARCHAR)
- neighborhood_polygons (geometría)
Yo uso la función myWithin a prueba si el punto está en una zona u otra. Aquí hay un enlace a la misma: myWithin función en MySQL foro . La función retorna 1 cuando el punto está en el polígono y 0 cuando no está en el polígono.
¿Cómo resolver este problema? Cualquier consejo?
Solución
De acuerdo, lo he descubierto. Hubo una pequeña superposición en algunos de los polígonos. Así, cuando la función corrió puso el punto en ambos barrios.
Gracias.
-Laxmidi