Più semplicemte si può usare il metodo dell'area. Se è positiva è antiorario, e viceversa.
Console Python di Qgis: def senso(p): area = 0 p0 = p[0] for p1 in p[1:]: area += (p0[0] * p1[1]) - (p0[1] * p1[0]); p0 = p1 if area>0: # antiorario return 0 else: #orario return 1 sensi = {0:'antiorario',1:'orario'} 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() wkbt = geom.wkbType() attributes = feat.attributeMap() print '->>> Feature GIS: %s' % attributes[0].toInt()[0] if wkbt==3: poly = geom.asPolygon() #seq_order(poly[0],attributes) s = senso(poly[0]) print 'Poligono %s: %s' % (i,sensi[s]) else: poly = geom.asMultiPolygon() for p in poly: #seq_order(p[0],attributes) s = senso(p[0]) print 'Poligono %s: %s' % (i,sensi[s]) Il giorno 15 giugno 2011 14:58, Luca Sigfrido Percich <sigfr...@tiscali.it>ha scritto: > > 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 <gioha...@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 > > > <gioha...@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 > > > <marcozani...@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: marcozani...@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@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: marcozani...@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@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@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@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@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