private Shape mPolygonShapeParser(Shape shape){
		
		// Obtenemos las coordenadas de cada punto del shape
		for (int x = 0; x < shape.getPoligons().size(); x++){
			Coordinate[] coor = shape.getCoordenadas(x);

			// Miramos por cada punto si existe un nodo, si no lo creamos
			for (int y = 0 ; y < coor.length; y++){
				// Insertamos en la lista de nodos del shape, los ids de sus nodos
				List<String> l = new ArrayList<String>();
				l.add(shape.getShapeId());
				shape.addNode(x,utils.generateNodeId(shape.getCodigoMasa(), coor[y], null, l));
			}
		}

		// Partimos el poligono en el maximo numero de ways es decir uno por cada
		// dos nodos, mas adelante se juntaran los que sean posibles
		for (int x = 0; x < shape.getPoligons().size() ; x++){
			List <Long> nodeList = shape.getNodesIds(x);
			for (int y = 0; y < nodeList.size()-1 ; y++){
				List<Long> way = new ArrayList<Long>();
				way.add(nodeList.get(y));
				way.add(nodeList.get(y+1));
				if (!(nodeList.get(y) == (nodeList.get(y+1)))){
					List<String> shapeIds = new ArrayList<String>();
					shapeIds.add(shape.getShapeId());
					shape.addWay(x,utils.generateWayId(shape.getCodigoMasa(), way, shapeIds));
				}
			}
		}

		// Creamos una relation para el shape, metiendoe en ella todos los members
		List <Long> ids = new ArrayList<Long>(); // Ids de los members
		List <String> types = new ArrayList<String>(); // Tipos de los members
		List <String> roles = new ArrayList<String>(); // Roles de los members
		for (int x = 0; x < shape.getPoligons().size() ; x++){
			List <Long> wayList = shape.getWaysIds(x);
			for (Long way: wayList)
				if (!ids.contains(way)){
					ids.add(way);
					types.add("way");
					if (x == 0)roles.add("outer");
					else roles.add("inner");
				}
		}
		List<String> shapeIds = new ArrayList<String>();
		shapeIds.add(shape.getShapeId());
		shape.setRelation(utils.generateRelationId(shape.getCodigoMasa(), ids, types, roles, shape.getAttributes(), shapeIds));
		
		return shape;
	}