Cas Border-ligne: MySQL point in_Polygon Fonction Résultats en Doublons Lorsque le point est à la frontière

StackOverflow https://stackoverflow.com/questions/3122088

  •  30-09-2019
  •  | 
  •  

Question

J'utilise MySQL pour tirer lat languit à partir d'une base de données et vérifier si elles sont ou non dans un quartier particulier.

Tout fonctionne très bien, sauf si le point est à la frontière entre les deux quartiers. Ensuite, le point est inclus dans les deux quartiers. Il se reproduit. Quelle est la meilleure façon de gérer les points qui sont sur les frontières?

Chaque point doit être compté dans un seul neighborhood-- pas les deux. Je ne veux pas aussi, par exemple, le quartier A pour obtenir tous les cas à la frontière, mais le quartier limitrophe, quartier B, pour obtenir zéro cas.

Imaginez que le point 30,3030, -70,7070 se trouve à la frontière entre Newport et Oldport. Malheureusement, le point est compté deux fois. Il est enregistrée comme étant à la fois Oldport et Newport.

  

Type | latitude | longitude | quartier

small |  30.3030  | -70.7070  | Newport
small |  30.3030  | -70.7070  | Oldport
small |  30.3344  | -70.7274  | Anotherport

J'utilise l'instruction select ci-dessous:

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 a colonnes:

    tapez
  • (VARCHAR)
  • latitude (décimal)
  • longitude (décimal)

... et neighborhood_shapes a colonnes:

  • quartiers (VARCHAR)
  • neighborhood_polygons (géométrie)

J'utilise la fonction myWithin pour vérifier si le point est dans un quartier ou d'une autre. Voici un lien vers elle: fonction myWithin au forum mySQL. La fonction retourne 1 lorsque le point se trouve dans le polygone et 0 lorsqu'il se trouve pas dans le polygone.

Comment voulez-vous résoudre ce problème? Un conseil?

Était-ce utile?

La solution

D'accord, je compris. Il y avait une très faible chevauchement dans certains des polygones. Ainsi, lorsque la fonction a couru mis au point dans les deux quartiers.

Merci.

-Laxmidi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top