I m utilizando QGIS 1.8 Lisboa. Después de calcular los centroides de polígonos shapefile, si algunos de ellos se encuentran fuera del polígono contornos, me gustaría trasladar a ellos en el polígono del que procedían. El criterio debe ser unívoco, como debo utilizar para extraer las coordenadas para ser utilizado como el código de identificación del polígono de sí mismo. Por lo tanto, el procedimiento de salida el mismo punto de ubicación cada vez que se ejecuta para el mismo polígono (no una posición al azar, como por "azar" puntos de función, que le da un nuevo resultado de cada una de las veces que se corrió).
Respuestas
¿Demasiados anuncios?Usted podría utilizar el bien formada biblioteca de python, que proporciona una función representative_point()
que está garantizado que se encuentran dentro del polígono.
He aquí una secuencia de comandos de Python que se puede ejecutar en el QGIS consola de Python. La capa de polígonos para el que desea crear el atributo debe ser seleccionado. La función toma el nombre del atributo que se desea actualizar. El atributo ha de existir en su capa ya, tiene que ser de tipo cadena, y debe ser lo suficientemente larga (30 caracteres).
He aquí un ejemplo de los puntos que el algoritmo encuentra:
import shapely.wkb
def setIDPoint(attributename):
layer = qgis.utils.iface.activeLayer()
provider = layer.dataProvider()
fields = provider.fields()
provider.select(provider.attributeIndexes() )
attributeID = provider.fieldNameIndex(attributename)
feature = QgsFeature()
layer.startEditing()
while provider.nextFeature(feature):
wkb = feature.geometry().asWkb()
polygon = shapely.wkb.loads(wkb)
reprPoint = ','.join([str(polygon.representative_point().x), str(polygon.representative_point().y)] )
feature.changeAttribute(attributeID, reprPoint)
layer.updateFeature(feature)
layer.commitChanges()
El ftools centroide de la herramienta puede colocar el centro de gravedad fuera del polígono si es cóncava.
ST_PointOnSurface
definitivamente va a hacer lo que quiera. Puede utilizar el comando desde el interior de QGIS si usted tiene instalado mediante el ASADOR para conseguir tu shapefile en PostGIS y, a continuación, utilizar la PgQuery plugin para ejecutar la consulta.
Alternativamente, si la instalación de PostGIS es un poco demasiado para un solo uso, puede utilizar Spatialite desde dentro de QGIS. Usted puede utilizar el QSpatiaLite plugin de importación de datos SpatiaLite y ejecutar la consulta (SpatialLite honores ST_PointOnSurface
).
cuando yo te entiendo a la derecha, uso: Vector->Investigación Tools_>Puntos al Azar. Ahora hay que seleccionar en "Diseño de Muestreo Estratificado (polígonos Individuales)" el valor de uso de campo de entrada y el uso adecuado de campo, lo que le da valor numérico de puntos, lo que debe ser genereated para cada polígono
realcentroids plugin, disponible para instalar a través de Plugins > Administrar e Instalar Plugins trabajado para mí en QGIS 2.2 para generar centroide-como puntos de forzado en el interior de cada polígono si cóncavo (el punto se encuentra muy cerca de la orilla). He probado el Azar los puntos de la herramienta según lo sugerido por Kurt, y aunque me especificado 1 punto por cada polígono, genera dos en su lugar. Una desventaja adicional es que en la mayoría de los casos, los puntos no representan el centro de gravedad como son al azar.