Cómo generar el GML de construcciones para el modelo 902 (guía completa 2026)
Guía práctica para producir un GML INSPIRE Buildings Extended 2D que valida la SEC: bu-ext2d 2.0, ISO-8859-1, CW exterior, srsName URN, multirrecinto, piscinas openAirPool y los 4 EPSG admitidos. Con XML real.
Si vas a presentar un modelo 902 (declaración de Alteración de Construcciones) ante la Dirección General del Catastro, la Sede Electrónica te va a pedir un GML INSPIRE Buildings Extended 2D. No vale el GML de parcelas que ya conoces, no vale un DWG, no vale un PDF georreferenciado: tiene que ser exactamente ese formato y ningún otro.
Esta guía cubre el flujo completo, desde "cuándo necesitas un GML de construcciones" hasta "qué bytes exactos espera la SEC". Si ya has presentado GML de parcelas (CadastralParcels 4.0), olvida la mitad de lo que sabes — el formato de construcciones es distinto en encoding, en raíz XML y en estructura geométrica.
¿Tienes prisa? Si solo necesitas el GML listo para presentar y no construirlo a mano, puedes generar el GML del modelo 902 online por 9 €: dibujas la huella sobre el mapa del Catastro, rellenas los metadatos y descargas el fichero con el formato SEC exacto. Sin registro ni suscripción. La guía de abajo es para quien quiere entender y construir el GML por su cuenta.
1. ¿Cuándo se exige un GML de construcciones?
El GML de construcciones acompaña al modelo 902 (documentación oficial DGC) en cualquier alteración que cambie la huella construida sobre rasante de una parcela:
- Obra nueva: edificio principal completo de nueva construcción.
- Ampliaciones que modifican la planta (ampliar en planta baja, añadir un cuerpo lateral, cubrir un patio).
- Demoliciones parciales o totales — sí, también la demolición se declara con un GML que marca el polígono como
demolished. - Construcciones auxiliares que tengan paredes y techo: garajes adosados, cobertizos, naves de explotación.
- Piscinas y otras construcciones al aire libre — van con un tipo distinto (
OtherConstruction) pero en el mismo fichero GML.
Cuando hay discrepancia entre lo que ve el ortofoto del PNOA y lo que figura en Catastro, la SEC pide que regularices con un 902 + GML aunque no haya obra reciente. Es el escenario más común en regularizaciones catastrales.
2. El formato exacto: INSPIRE Buildings Extended 2D
El estándar es bu-ext2d versión 2.0, publicado por la DGC como perfil específico del INSPIRE Building Theme. Es una extensión 2D del modelo de edificios de INSPIRE, simplificada para que funcione con la cartografía catastral plana.
Propiedades inmediatas del fichero:
- Encoding:
ISO-8859-1(no UTF-8). Este es el primer punto donde casi todas las herramientas genéricas se equivocan. - Raíz:
<gml:FeatureCollection>(no<wfs:FeatureCollection>como en parcelas v4). - Wrapper de cada feature:
<gml:featureMember>(no<member>como en WFS 2.0). - EPSG admitidos: 25829, 25830, 25831 y 32628 — UTM ETRS89 husos 29-31 y UTM WGS84 huso 28 para Canarias. Ninguna otra proyección vale.
srsNamecomo URN:urn:ogc:def:crs:EPSG::25830(no la URLhttp://www.opengis.net/def/crs/EPSG/0/25830que sí pide el GML de parcelas v4 — sí, son criterios opuestos).- Orientación de polígonos: exterior horario (CW), huecos antihorario (CCW). Misma convención que en parcelas, contraria a la norma OGC.
Ya en este punto, si tu herramienta no controla esos cinco detalles, el GML rebota. Y rebota con un mensaje genérico tipo "validación negativa" que no te dice cuál de los cinco fallaste.
3. Diferencias clave vs GML de parcelas (CP 4.0)
Mucha gente intenta reutilizar pipelines de parcelas para edificios y choca contra una pared. Te dejo el contraste fila a fila para que lo tengas claro:
| Aspecto | Parcelas (CP 4.0) | Construcciones (bu-ext2d 2.0) |
|---|---|---|
| Schema | cp:CadastralParcel | bu-ext2d:Building + bu-ext2d:OtherConstruction |
| Raíz | <wfs:FeatureCollection> | <gml:FeatureCollection> |
| Wrapper | <member> | <gml:featureMember> |
| Encoding | UTF-8 | ISO-8859-1 |
srsName | URL (http://www.opengis.net/def/crs/EPSG/0/25830) | URN (urn:ogc:def:crs:EPSG::25830) |
| Geometría | gml:MultiSurface | gml:Surface con N gml:PolygonPatch |
| Identificador | RC + sufijo | RC + sufijo _Edificio_NN o _PI.N |
La fila más importante es la quinta: el srsName se declara distinto. La SEC valida los dos formatos con dos reglas opuestas, y nadie te avisa.
4. EPSG y precisión geométrica
Los cuatro EPSG que la SEC admite cubren toda España:
- EPSG:25829 — UTM ETRS89 huso 29N (Galicia, oeste de Asturias y León, parte de Portugal).
- EPSG:25830 — UTM ETRS89 huso 30N (la mayor parte peninsular: Madrid, Andalucía, Castilla, Cantábrico central).
- EPSG:25831 — UTM ETRS89 huso 31N (Cataluña, Baleares, este de Aragón).
- EPSG:32628 — UTM WGS84 huso 28N (Canarias). Sí, Canarias va en WGS84, no en ETRS89.
Si presentas las geometrías en otra proyección (web Mercator EPSG:3857, geográficas WGS84 en EPSG:4326, ED50 antiguo, lo que sea), el GML se rechaza por srsName no admitido antes incluso de que se valide la geometría. Hay que reproyectar a la UTM oficial antes de exportar.
La precisión geométrica declarada va en el atributo horizontalGeometryEstimatedAccuracy del Building. La DGC publica sus parcelarios con 0.10 m y ese es el valor por defecto que conviene usar a no ser que tengas un levantamiento topográfico mejor.
5. Anatomía de un <bu-ext2d:Building>
El edificio principal (con paredes y techo) se modela como Building. Te lo despiezo:
<gml:featureMember>
<bu-ext2d:Building gml:id="ES.SDGC.BU.9398516VK3799G">
<bu-ext2d:beginLifespanVersion>2026-05-08T00:00:00</bu-ext2d:beginLifespanVersion>
<bu-ext2d:conditionOfConstruction>functional</bu-ext2d:conditionOfConstruction>
<bu-ext2d:numberOfFloorsAboveGround>3</bu-ext2d:numberOfFloorsAboveGround>
<bu-ext2d:reference>
<bu-ext2d:CadastralReference>
<bu-ext2d:localId>9398516VK3799G</bu-ext2d:localId>
</bu-ext2d:CadastralReference>
</bu-ext2d:reference>
<bu-ext2d:geometry>
<gml:Surface srsName="urn:ogc:def:crs:EPSG::25830">
<gml:patches>
<gml:PolygonPatch>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="2">
414000.00 4477000.00
414000.00 4477025.00
414040.00 4477025.00
414040.00 4477000.00
414000.00 4477000.00
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:PolygonPatch>
</gml:patches>
</gml:Surface>
</bu-ext2d:geometry>
<bu-ext2d:horizontalGeometryEstimatedAccuracy uom="m">0.10</bu-ext2d:horizontalGeometryEstimatedAccuracy>
</bu-ext2d:Building>
</gml:featureMember>
Detalles silenciosos pero críticos:
- El
gml:idtiene que empezar porES.SDGC.BU.seguido del identificador del edificio. Si lo dejas con un id arbitrario tipobldg-001, la SEC rechaza. - El anillo exterior se cierra repitiendo el primer punto al final. Si te olvidas, el parser GML rechaza con error de geometría.
- Las coordenadas tienen dos decimales (precisión cm), separadas por espacio, sin coma.
- El
srsDimension="2"es obligatorio aunque sea redundante: la SEC valida que esté presente.
6. Multirrecinto: cuando un edificio tiene varios cuerpos
Un mismo edificio puede tener dos o más cuerpos disjuntos que catastralmente cuentan como uno solo: un patio interior abierto, dos volúmenes unidos por un porche descubierto, una nave principal con un anexo independiente. La forma correcta de declarar esto es un único <Building> con varios <gml:PolygonPatch> dentro del mismo <gml:Surface>:
<gml:Surface srsName="urn:ogc:def:crs:EPSG::25830">
<gml:patches>
<gml:PolygonPatch>
<!-- cuerpo principal -->
<gml:exterior><gml:LinearRing>...</gml:LinearRing></gml:exterior>
</gml:PolygonPatch>
<gml:PolygonPatch>
<!-- anexo separado -->
<gml:exterior><gml:LinearRing>...</gml:LinearRing></gml:exterior>
</gml:PolygonPatch>
</gml:patches>
</gml:Surface>
No vale declarar un Building por cada cuerpo. La SEC los entendería como edificios distintos y al cargar el modelo 902 desplegaría una alta múltiple en lugar de una alta única.
7. Estados de conservación (conditionOfConstruction)
El elemento conditionOfConstruction admite seis valores, definidos por el INSPIRE Buildings y todos aceptados por la SEC:
functional— edificio en uso normal.projected— proyectado pero no construido.underConstruction— en obra.declined— en desuso pero no demolido.ruin— ruina, sin uso posible.demolished— demolido. Con este valor, la SEC entiende que la huella desaparece del parcelario al validar el 902.
Para una demolición, presentas el GML con la huella original del edificio que ya no existe, marcado como demolished. La SEC compara con el parcelario vigente y registra la baja. Si lo presentas con la huella vacía o sin Building alguno, el modelo 902 no procesa la baja.
8. Piscinas y construcciones auxiliares (OtherConstruction)
Las piscinas, depósitos al aire libre, fuentes ornamentales y similares no son edificios (no tienen techo) pero el Catastro los declara igualmente. Se modelan con OtherConstruction, que tiene una estructura más sencilla:
<gml:featureMember>
<bu-ext2d:OtherConstruction gml:id="ES.SDGC.BU.9398516VK3799G_PI.1">
<bu-ext2d:beginLifespanVersion>2026-05-08T00:00:00</bu-ext2d:beginLifespanVersion>
<bu-ext2d:conditionOfConstruction xsi:nil="true" nilReason="other:unpopulated"/>
<bu-ext2d:constructionNature>openAirPool</bu-ext2d:constructionNature>
<bu-ext2d:reference>
<bu-ext2d:CadastralReference>
<bu-ext2d:localId>9398516VK3799G</bu-ext2d:localId>
</bu-ext2d:CadastralReference>
</bu-ext2d:reference>
<bu-ext2d:geometry>
<gml:Polygon srsName="urn:ogc:def:crs:EPSG::25830">
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="2">
...
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</bu-ext2d:geometry>
</bu-ext2d:OtherConstruction>
</gml:featureMember>
Tres particularidades de las piscinas que confunden a quien viene de hacer GML de edificios:
- La geometría es un
<gml:Polygon>directo, no unSurfacecon patches. No se puede construir una piscina con multirrecinto: si tienes dos vasos disjuntos, son dosOtherConstructionindependientes. - El
gml:idlleva sufijo_PI.1(la N va incrementando si hay varias piscinas en la misma parcela):_PI.1,_PI.2, etc. - El
conditionOfConstructionse declara nulo (xsi:nil="true" nilReason="other:unpopulated"). Las piscinas no tienen estado de conservación según el modelo INSPIRE.
constructionNature admite varios valores; openAirPool es el de piscinas.
9. Sufijos en el localId: _Edificio_NN, _PI.N
Cuando una misma parcela tiene varios edificios (típico en parcelas rústicas o industriales con varios módulos), cada Building lleva el sufijo _Edificio_NN en su gml:id:
ES.SDGC.BU.9398516VK3799G_Edificio_01ES.SDGC.BU.9398516VK3799G_Edificio_02ES.SDGC.BU.9398516VK3799G_Edificio_03
El localId interno (dentro de <CadastralReference>) se mantiene igual — solo cambia el gml:id externo. Esto permite que la SEC distinga los edificios pero los relacione con la misma parcela catastral.
Para piscinas el sufijo es _PI.N con número incremental: _PI.1, _PI.2. Para otros tipos de OtherConstruction la DGC publica catálogos específicos (ver PDF oficial).
10. Tutorial paso a paso con la herramienta online
Si no quieres construir el GML a mano, puedes usar nuestro generador online (9 €/descarga) que produce el formato exacto. Flujo:
- Activa el WMS Catastro como capa de fondo y busca tu parcela por referencia catastral o navegación.
- Dibuja la huella del edificio con la herramienta de polígono. Doble click cierra. Si tienes que dibujar varios cuerpos del mismo edificio (multirrecinto), añade cada cuerpo seguido y la herramienta los agrupa en un único
Surface. - Selecciona modo "Piscina" si lo que vas a dibujar es una
OtherConstructionconopenAirPool. - Rellena los metadatos del edificio: referencia catastral, número de plantas sobre rasante, estado de conservación. Para multirrecinto el sufijo
_Edificio_NNse calcula solo a partir del orden en que dibujes los edificios de la parcela. - Pulsa Generar GML. El backend reproyecta automáticamente desde EPSG:3857 (Web Mercator del mapa) al EPSG UTM oficial que te corresponda, fuerza el sentido CW del exterior, redondea a 2 decimales y emite el XML con encoding ISO-8859-1.
- Descarga. El fichero se llama
<RC>_BU.gmlpor convención SEC y está listo para subir directamente al modelo 902.
La herramienta tiene un límite de 25 features por descarga (Building + OtherConstruction sumados), suficiente para parcelas residenciales y la inmensa mayoría de casos rústicos con varios anexos. Para flujos masivos —volúmenes industriales, urbanizaciones, despachos que tramitan modelos 902 a diario— hace falta el producto de pago de DXF → GML, que además acepta DXF topográfico como entrada y ancla al parcelario oficial.
11. Errores frecuentes al validar
Por orden de frecuencia real, los rebotes que más vemos:
- Encoding UTF-8 en lugar de ISO-8859-1. La declaración XML lleva
encoding="UTF-8"y la SEC rechaza con un error de parser que no menciona el encoding directamente. srsNamecon URL (formato de parcelas v4) en lugar de URN. Misma herramienta, misma persona, distinto formato — fácil de confundir.- Exterior CCW. Si exportas con
shapely.orientdirectamente, te da CCW. Hay que invertirlo (orient(poly, sign=-1.0)) antes de serializar. gml:idsin prefijoES.SDGC.BU.. Las herramientas genéricas ponen ids tipobuilding-1,feature-001, etc.- EPSG no admitido. Web Mercator (EPSG:3857) es la trampa más común si exportas directamente desde un mapa web.
- Coordenadas con coma decimal en lugar de punto. Si tu locale es
es_ESalgunas serializaciones meten comas. - Anillo exterior sin cerrar (primer punto distinto del último). El parser rechaza con
LinearRing not closed. - Multirrecinto declarado como varios
<Building>en lugar de varios<PolygonPatch>dentro del mismo Building. - Piscinas con
conditionOfConstructionpoblado. Tienen que ir conxsi:nil.
Cada uno de estos errores produce un mensaje genérico de la SEC que no apunta directamente al fallo. Hay que ir descartando.
12. Preguntas frecuentes
¿Puedo presentar GML de construcciones con un GML de parcela en el mismo fichero?
No. Son ficheros separados con esquemas distintos. Si la alteración de construcciones implica también un cambio de linderos, presentas dos GML diferentes en el modelo 902.
¿La SEC valida numberOfFloorsBelowGround (sótanos)?
No es obligatorio. Si lo declaras lo respeta, pero si lo omites la SEC no penaliza. La huella en planta no cambia por sótanos.
¿Hace falta declarar la altura del edificio?
No. Buildings 2D es exclusivamente la huella en planta — no se modela el volumen 3D. Para altimetría 3D el formato es bu-3d, que la SEC no acepta para el modelo 902.
Si demuelo un edificio, ¿uso la huella original o la actual (vacía)?
La huella original con conditionOfConstruction igual a demolished. La SEC compara con el parcelario vigente y registra la baja. Si presentas un fichero sin Buildings o con la huella ya borrada, el sistema no procesa la baja.
¿Cuántos decimales admiten las coordenadas?
Dos. La precisión cm es la convención DGC. Si exportas con más decimales el GML pasa la validación pero algunos validadores SEC redondean automáticamente — mejor que la herramienta lo haga explícito.
¿Y las piscinas cubiertas?
Una piscina cubierta tiene paredes y techo, así que no es OtherConstruction con openAirPool — es un Building normal con conditionOfConstruction = functional y, si quieres, una propiedad adicional que indique el uso. La distinción "piscina al aire libre vs piscina techada" es relevante para la valoración catastral.
Conclusión
El GML de construcciones es un formato estricto pero predecible: una vez que tienes la receta (encoding, raíz, srsName URN, CW, sufijos), la SEC valida a la primera. Los rebotes recurrentes son siempre los mismos cinco o seis fallos, y todos se evitan con una herramienta que respete el perfil DGC al pie de la letra.
Si presentas a la SEC con frecuencia, te conviene sistematizar: o construyes tu propio pipeline siguiendo esta guía o usas el generador online (9 €/descarga) y te ahorras los rebotes.
Para el flujo completo de DXF topográfico → GML INSPIRE de parcelas (el otro 90% del trabajo de un topógrafo en Catastro) tienes el producto de pago que cubre todo el pipeline incluida la validación SEC.
¿Te ahorras estos errores con la herramienta?
El primer GML va con el trial gratuito. Si no te convence, no pagas y descargas el GML igual.