[Gfoss] verifica senso digitalizzazione geometria

Luca Sigfrido Percich sigfrido a tiscali.it
Mer 15 Giu 2011 14:58:44 CEST


Mah, in PostGIS ho trovato solo:

ST_LineCrossingDirection()

che accetta due linestring come parametro. La seconda va generata dal
congiungendo il punto originale (mypoint) con la proiezione del punto
sulla prima (mypline):

ST_LineCrossingDirection(
	mypline, 
	st_makeline(
		mypoint, 
		ST_Line_Interpolate_Point(
			mypline, 
			ST_Line_Locate_Point(
				mypline,
				mypoint
			)
		)
	)
)

Se restituisce -1, il punto è a sinistra; +1, il punto è a destra.

Mi pare strano non ci sia qualcosa di più alto livello.

Torno al lavoro, la pausa di divertimento è finita :))))

Sig

Il giorno mer, 15/06/2011 alle 14.36 +0200, Luca Sigfrido Percich ha
scritto:
> Ciao a tutti,
> 
> in teoria si fa così:
> 
> - estraggo il linearring del poligono;
> - ne genero il centroide
> - determino la proiezione e la segmentazione del centroide sulla
> polilinea che corrisponde al linearring.
> 
> Se il centroide cade in "destra geometrica", allora l'arco è
> digitalizzato in senso orario; altrimenti, in senso antiorario.
> 
> 
> Per proiezione e segmentazione, intendo ad esempio le funzioni LRS di
> PostGIS (ST_Line_Locate_Point() per la segmentazione, ma non trovo
> quella che mi dà il lato). Ci sono funzioni analoghe in JTS, quindi in
> GEOS e quindi in python. Secoli fa scrissi una classe Java per gestire
> la segmentazione usando JTS, se ti serve te la spedisco, ma spero che
> qualcuno abbia già implementato una funzione ad alto livello che dato un
> punto e una polilinea mi dice a che distanza, da che lato e con che
> proiezione questo cade su quella. Le funzioni JTS lavorano a livello di
> punto e segmento (2 punti), quindi devi fare un ciclo per lavorare su
> una linestring.
> 
> Fammi sapere se trovi qualcosa, mi interessa molto (soprattutto mi piace
> l'idea di non dover fare il porting di quanto già implementato anni fa e
> potermi così dedicare a cose nuove)
> 
> Sig
> 
> 
> Il giorno mer, 15/06/2011 alle 13.00 +0200, marco zanieri ha scritto:
> > ho provato con la tematizzazione delle coordinate e si riesce a
> > comprendere l'orientamento...grazie mille Luca; credo comunque che
> > possa risultare molto utile la possibilità di individuare la sequenza
> > delle coordinate di una geometria e comunque una procedura automatica
> > che possa riconoscere la presenza di eventuali isole (pieni e
> > vuoti)...
> > grazie a tutti 
> > 
> > Il giorno 15 giugno 2011 12:49, G. Allegri <giohappy a gmail.com> ha
> > scritto:
> >         Il test del centroide è un test del pirla, scusate, perché il
> >         centroide può cadere anche fuori dalla geometria...
> >         Posterò una domanda nell ml di sviluppo ma intanto lo chiedo
> >         anche qua: come si può sapere l'orientamento di una geometria
> >         tramite le api di Qgis?
> >         
> >         giovanni
> >         
> >         Il giorno 15 giugno 2011 12:36, G. Allegri
> >         <giohappy a gmail.com> ha scritto:
> >         
> >         
> >                 Dall'API di QGis non trovo un metodo per determinare
> >                 l'orientamento della sequenza di coordinate... o se si
> >                 tratta di un'isola. Un modo grezzo ma, credo, efficace
> >                 è lanciare questo script nella console di Python
> >                 dentro QGis, nel quale faccio un intersect tra la
> >                 geometria e il suo centroide. Se fossse un'isola
> >                 dovrebbe tornarmi False... o sbaglio?
> >                 
> >                 iface = qgis.utils.iface
> >                 lyr = iface.activeLayer()
> >                 prov = lyr.dataProvider()
> >                 attrlist = prov.attributeIndexes()
> >                 prov.select(attrlist)
> >                 feat = QgsFeature()
> >                 for i in range(lyr.featureCount()):
> >                     prov.nextFeature(feat)
> >                     geom = feat.geometry()
> >                     cent = geom.centroid()
> >                     dentro = geom.intersects(cent)
> >                     if (dentro):
> >                         attributes = feat.attributeMap()
> >                         print 'La feature %s contiene una geometria
> >                 piena' % attributes[0].toInt()[0]
> >                     else:
> >                         print '->>> La feature %s sembra contenere
> >                 un'isola' % attributes[0].toInt()[0]
> >                 
> >                 
> >                 Giovanni
> >                         
> >                 
> >                 
> >                 
> >                 
> >                 Il giorno 15 giugno 2011 11:00, marco zanieri
> >                 <marcozanieri a gmail.com> ha scritto:
> >                         
> >                         Salve,
> >                         ho un problema con alcune geometrie areali,
> >                         avrei la necessità di verificare il senso di
> >                         digitalizzazione (orario:interno poligono
> >                         pieno; antiorario: interno poligono vuoto);
> >                         esiste quest possibilità in Qgis?
> >                         
> >                         Grazie mille,
> >                         marco
> >                         
> >                         -- 
> >                                     dott. Marco Zanieri
> >                            e-mail: marcozanieri a gmail.com
> >                         
> >                                    cartografia tematica
> >                                   banche dati territoriali
> >                              sistemi informativi geografici 
> >                               applicazioni GIS e webGIS
> >                         
> >                         
> >                         
> >                         
> >                         
> >                         
> >                         _______________________________________________
> >                         Iscriviti all'associazione GFOSS.it:
> >                         http://www.gfoss.it/drupal/iscrizione
> >                         Gfoss a lists.gfoss.it
> >                         http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> >                         Questa e' una lista di discussione pubblica
> >                         aperta a tutti.
> >                         Non inviate messaggi commerciali.
> >                         I messaggi di questa lista non rispecchiano
> >                         necessariamente
> >                         le posizioni dell'Associazione GFOSS.it.
> >                         518 iscritti al 3.6.2011
> >                 
> >                 
> >         
> >         
> > 
> > 
> > 
> > -- 
> >             dott. Marco Zanieri
> >    e-mail: marcozanieri a gmail.com
> > 
> >            cartografia tematica
> >           banche dati territoriali
> >      sistemi informativi geografici 
> >       applicazioni GIS e webGIS
> > 
> > 
> > 
> > 
> > _______________________________________________
> > Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
> > Gfoss a lists.gfoss.it
> > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> > Questa e' una lista di discussione pubblica aperta a tutti.
> > Non inviate messaggi commerciali.
> > I messaggi di questa lista non rispecchiano necessariamente
> > le posizioni dell'Associazione GFOSS.it.
> > 518 iscritti al 3.6.2011
> 
> _______________________________________________
> Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> Non inviate messaggi commerciali.
> I messaggi di questa lista non rispecchiano necessariamente
> le posizioni dell'Associazione GFOSS.it.
> 518 iscritti al 3.6.2011



Maggiori informazioni sulla lista Gfoss