He tenido algo de suerte leyendo y escribiendo a capas. Específicamente, tengo código que leerá una capa shapefile que contiene polilíneas y la salida de la geometría de cada característica a los archivos de texto (utilizado como entrada para un modelo antiguo).
name = layer.name()
provider = layer.dataProvider()
feat = QgsFeature()
# Now we can loop through all the defined features
while provider.nextFeature(feat):
# Get layer attributes
attrs = feat.attributeMap()
for (k,attr) in attrs.iteritems():
if k == 0:
attrOne = attr.toString()
elif k == 1:
attrTwo = attr.toString()
...
# Gets the geometry of the feature
geom = feat.geometry()
# Get the coordinates of the whole line [or use asPoint()]
line = geom.asPolyline()
# all points in the line
for point in line:
lat = point[0]
lon = point[1]
# Add these to a QgsGeometry
your_Own_QgsGeometry.add...
Esto parece que podría ser útil para obtener cada una de las características de sus capas.
Escribir en otra capa no debería ser demasiado complejo a partir de aquí. Algo así debería funcionar en teoría:
# New layer name
filename = "myNewLayer.shp"
# define fields for feature attributes
fields = { 0 : QgsField("attrOne", QVariant.String),
1 : QgsField("attrTwo", QVariant.String),
2 : QgsField("...", QVariant.Int) }
# Create coordinate reference system as WGS84
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
# Create the vector layer
writer = QgsVectorFileWriter(filename, "CP1250", fields, QGis.WKBLineString, crs)
# Create some features
feat = QgsFeature()
feat.addAttribute(0, QVariant(runway))
feat.addAttribute(1, QVariant(arriveDepart))
feat.addAttribute(2, QVariant(subTrack))
# Add your geometry
feat.setGeometry(your_Own_QgsGeometry)
# Add the features
writer.addFeature(feat)
# Add it to QGIS project
self.iface.addVectorLayer(filename, "MyLayerName", "ogr")
Desde aquí deberías poder obtener los datos de cada característica y escribir nuevas características en una nueva capa.
Dan
0 votos
Después de leer todas las respuestas, me he dado cuenta de que todos hablan de cerca de cero y no de cero real, lo que seguramente es imposible. ¿No es así?
1 votos
@Vicrobot: No. La probabilidad puede ser exactamente $0$ para posibles eventos, por ejemplo aquí y aquí .
0 votos
@EricDuminil la probabilidad allí es muy pequeña. Infinitamente pequeña. No $0$ . Admítelo. Si fuera incorrecto, no obtendrías la probabilidad total como 1 si integraras la probabilidad de todo el espacio muestral.
2 votos
@Vicrobot: No hay nada que admitir. Si se multiplican ambos lados de $\frac{1}{\infty}=0$ por $\infty$ , se obtiene $undefined = undefined$ . Con tu lógica, podrías demostrar que un punto debe tener un área no nula ya que un cuadrado es la suma de muchos puntos.
0 votos
@EricDuminil ¿Cómo explicarías entonces qué es una línea? ¿Muchos ceros sumados para formar una línea de longitud infinita?
0 votos
@Vicrobot buena pregunta. math.stackexchange.com/questions/2417029/ y math.stackexchange.com/questions/1083841/ podría ayudar, aunque también me gustaría una respuesta más clara.
0 votos
@EricDuminil Oh mío. Parece que lo están contestando por proceso inverso, es decir, dividiendo una línea con su contenido, teniendo espacio relativo entre ellos. Esto tiene sentido. Pero de nuevo, la división de cualquier número positivo con cualquier número positivo no va a devolver 0. Así que en cuanto a los números muy grandes que tienden al infinito. La principal sospecha que veo aquí es eso del "espacio", que encajamos ahí, y asumir que un número
i
que satisfaga la desigualdad a< i < b, obtendría un lugar entre a y b.0 votos
Parece que en las únicas dimensiones de los llamados números, de alguna manera estamos tratando también con el elemento espacio. De nuevo haciendo
infinitesimals
a incluir.2 votos
@Vicrobot: Una vez más, la probabilidad de elegir $1$ , $\sqrt{2} $ o $\pi$ de cualquier número real entre $0$ y $10$ debe ser exactamente $0$ . La probabilidad está bien definida, debe ser al menos 0 y también debe ser menor que $\frac{1}{n}$ para cualquier $n$ . Significa que debe ser $0$ y no sólo "cerca de cero" o "muy pequeño". Puede parecer raro, pero es cierto, y algún día lo aceptarás ;).
0 votos
Vamos a continuar esta discusión en el chat .
2 votos
@Vicrobot He leído el chat. Ayudaría que usaras la razón de forma rigurosa con un lenguaje específico y bien definido porque las intuiciones humanas sobre los números reales suelen ser erróneas. No sólo tus intuiciones, las mías también. Por ejemplo, elegir un número real al azar uniformemente de $[0,1]$ la probabilidad de obtener un número racional es exactamente $0$ . Para entender este sorprendente resultado es necesario comprender el concepto de Medida del subconjunto cero . El tema principal es el Medida de Lebesgue . Diviértete :)
0 votos
@ZubinMukerjee ¿Rigoroso y bien definido? ¿No son esos estrictos pilares de apoyo sólo una ilusión nuestra, que han estado de pie en el edificio de las intuiciones solamente (aquí me refería a los axiomas). En realidad, si se utiliza el significado correcto de los términos matemáticos, entonces 1/∞ no está realmente definido. Usamos limites para 1/n , entonces hacemos esa cosa tendiente como que n tiende a ∞. En el momento en que hacemos esto, empezamos a dividir algo de alguna dimensión(aquí magnitud) en partes cada vez más pequeñas, pero sin hacerlo desaparecer del todo. Dime si me equivoco hasta aquí.
2 votos
No he dicho nada de " $1/ \infty$ ". Lee sobre la medida de Lebesgue... te dará una mejor comprensión de cómo puede haber eventos con probabilidad $0$ que son posibles.