I casi border-line: MySQL Point-in_Polygon funzione Risultati in duplicati Quando il punto si trova al confine
-
30-09-2019 - |
Domanda
Sto usando MySQL per tirare anela lat da un database e verificare se sono in un particolare quartiere.
Tutto grandi opere, a meno che il punto è al confine tra due quartieri. Quindi, il punto è incluso in entrambi i quartieri. Essa viene duplicato. Qual è il modo migliore per gestire i punti che si trovano sul confine?
Ogni punto deve essere contato in un solo neighborhood-- non entrambe. Inoltre, io non voglio, per esempio, quartiere un per ottenere tutti i casi di confine, ma il quartiere confinante, quartiere di B, per arrivare a zero i casi.
Immaginate che il punto di 30,3030, -70,7070 si trova al confine tra Newport e Oldport. Purtroppo, il punto viene contato due volte. Esso viene registrato come sia Oldport e Newport.
tipo | latitudine | longitudine | vicinato
small | 30.3030 | -70.7070 | Newport small | 30.3030 | -70.7070 | Oldport small | 30.3344 | -70.7274 | Anotherport
I utilizzare l'istruzione SELECT di seguito:
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 ha colonne:
- tipo (VARCHAR)
- latitudine (decimale)
- longitudine (decimale)
... e neighborhood_shapes ha colonne:
- quartieri (VARCHAR)
- neighborhood_polygons (geometria)
Io uso la funzione myWithin per verificare se il punto è in un quartiere o in un altro. Ecco un link ad esso: myWithin funzione al forum mySQL . La funzione restituisce 1 quando il punto è nel poligono e 0 quando non è nel poligono.
Come vi risolvere questo problema? Qualche consiglio?
Soluzione
Va bene, ho capito. C'era una piccola sovrapposizione in alcuni dei poligoni. Così, quando la funzione di corse ha messo il punto in entrambi i quartieri.
Grazie.
-Laxmidi